鱼C论坛

 找回密码
 立即注册
查看: 4125|回复: 8

[已解决]关于8086汇编OF位是否溢出的判定

[复制链接]
发表于 2019-6-28 15:35:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
看了许久许久,网上查了很多人的回答,仍是不懂,学习快进行不下去了,烦请大神帮忙指点一下。
写出下面每条指令执行后,OF、SF等标志位(检测点11.2中其他标志位都能理解,就这个OF位不能理解)的值
第一组:
mov al,10H
mov al,80H              ;因为判定OF值,所以进行的是有符号位计算,10H(1 0000B)按位取反加1为(1 0000B)为十进制-16,同理80H为十进制-0(1000 0000B),-16-0=-16,在-128~127范围,
                               因此未溢出,OF值为0;1 0000B+1000 0000B=1001 0000B,最高位是1,因此SF的值为1

第二组:
mov al,80H
add al,80H              ;因为判定OF值,所以进行的是有符号位计算,80H按位取反加1,为十进制-0(1000 0000B),-0-0=0,在在-128~127范围,因此未溢出,OF值为0;1000 0000B + 1000 0000B=1
                              0000 0000B  , 最高位是0,因此SF的值为0。(可答案中OF却是1)
                             

第三组:
mov al,0FCH
add al,05H            ;因为判定OF值,所以进行的是有符号位计算,0FCH按位取反加1后为(0000 0001B),十进制为-1,05H按位取反加1后为(1111 1011B)-123D,-1-123=-124,在范围,因此OF为0

第四组:
mov al,7DH
add al,0BH

烦请大神详细指点一下我OF值判定方法是否正确,若不正确,请详解示例
最佳答案
2019-6-28 16:36:59
OF(Overflow Flag)溢出标志,在运行过程中,如操作数超出了机器能表示的范围则称为溢出,此时OF位置1,否则置0.

所以是否溢出就要看是否超过了原加法表示的范围,即对于正数来说超过正数的运算范围就是溢出,反之亦然,
对于加减混合运算超出范围也叫溢出,不要想的太复杂,就平常简单理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-6-28 16:15:11 | 显示全部楼层
本帖最后由 jackz007 于 2019-6-28 16:17 编辑

          对于字节数据,OF,SF 的门槛就是 07FH / 080H,也就是有符号数正负值之间跨越的问题。
   
  1.     mov al,07FH    ; OF = 0 , SF = 0
  2.     inc al         ; OF = 1 , SF = 1 此操作导致溢出,al 寄存器的值脱离原来的正整数范围,从 127 变成 -128
复制代码

   
  1.     mov al,080H   ; OF = 0 , SF = 1
  2.     dec al         ; OF = 1 , SF = 0 此操作导致溢出,al 寄存器的值脱离原来的负整数范围,从 -128 变成 127
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-28 16:36:59 | 显示全部楼层    本楼为最佳答案   
OF(Overflow Flag)溢出标志,在运行过程中,如操作数超出了机器能表示的范围则称为溢出,此时OF位置1,否则置0.

所以是否溢出就要看是否超过了原加法表示的范围,即对于正数来说超过正数的运算范围就是溢出,反之亦然,
对于加减混合运算超出范围也叫溢出,不要想的太复杂,就平常简单理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-28 16:42:24 | 显示全部楼层
所以我的判定方法是什么?
第一组,10H(十进制是16),80H(-128), 相加等于-112, OF=0, SF=1
第二组,80H(十进制是-128), 80H(-128), 相加等于 -256,内存中表示是0, OF=1, SF=1

以此类推
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-28 19:07:43 | 显示全部楼层
jackz007 发表于 2019-6-28 16:15
对于字节数据,OF,SF 的门槛就是 07FH / 080H,也就是有符号数正负值之间跨越的问题。
   
   ...

感谢您的回答,学习了对于字符数据,OF的门槛是07FH/080H。再次感谢您的回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-28 19:09:28 | 显示全部楼层
newu 发表于 2019-6-28 16:42
所以我的判定方法是什么?
第一组,10H(十进制是16),80H(-128), 相加等于-112, OF=0, SF=1
第二组,8 ...

感谢您的回答及耐心指导,好像觉得有点懂了,又有点懵懂。比如:10H,80H看成有符号数,不需要按位取反加1的方式计算出是哪个数据(十进制)的补码吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-28 19:20:50 | 显示全部楼层
haoii 发表于 2019-6-28 19:09
感谢您的回答及耐心指导,好像觉得有点懂了,又有点懵懂。比如:10H,80H看成有符号数,不需要按位取反加 ...

不客气,
10H(二进制是00010000),第一位表示符号位,0代表正数,补码就是他自己
80H(二进制是10000000),第一位符号位是1,表示负数,此时按位取反+1即可算出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-28 19:43:52 | 显示全部楼层
newu 发表于 2019-6-28 19:20
不客气,
10H(二进制是00010000),第一位表示符号位,0代表正数,补码就是他自己
80H(二进制是10000000 ...

我完全懂了,再次感谢您的耐心帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-6-28 19:53:05 | 显示全部楼层
haoii 发表于 2019-6-28 19:43
我完全懂了,再次感谢您的耐心帮助

哈哈,不客气
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-19 19:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表