汇编的 OF位 到底代表什么!

几乎所有的教程都把OF(overflow)翻译成溢出标志,但如果从中文上来理解既然是溢出 那么

下面的计算

add   eax,ecx//eax=0xFFFFFFFF,ecx=0x00000001

结果 eax应该=0x100000000 肯定是容纳不下溢出了。

但实际并不是如此 即使如上计算OF任然是0。并未置1.

这里给我们太多的惊讶了,天啦难道这个溢出标志是个水货。

但在写个程序测试下 依然用add

add   eax,ecx//eax=0x7FFFFFFF,ecx=0x00000001

结果 eax应该=0x80000000 eax绝对容纳得下这个数据。

但OF=1了;

怎么会这样呢;

这次再换个 用减的

SUB  eax,ecx//eax=0x80000000,ecx=1;

结果 eax应该=0x7FFFFFFF eax容纳得下这个数据。

结果又 OF=1了;

要晕掉了 这 OF算什么溢出标志啊!我也搞糊涂了。

 

但是 是否看出规律了??????

如果我们将 eax都当着有符号型的数来看 (最高位为符号位)

add   eax,ecx//eax=0x7FFFFFFF,ecx=0x00000001

这个 正数+正数=负数了!

SUB  eax,ecx//eax=0x80000000,ecx=1;

这个  负数-正数=正数了!

这时我们再来推测OF的作用吧,首先计算时将所有的数据都当成有符号型的数(即使实际编程中 你使用的是无符号型数据),如果计算后的数据(依然当着有符号型)不合理了:

如 正数+正数=负数了! 负数-正数=正数了则置1!

所以OF在加减法运算中如果仅从字面上来理解溢出标志是非常不合理的。 乘除运算也会牵涉到上述计算“合理性”判断置位,同时也只有乘法运算中才会有真正中文意义上的溢出。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值