注册 登录
编程论坛 汇编论坛

关于标志位请教

dafubj 发布于 2010-07-28 15:30, 715 次点击
在互联网查询得到的信息如下:
1.如果两个同类型数据(同为无符号数或负数)相加,结果值的符号位与原数不同,则OF=1;
2.如果两给同类型数据(同为无符号数或负数)相加,结果值的符号位与原数同,则OF=0.

MOV    AX, 2340H
MOV    CX, 4
MUL    CX  
答案是:(AX)=8D00H,CF=OF=0,通过使用debug逐步调试,验证了该答案是正确的。

我的疑问是:
2340是整数,8D00符号位为1,为负数。按照最前面提到的说法,这时的OF=1,而非OF=0;
当然如果将8D00视为无符号数,是没有溢出的。

就该题而言,决定OF值的规则到底是什么呢?

3 回复
#2
okayyyy2010-07-28 16:35

bit7进位值  xor bit6的进位值的结果,设置of。

你查的那种判断太长,我一般记不住。

你认为他们是无符号,他就是无符号;
#3
dafubj2010-08-05 14:10
回复 2楼 okayyyy
通过近三天的思考,对OF 和CF标志位的理解总结如下,请各位鉴定:
1.对于加法:溢出只需要考虑符号相同的情形(符号位不同的情形自然不需要考虑)。若结果值的符号位和加数的不同,自然溢出(试想:正数+正数=负数,不合逻辑;负数+负数=整数,不合逻辑)。
2.对于减法:溢出只需要考虑符号不同的情形(符号位相同的情形自然必须考虑)。若结果值的符号位和减数相同,自然溢出(试想:负数-正数=正数,不合逻辑;正数-负数=负数,不合逻辑)。
#4
ck5435133952010-09-17 13:33
右溢出标志的
1