计算机组成原理之定点加法、减法运算详解(含双符号位运算结果溢出处理)我们利⽤补码表⽰负数后,可以将负数当做正数⼀样来处理,所以在运算器中,加法器就可以完成加法和减法的⼯作。
补码加法
补码加法的公式是:[x]+[y]=[x+y] (mod 2)
eg:1.x=+1001,y=+0101,求x+y.
01001
+00101
01110
所以x=y=+1110.
2.x+1011,y=-0101,求x+y.
01011
+11011
00110
所以x+y=+0110.
补码减法
补码减法的公式为:[x-y]=[x]-[y]=[x]+[-y] (mod 2)
其中,从[y]求[-y]的法则是:对[y]包括符号位“求反且最末位加1”,表⽰为:[-y]=(求反)[y] +2.
ps:利⽤负的真值求补码也可以实现。
eg:1.已知x=-1110,y=+1101,求[x],[-x],[y],[-y].
[x]=10010.
[-x]=[+1110]=01110.
[y]=01101.
[-y]=[-1101]=10011.
2.x=+1101,y=+0110,求x-y。
[x]=01101.
两个负数的补码相加[-y]=[-0110]=11010
故[x-y]=[x]-[y]=[x]+[-y]=01101+11010=00111=+0111
溢出概念与检测⽅法
在定点整数运算过程中如出现⼤于字长绝对值的现象称为“溢出”,在定点机中出现溢出时其结果是不正确的,故运算器必须能检测出溢出。
eg:1.x=+1011,y=+1001,求x+y。
[x]=01011,[y]=01001.
01011
+01001
10100
x+y=10100=-0100,这样两正数相加结果是负数,显然是错误的。
2.x=-1101,y=-1011,求x+y。
[x]=10011,[y]=10101.
10011
+10101
01000
x+y=01000=+1000,两负数相加结果是正数,同样是错误的。两个正数相加结果⼤于机器字长所能表⽰的最⼤正数称为正溢;两个负数相加结果⼩于机器所能表⽰的最⼩负数称为负溢;为了判断“溢出”是否发⽣我们采⽤双符号位法,⼜称为“变形补码”:
补补补n+1补补补补补n+1补补补补补-n 补补补补补补补补补补补补补补补补补补补补补补
遵循规则:1.两个符号位都看作数码⼀样参加运算
2.两数进⾏以2为模的加法,最⾼符号位上产⽣的进位要丢掉。
正数:00xxxxx
负数:11xxxxx
如果两数相加后结果的符号位出现“01”或“10”两种组合表⽰发⽣溢出(最⾼符号位永远指⽰正确的符号)
eg:
1.x=+1100,y=+1000,求x+y。
[x]=001100,[y]=001000.
[x+y]=001100+001000=010100两符号位数字不同,出现"01",出现正溢出。
这时的正确答案应该是⽐原来的四位多⼀位,⽽最⾼位永远指⽰正确的符号,所以答案是x+y=+10100
2.x=-1100,y=-1000,求x+y.
[x]=110100,[y]=111000.
[x+y]=110100+111000=101100两符号位数字不同,出现“10”,出现负溢出。
最终答案是x+y=-10100【对101100求反+1,得010100(这个是-[x+y]),真值为+10100,所以x+y真值就为-10100】
这是很好⽤的⽅法,体会⼀下
总结出以下检测⽅法:
1.以变形补码运算,结果两符号位相异表⽰溢出,相同表⽰未溢出。
2.采⽤单符号位法,最⾼有效位进位和符号位进位相异或,为真则溢出;也就是说最⾼有效位进位和符号位进位同时为1或0表⽰未溢出,否则表⽰溢出。
⼆进制加法/减法器
⼆进制数字A ,B 和⼀个进位输⼊C 相加,产⽣⼀个和输出S ,以及⼀个进位输出C .
这⾥代⼊数字模拟流程,了解其底层基本实现原理即可。
n+2补补补补补补补i i i i i+1
这⾥⽤到数字逻辑基础,平底为与门,弯底且⽆曲线为或门,弯底加曲线为异或门。
对图(a)所⽰⼀位全加器来说,求其结果Si的时间延迟为6T(每级异或门为3T,T为⼀个“与”门或⼀个“或”门的时间延迟作为度量单
位)
图(b)为n位⾏波进位加法器,C 的时间延迟为2T。
若采⽤图a所⽰的⼀位全加器并考虑溢出检测,那么n位⾏波进位加法器的延迟时间t 为t =n*2T+9T=(2n+9)T.
9T为最低位上两级异或门加上溢出异或门的总时间;2T为每级进位链的延迟时间。i+1a a
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论