计算机组成原理定点运算-移位、加、减、乘、除(详细解析-看完就会)定点运算
⼀、移位运算
1.移位运算的意义:
计算机中的移位是数据相对于⼩数点移位(左移或右移),数据移动,⼩数点位置不发⽣变化
2.在平常,数值移位
左移:绝对值扩⼤
右移:绝对值缩⼩
3.在计算机中⼆进制移位
左移:数值绝对值变为原来2倍
右移:数值绝对值变为原来1/2倍
4.算术移位规则
有符号位的移位
左移1位:机器数对应真值的绝对值变为原来2倍
右移1位:机器数对应真值的绝对值变为原来1/2倍
5.移位过程中,如何填补空位
负数:数值部分和真值相同
6.逻辑移位与算术移位
⽆符号数的移位
逻辑左移 低位添0,⾼位移丢
逻辑右移 ⾼位添0,低位移丢
例如:
01010011
逻辑左移 所有位都参加移位操作 ⾼位0移丢,最低位添0 :10100110
算术左移 第⼀个0表⽰符号位,这个数为正数,符号位不参与移位,移位的是后⾯的数据00100110
例如:
10110010
逻辑右移 所有位都参加移位操作 空出的最⾼位补0,最低位丢弃01011001
算术右移 最⾼位不参与移位,符号位,表⽰负数,右移左侧空出最⾼位添1,右侧0丢弃11011001⼆、加法和减法运算
1.补码加减法运算公式
在计算机中
(1)加法
A+B整数:【A】补+【B】补=【A+B】补(mod 2^(n+1))
A+B⼩数:【A】补+【B】补=【A+B】补(mod 2)
(2)减法: A-B=A+(-B)
A-B整数:【A-B】补=【A+(-B)】补(mod 2^(n+1))
A-B⼩数:【A-B】补=【A+(-B)】补(mod 2)
补码运算:连同符号位⼀起相加,符号位产⽣的进位⾃然丢掉
加法例题:
减法例题
1.设机器数字长为8位,(含1位符号位),A=15,B=24,⽤补码求A-B
3.溢出判断
(1)⼀位符号位判溢出
参加操作的两个数(减法时即为被减数和“求补”以后的减数)符号相同,其结果的符号与原操作数的符号不同,即为溢出。
两个正数相加,如果补码最后得到的结果为负数,那就说明发⽣了溢出错误,但是如果有效位有进位的话,会进到数值位去,使得相加后的符号位变为1,这样两个正数相加就变成了负数,显然是错误的,发⽣率溢出。
两个负数相加,本⾝补码的符号位都为1,符号位肯定会发⽣进位,并且最⾼位丢弃,如果此时负数的有效位部分没有进位,那么两个负数相加后的符号位就变成了0,显然发⽣了溢出。
异或运算:
最⾼有效位进位:数值的最⾼位在运算时产⽣的进位
小数的原码符号位产⽣的进位进⾏异或运算
若得到得结果为1,两个进位不相同,可判断出发⽣溢出
例如:
举例:
A=-9 对应的⼆进制1,0111
B=-5 对应的⼆进制1,1011
A+B=11,0010
逗号后⾯进了1,为最⾼有效位的进位,它与数值为的最⾼位1异或得结果为0,表⽰没有发⽣溢出
(2)两位符号位判断溢出
假设做存⼩数定点机中的加法运算,将补码的mod由2改为4
这种形式的补码,即使X>0,也要在⼩数点前⾯加2位,⼩数点数值部分设置两位符号位,⼩数点数值部分和X相同,(并不是说补码和在纸上写的真值的形式完全相同)
同样如果是负数,采⽤4位mod,经过这种变换,数值的数字的符号位,就变为2个1,然后是⼩数点,
后⾯是每位取反,末尾加1
若为整数,原来⽤2^(n+1)作为整数的mod
若采⽤双符号位,mod要变为2^(n+2)
若为整数形式,求补码mod,符号位是m位;
若为正数m个0,后⾯是数值部分
若为负数m个1,后⾯的数值部分要每位取反末尾加1
所以可以推⼴为以4为mod,以8为mod
判断最⾼有效位与符号位是否相等来判断是否溢出
若结果的双符号位相同,未溢出
若结果的双符号位不同,溢出(符号位为10或者01 则发⽣了溢出)
10,xxxxxxx
01,xxxxxxxx
前⾯的符号位的第⼀个符号位,是真正的符号位,第⼆个符号位,是运算时数值发⽣溢出产⽣的符号位所以最⾼符号位代表真正的符号位
三、乘法运算
1.分析笔算乘法
A=-0.1101 B=0.1011
符号位单独处理;
被乘数逐步左移,其数值是本⾝还是0由乘数的某⼀位决定的;
四个部分积分别相加;
乘积位数扩⼤⼀倍
2.笔算乘法改进