个人总结,仅供参考,能力有限,难免出错,欢迎大家讨论,书籍参考唐朔飞版《计算机组成原理》
例1 A=+0.1011,B=-0.0101,求[A+B]补
解:无论是加法还是减法,我们最后都要转换成相加,其中[A]补=0.1011,[B]补=1.1011,则[A]补+[B]补=10.0110,将高位的1移去(这里的移去是计算机自动移去高位)
例2 机器数字长为8位(含1位符号位),若A=+15,B=+24,求[A-B]补
解:[A]补=0,0001111,[B]补=0,0011000,但此时要求的是A-B的补码,又[A-B]补=[A]补-[B]补=[A]补+[-B]补
故求得[-B]补=1,1101000(一个数的负数的补码求法为:连同符号在内,每位取反,末位加1)
则可计算[A]补+[-B]补=1,1110111
小结1:加减法符号位1位,不参与运算,加法器有n+1位,同样也可知累加器ACC和寄存器X也为n+1位,可理解为符号位1位+数值位n位,这里和后面要区分开的一个点,这里的符号位没有单独存放,而是和数据一起存放,详情查阅唐版教材P242和P247(原码一位乘法符号位存放在S中,后面会有小结)
2.1 原码一位乘法:原码一位乘法开始我也一直没懂,被教材P244的表6.8卡住了,现用我自己的话解释,阅读下面内容需仔细查看教材P243了解小学数学乘法计算步骤。
现在我们有盒子,每个盒子只有5个空位,我们要在盒子里面进行两个数0.1101和0.1011的计算(即0.1101*0.1011),如果我们按照小学数学的乘法,会发现盒子不够用(请动笔按照教材P243算一下,看是不是超过5个空位)。计算机也是这么想的,它要计算很大很多的数据,就想尽可能省空间和运算次数,所以按照P243运算思路,其计算过程如下:
ACC | |
X | |
MQ |
首先在ACC盒子中放被乘数0.1101,正好5个空位,然后想办法用乘数仿照小学数学乘法去1个1个乘,那就把乘数0.1011放另一个盒子X中。结果我们就放到MQ中吧,但是问题来了,MQ也只有5个空,前面我们的结果0.10001111要9个空,空间不足啊!好办,在乘法过程中,每个乘数的末尾用了一次就不用了,那我们就可以用了之后就把它丢了,那么乘积多出来的部分也可以放。所以就有了教材P244的表6.8
也即,部分积一次一次地放相加结果,加完了右移一位数到乘数空格中,乘数空格本来就5位,故会挤掉低位,这个地位是已经进行运算过了的数,所以丢掉没影响。很多同学包括我,没看懂的原因就是部分积的末位推到了乘数的高位,就像挤牙膏,后面的(部分积)把前面的(乘数)积出来了一点点,但这一点点马上要用来刷牙(已经乘过了),所以没影响。后面其他运算类似,故不再赘述。
小结2:部分积位数n+1,注意加减法中为n,且符号位另有单独的S存放,是通过异或运算得到。因为是原码,进行逻辑移位,故符号位不参与运算。在0.1101*0.1011运算过程中,运算次数是根据1011这4个数决定的,故运算次数是n位,并且我们进行了4次移位,且是在运算之后
2.2 补码一位乘法:两位的运算能简化计算,但对人脑更复杂,考研不考,我们接着看补码一位乘法。
Booth算法:原理和原码一位乘类似,详情参见P254.
小结3:补码考虑到溢出,符号位2位,没有单独运算器,符号位参与运算(是否参与运算的意思,就是算术移位还是逻辑移位的区别。比如原码一位乘,因为是原码,移位的时候不看符号直接添0所以是逻辑移位,而补码一位是跟着符号添加的,故是算术移位,有不清楚的看教材P234的表6.4),同样我们知道符号是参与运算得来的,看最后结果的符号位就行。注意因为一开始需要进行判断正负(因为Booth的原理如此,很长有点难),所以一开始就要进行一次运算,看到底是[-X]补,还是[X]补,所以运算次数是n+1,但移位还是根据本身的位数n,在运算中,因为要判断溢出,现在我们的加法器也就变成了n+2位,也可以记成因为2有两位符号位,所以是n+2.
3. 除法
3.1 原码恢复余数法
核心思想是:相减看是正是负,是正的就说明可以减,那上商1,移位;是负的说明不够减,但现在已经减完了,那要补回来,上商0,移位。如此反复,最后的末位也按此规则。(补码加减交替法末位恒上1)
小结4:此法用的少,首先比较麻烦,最少运算n+1次,最多运算2n+1次,1是第一次进行两数相减判断正负,故为n+1,结合教材P259-260除去恢复的,共5次运算,而本身只有4位数值可进行佐证。移位需n次,上商次数与最低次数相同,为n+1,也即恢复的时候不上商
3.2 原码加减交替法
原码加减交替是在原码恢复余数法基础上改进,本来是负的就补回去,但后面仍要移位,故改成:负的意味着更小,上商0,左移一位之后再加补数,再根据此结果循环。由于一开始要进行相减判断大小,故运算次数n+1次,移位还是n次。并且除法当中左移按逻辑移位(它的原理就是如此),故符号参加运算,但符号位由异或得到,同样由运算器S保存
3.3 补码加减交替法
同为补码,但符号位只有1位,与补码一位乘不同,符号位也是异或得到。上商n+1次,移位n次,符号位参与运算
符号位 | 运算参与 | 运算次数 | 移位次数 | 符号结果 | 符号存储 | ||
---|---|---|---|---|---|---|---|
原码一位乘 | 1 | No | n | n | 异或 | S | |
Booth | 2 | Yes | n+1 | n | 运算 | A | |
原码恢复 | 1 | Yes | n+1~2n+1 | n | 异或 | S | |
原码加减 | 1 | Yes | n+1 | n | 异或 | S | |
补码加减 | 1 | Yes | n+1 | n | 异或 | A |