请教OF进位问题
assume cs: codestart:
mov al, 01000000b
mov bl, 01000000b
add bl, al
mov ax, 4c00h
int 21h
code ends
end start
这段汇编代码 add bl, al为什么OF会进位呢?作为有符号数 我计算的是 al和bl都是十六进制的40,也就是反码是10进制的-64, 两个加起来是十进制的-128正好啊,没有进位的(我认为范围是在 127到-128),但是我用debug调试发现OF=OV进位了:sweat: ,特请教各位原因! 相加之后,OF会把你的两个加数解释成有符号数,求和之后是1000 0000 变成了负数,与原结果不对,OF就进位。CF会把你的两个加数解释成无符号数,求和之后结果正确,也存放的下,CF为0 想不出来 发表于 2015-12-10 11:28
相加之后,OF会把你的两个加数解释成有符号数,求和之后是1000 0000 变成了负数,与原结果不对,OF就进位。 ...
相加之后,OF会把你的两个加数解释成有符号数,求和之后是1000 0000 变成了负数,与原结果不对,
请问原结果是什么呢? sejung 发表于 2015-12-10 20:03
相加之后,OF会把你的两个加数解释成有符号数,求和之后是1000 0000 变成了负数,与原结果不对,
请问原 ...
对于计算机来说,0x40+0x40=0x80.
如果用有符号数去解释,16位机器,是不可以表示+0x80的。它的范围是-0x80~~~+0x7F,所以溢出了,OF置一。
如果用无符号去解释,16位机器范围是0~~~+FF,这个算式就没有溢出,就不会置一。
计算机是本身按理来说是不识别有符号无符号的,这个完全是程序员对数据的解释。但是OF标志位应该是个例外,它会替程序员分别测试有符号和无符号,返回溢出结果。
我理解着就是这样。 判断OF位是否溢出,可以判断和的结果的最高位和次高位是否产生进位,进位为1,不进位为0,然后异或,就是OF标志位。比如你0x40+0x40,OF为1. 0x80+0x80,OF为1,0xC0+0xC0,OF为0:smile:smile 想不出来 发表于 2015-12-10 21:12
判断OF位是否溢出,可以判断和的结果的最高位和次高位是否产生进位,进位为1,不进位为0,然后异或,就是OF ...
好的,谢谢你,还是没有懂哎! 学习,但没看懂,我还没学到那儿 计算机的运算都是数字电路层面的,只会进行“硬算”,具体这个算术操作是什么含义,由人去定义,不同的角度看对应的OF和CF
页:
[1]