计算机组成原理——第二章(9)

上一小节我给大家挖了一个坑,这一小节我们讲一下如何溢出判断,填下这个坑

加减运算和溢出判断

1.原码

1.1加法

原码加法有四种情况,正数+正数   正数+负数   负数+正数   负数+负数

正+正     ---->绝对值做加法,结果为正

负+负     ---->绝对值做加法,结果为负

正+负/负+正    ------>绝对值大的减去绝对值小的,结果符号和绝对值大的一样

有一个注意的是,如果原码正+正或者负-负可能会出现溢出的情况

1.2减法

减法操作可以转变成加法操作,然后继续用加法的操作来处理

我们知道原码加法用电路实现比较难,所以我们一般都会原码转补码,用补码来实现加减运算

2.补码

[A+B]补=[A]补+[B]补

例1:A=15,B=-24,求[A+B]补

[A]原=0,0001111        [A]=0,0001111

[B]原=1,0011000        [B]补=1,1101000

[A+B]补=[A]补+[B]补=0,0001111+1,1101000=1,1110111

转成原码[A+B]原=1,0001001   真值=-9

例1:A=15,B=-24,求[A-B]补

[-B]补=[B]补全部位取反,末位+1,[-B]补=0,0011000

[A-B]补=[A]补+[-B]补=0,0001111+0,0011000=0,0100111

[A-B]原=0,1011001        真值=+39

通过以上的联系,相信大家对于补码的运算,已经非常熟悉了

3.溢出判断(补码)

溢出是怎么产生的呢?举个例子

当正数+正数超过了机器字长所能表示的最大范围就会溢出,也就是上溢

当负数+负数 超过了机器字长所能表示的最小范围就会溢出,也就是下溢

下面有三种方法判断溢出 

3.1方法一

 可以这么说,A_s表示的就是左边绿色方框符号位,B_s表示的是右边绿色方框符号位,S_s表示的是红色方框符号位,个人理解就是,想要达到溢出当且仅当绿色方框都为0或者1时,红色方框是相反的,那就是溢出了

运算结果V=0时,表示红绿方框统一,没有溢出,V=1时,表示红绿方框不一样,溢出了

3.2方法二

大家来看上面这张图,如果想要达到溢出,上面两个绿框为0的情况下,下面的绿框要是1,原因方法一提到过了,简而言之,就是让上面两个绿框和下面的一个绿框相反,方法二就从进位的角度来判断溢出,如果上面两绿框都是0,那么想让下面绿框是1,C_1必须为1,那C_s=0

如果上面两个绿框都为1,那想要下面绿框为0,C_1要为0,那么C_s=1

从中我们得到规律,如果发生溢出,那么C_1C_s相反就行了

那判断 C_1C_s是否相同,我们可以用异或来判断。如果相同则异或为0,反之,异或为1,所以我们得到结论

 

3.3方法三(重点)

 采用双符号位,例如得到的结果01,0001011        前一个符号位0是应该得到的符号,后一个1是实际得到的符号,如果两个不同,那么就是溢出

两个符号位没有发生溢出的情况如下

需要注意的是:虽然是两个符号位,但是实际存储只存储1个符号位,运算时会复制一个符号位

4.符号扩展

符号扩展我们之前有提到过,分为定点整数的扩展和定点小数的扩展

4.1定点整数

定点整数原码需要在符号位后面补0,如果是正整数的话,那就天下太平,因为正整数的原反补都一样。如果是负整数的话,需要原码的符号位补0之后,再根据规则转反码和补码

4.2定点小数 

定点小数原码是在数值位后面补0,正小数原反补都一样,负小数就原码补0之后,再转反补,和定点整数一样

思维导图 

  • 21
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值