首页
社区
课程
招聘
OF标志位
发表于: 2018-12-4 21:25 3451

OF标志位

2018-12-4 21:25
3451
OF标志位,用于判断2个有符号数相加或相减的结果是否溢出。

由于闲的慌,想了一下原因,顺便记录下来:
假设将次高位产生的进位,存到MSB变量中,则根据intel手册中的描述:OF标志位 = CF 异或 MSB


由于从数学的角度,减法运算可以转换为加法运算:

  • 正 - 正 = 正 + 负
  • 正 - 负 = 正 + 正
  • 负 - 正 = 负 + 负
  • 负 - 负 = 负 + 正


所以只需要关注加法:
  • 正 + 正:CF肯定为0。溢出时MSB=1,此时CPU正好也会设置OF为1;没有溢出时,MSB=0,此时CPU也会设置OF为0;
  • 正 + 负( 负 + 正 ):负数被编译器转换成了补码,最高位的和肯定为1。MSB为0时,CF也为0,MSB为1时,CF也为1,即OF始终为0,与正负数相加不可能产生溢出的事实吻合;
  • 负 + 负:CF肯定为1。由于都是补码,MSB=0,表示补码+补码没有溢出,反而原码+原码溢出了,此时OF为1没毛病;MSB=1,表示补码+补码溢出了,反而原码+原码没有溢出,此时OF为0也没毛病。
    

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 737
活跃值: (483)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
好好学习,天天向上
2018-12-4 22:21
0
游客
登录 | 注册 方可回帖
返回
//