加减法、原码一位乘法、Booth算法、恢复余数法、加减交替法符号位及小结

在学习计算机组成原理的计算方法时,或为步骤疑惑,或为题目难倒,本文主要介绍思路以及对常用类型小结

个人总结,仅供参考,能力有限,难免出错,欢迎大家讨论,书籍参考唐朔飞版《计算机组成原理》

  1. 运算类型主要分为:加减法、乘法、除法。其中乘法分为:原码一位乘补码一位乘、原码两位乘、补码两位乘,除法分为:原码除法和补码除法,在原码除法中又可分为恢复余数法和加减交替法。下面将依次进行介绍和小结。
  2. C语言使用的都是补码,计算机也都采用补码作加减法运算,概括起来分成4步:
  • 将所给真值或机器数转换成补码
  • 若是相减,则将减数的补码变成负减数的补码,以实现相加
  • 两数进行相加
  • 溢出判断

1. 加减法

例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. 乘法

2.1 原码一位乘法:原码一位乘法开始我也一直没懂,被教材P244的表6.8卡住了,现用我自己的话解释,阅读下面内容需仔细查看教材P243了解小学数学乘法计算步骤。

加减法、原码一位乘法、Booth算法、恢复余数法、加减交替法符号位及小结_第1张图片

 

现在我们有盒子,每个盒子只有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

加减法、原码一位乘法、Booth算法、恢复余数法、加减交替法符号位及小结_第2张图片

也即,部分积一次一次地放相加结果,加完了右移一位数到乘数空格中,乘数空格本来就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  

 

 

 

你可能感兴趣的:(加减法、原码一位乘法、Booth算法、恢复余数法、加减交替法符号位及小结)