OF标记位判断

转自:http://hi.baidu.com/neomanontheway/blog/item/7ada62db3852a12511df9bfd.html

•计算机硬件判断溢出的方法如下:
最高位有进位但次高位没有进位,或者最高位无进位但次高位有进位;也就是最高位和次高位一个有进位一个无进位。

•我们不是机器不使用这么机械的方法,可以使用如下规则(汇编教材第二版第19页):
只有当两个相同符号数相加(含两个不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出。

•例如:3AH+7CH=00111010B+01111100B=10110110B=B6H
次高位一个是0一个是1,但还有一个低位进位1,所以次高位有进位;最高位两个0,还有次高位进位,结果只是1没有进位,所以计算机判断有溢出。
我们判断,看最高位,两个数最高位相同为0,相加后结果最高位为1,所以有溢出。

再如:3AH+8DH,我们可以马上判断出没有溢出。因为这是两个不同符号数相加。

利用调试程序可以帮助你验证。

将数据按有符号数进行补码变换求出对应十进制真值,然后判断也可以,但比较麻烦,不如上述规则简单明了。


提问:

进位和溢出的区别,书上也有解释的。但是我看不太明白。我理解的是,进位和无符号数有关,溢出和有符号数有关。书上说,有进位时,运算结果正确,有溢出时,运算结果已经不正确了。这句话不能理解。您能不能简单地帮我说说呢?

回复:

用8位(字节量)数据相加为例说明溢出后运算结果不正确:

对数据3AH和7CH相加,80x86处理器按照无符号数相加,和是B6H;
转换为十进制表达,就是58+124=182,8位无符号数表达0~255范围,
所以没有超出这个范围、没有进位CF=0。

8位补码表达的有符号数的范围是-128~+127,182超出了这个范围,所以产生溢出、OF=1;
另一方面,补码B6H表达真值是-74;两个正数相加、和不可能是负数,显然运算结果不正确。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值