社区
汇编语言
帖子详情
汇编的OF标志位是怎么回事
SVKING
2011-10-26 05:07:51
请问汇编里的OF标志位是怎么设置的,工作原理是什么啊。逻辑上我理解可是不知道具体怎么设置OF的。
拿王爽的《汇编语言》中的一个讲解OF的例子为例:
“ mov al,0F0H (-16)
add al,78H (120)
add执行后:CF=1,OF=0 ”
不明白OF怎么为0的。
请理解的帮我一下吧,用二进制具体解释一下。逻辑上是120我理解,可是就是OF为什么不是1啊,OF是根据什么设置的啊。
十分感谢!!!
...全文
3219
21
打赏
收藏
汇编的OF标志位是怎么回事
请问汇编里的OF标志位是怎么设置的,工作原理是什么啊。逻辑上我理解可是不知道具体怎么设置OF的。 拿王爽的《汇编语言》中的一个讲解OF的例子为例: “ mov al,0F0H (-16) add al,78H (120) add执行后:CF=1,OF=0 ” 不明白OF怎么为0的。 请理解的帮我一下吧,用二进制具体解释一下。逻辑上是120我理解,可是就是OF为什么不是1啊,OF是根据什么设置的啊。 十分感谢!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qq357055361
2013-05-18
打赏
举报
回复
学习了,牛逼啊
SVKING
2011-10-28
打赏
举报
回复
好吧,知道的差不多了。结贴了,谢谢各位的大力支持!!!!!
xujinzhao
2011-10-27
打赏
举报
回复
of是溢出标志如果符号位也就是最高位的值发生了改变,就设置该位
SVKING
2011-10-27
打赏
举报
回复
我问个对比的例子吧
1111,0000(-16)
+1000,1000(-120)
=0111,1000
就是:
mov al,0F0H
add al,088H
执行后OF是1
而:
1111,0000(-16)
+ 0111,1000(120)
= 0110,1000
就是:
mov al,0F0H (-16)
add al,78H (120)
执行后OF是0
这两个例子都是最高位原来为1,执行后为0,且发生了进位(假设),而结果不一样。计算机是执行时是怎样区分的呢。工作原理是什么?
a794950529
2011-10-27
打赏
举报
回复
恩,我也不大明白,只知道原理上是超了-128~127,OF就是1
SVKING
2011-10-27
打赏
举报
回复
额我有错了,
mov al,0F0H (-16)
add al,78H (120)
是:
1111,0000
+ 0111,1000
= 0110,1000
最高位的1+1后,超了啊,OF不用该为1吗
SVKING
2011-10-27
打赏
举报
回复
[Quote=引用 8 楼 xujinzhao 的回复:]
of是溢出标志如果符号位也就是最高位的值发生了改变,就设置该位
[/Quote]
mov al,0F0H (-16)
add al,78H (120)
就是:
1111,0000
+ 1000,1000
= 0111,1000
最高位的1+1后,超了啊,OF不用该为1吗
SVKING
2011-10-27
打赏
举报
回复
[Quote=引用 7 楼 simbon 的回复:]
无符号数:F0H(240) + 78H(120) = 168H(360)
有符号数:F0H(-16) + 78H(120) = 68H(104)
360超出了8位数所能表示的范围-128~127
104没有超出8位数所能表示的范围,因此有符号数运算时,没有溢出
再如:
无符号数:F0H(240) + 88H(136) = 178H(376)
有符号数:F0H(-16) + 8……
[/Quote]
我知道是这个理,但我不知道计算机是怎么工作的,是不是根据符号位是否改变来设置的,是的话,
1111,0000
+ 1000,1000
= 0111,1000
最高位的1+1后,超了啊,OF不用该为1吗。
不是的话,那是怎么设置OF的啊
SVKING
2011-10-27
打赏
举报
回复
[Quote=引用 22 楼 simbon 的回复:]
引用 20 楼 jerry_ye601 的回复:
F0H:11110000B
78H:01111000B
11110000B
+01111000B
-------------
101101000B
其中最高位进一对应于CF=1,而OF的值应当是最高位的进位(1)和次高位进位(1)的异或,所以所求得的值OF=0
明白了么?
你可以参考这个,这是个人经验,官方并没有这样解释……
[/Quote]
好的,确实可以确定。有道理就可以了。真是太感谢你了。顺便问一下,你明白这样确定OF的道理是什么吗?
SVKING
2011-10-27
打赏
举报
回复
[Quote=引用 20 楼 jerry_ye601 的回复:]
F0H:11110000B
78H:01111000B
11110000B
+01111000B
-------------
101101000B
其中最高位进一对应于CF=1,而OF的值应当是最高位的进位(1)和次高位进位(1)的异或,所以所求得的值OF=0
明白了么?
[/Quote]
明白了,这就是我找的答案。十分感谢!!!可是这么确定OF的原理是什么啊,我想了一下,可是想不大明白。
SVKING
2011-10-27
打赏
举报
回复
[Quote=引用 19 楼 simbon 的回复:]
你确定你的两个例子都溢出了?其中一个溢出了,另一个没溢出。计算机在计算的时候会有两个答案,一个是有符号的,一个是无符号的,虽说两个答案都是一个值。你现在不是不明白,只是脑子转不过来弯,我保证你停一个星期再考虑这个问题一定豁然开朗
[/Quote]
这两个例子是第一个溢出,第二个没溢出。我知道啊。可是不明白计算机是根据什么设置OF的,最底层的。
Jerry_ye601
2011-10-27
打赏
举报
回复
F0H:11110000B
78H:01111000B
11110000B
+01111000B
-------------
101101000B
其中最高位进一对应于CF=1,而OF的值应当是最高位的进位(1)和次高位进位(1)的异或,所以所求得的值OF=0
明白了么?
zzxgo
2011-10-27
打赏
举报
回复
没有溢出自然就为0了
SVKING
2011-10-27
打赏
举报
回复
[Quote=引用 16 楼 voidnull 的回复:]
引用 14 楼 svking 的回复:
我问个对比的例子吧
1111,0000(-16)
+1000,1000(-120)
=0111,1000
就是:
mov al,0F0H
add al,088H
执行后OF是1
而:
1111,0000(-16)
+ 0111,1000(120)
= 0110,1000
就是:
mov al,0F0H (-16)
ad……
[/Quote]
我明白计算机里真正只有的只是0和1,计算机不知道是有符号还是无符号的,所以把两种情况都记录下,怎么用取决于程序员怎么设计。可是我现在搞不明白计算机是根据哪儿设置OF的,我的两个例子里,都有符号位的改变,和进位。计算机是怎么区分是否要改变OF的呢?
SVKING
2011-10-27
打赏
举报
回复
[Quote=引用 15 楼 simbon 的回复:]
只是一时脑子转不过来弯罢了,谁遇到这个都会这样。
1111 0000(240)(-16)
1000 1000(136)(-120)
10111 1000(360)(-136)
如果是0111 1000的话,那就是正数,无法表示-136
因此,有符号数运算,溢出了。
1111 0000(240)(-16)
0111 1000(120)
10110 1000(360)……
[/Quote]
我想知道计算机是怎么判断这两个数(只考虑有符号的情况,无符号的情况我能明白)相加之后是否要改变符号位的
。CF是取决于最高位相加之后有没有进位(我自己的理解,应该没错吧)。OF取决于哪儿呢??
在这儿先谢谢你的热心帮助,谢谢!
voidnull
2011-10-27
打赏
举报
回复
[Quote=引用 14 楼 svking 的回复:]
我问个对比的例子吧
1111,0000(-16)
+1000,1000(-120)
=0111,1000
就是:
mov al,0F0H
add al,088H
执行后OF是1
而:
1111,0000(-16)
+ 0111,1000(120)
= 0110,1000
就是:
mov al,0F0H (-16)
add al,78H (120)
……
[/Quote]
因为那两个数都既可以看做有符号数,也可以看做无符号数。你如果把它看做有符号数,它的最高位就表示正负,为1时是负数,为0时是正数。如果你把它看做无符号数,那就没有符号位。
这你这个例子中,第一个
1111,0000(看做无符号数:240, 看做有符号数:-16)
+1000,1000(看做无符号数:136, 看做有符号数:-120)
无论看做有符号数还是无符号数,结果都溢出了。所以CF、OF都为1。
而第二个例子,看做有符号数时没有溢出,所以OF为0。
说白了,你就是不明白一点,CPU是不知道你希望这个数到底是有符号还是无符号的,或者说,你希望它的最高位是表示正负还是这个数的一部分,所以它只好把两种情况都考虑,把它当做有符号和无符号数时的两种计算结果都告诉你,通过CF和OF标志位。
SVKING
2011-10-26
打赏
举报
回复
[Quote=引用 3 楼 simbon 的回复:]
mov al,0F0H (-16)
add al,78H (120)
OF只对有符号数运算有意义,CF对无符号数运算有意义
上面的如果是有符号数运算的话,结果al = 104,无符号数运算al = 120
因此,进行无符号数运算时,溢出了,CF=1,对于有符号数运算时,没溢出,OF=0
[/Quote]
我知道逻辑上时这样,可是
1111,0000
+ 1000,1000
= 0111,1000
最高位的1+1后,超了啊,OF不用该为1吗
我现在不明白的是OF使根据哪儿确定改不改变啊
laoliangchirou
2011-10-26
打赏
举报
回复
这个得好好学学
dong_tx
2011-10-26
打赏
举报
回复
[Quote=引用 3 楼 simbon 的回复:]
mov al,0F0H (-16)
add al,78H (120)
OF只对有符号数运算有意义,CF对无符号数运算有意义
上面的如果是有符号数运算的话,结果al = 104,无符号数运算al = 120
因此,进行无符号数运算时,溢出了,CF=1,对于有符号数运算时,没溢出,OF=0
[/Quote]
学习了
SVKING
2011-10-26
打赏
举报
回复
逻辑结果是104,不是120,我错了。可是还是不明白啊
加载更多回复(1)
汇编
语言中的
标志位
:CF、PF、AF、ZF、SF、TF、IF、DF、OF
**CF:**进位
标志位
。在无符号运算时,记录了运算结果的最高有效位向更高位的进位值或从更高位借位,产生进位或借位时CF=1,否则CF=0; **PF:**奇偶
标志位
。相关指令执行后结果所有bit中1的个数为偶数,那么PF=1,1...
汇编
标志位
缩写、解析
当串操作时按地址递增的方式进行时,该
标志位
被设置为1。当串操作时按地址递减的方式进行时,该
标志位
被设置为1。当禁止中断时,该
标志位
被设置为1。当运算结果是正数时,该
标志位
被设置为1。当运算结果是负数时,该...
汇编
标志位
及操作讲解
AND , OR 运算 他们进行的是逻辑运算,当数值不同改变的寄存器也就不同。...6个运算
标志位
OF SF ZF AF PF CF AND指令影响
标志位
PF、SF、ZF,使CF=0、OF=0 .例如,在同一个通用寄存器自身相与时,操作数虽不变,但...
汇编
中的OF和CF
标志位
汇编
有符号溢出检测OF 无符号溢出检测CF
汇编
语言
标志位
:SF、CF、PF、AF、DF、ZF、TF、IF、OF
汇编
语言
标志位
:SF、CF、PF、AF、DF、ZF、TF、IF、OF CF:进位
标志位
。在无符号运算时,记录了运算结果的最高有效位向更高位的进位值或从更高位借位,产生进位或借位时CF=1,否则CF=0;## 标题 PF:奇偶
标志位
。相关...
汇编语言
21,493
社区成员
41,618
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章