我正在使用 MASM32。
有了这个代码:
mov eax,5
sub eax,10
CF 状态标志将被设置。但使用我的铅笔和纸,我实际上看到 MSB 没有任何进位。是的,我知道从较少的数字中减去大的数字集CF。但我想知道为什么?
因为使用这段代码:
mov eax,5
mov ebx,10
not ebx
add ebx,1
add eax,ebx
CF 标志永远不会被设置。
5 - 10 = 5 + (-10) = 0x05 + (0xF5 + 1) = 0x05 + 0xF6 = 0xFB
00000101 -- 0x05
11110101 -- 0xF5
+ 00000001 -- 0x01
==========
11111011 -- 0xFB
如此继续 16 或 32 或 64 位 0+1+0 = 1,进位 0
你是对的,因为它没有执行。减法是加法,第二个操作数取反,进位取反。有些处理器系列会反转执行,有些则不会。听起来你正在寻找一些可以反转减法执行的东西。
因此,如果 5 - 10 给出进位(借位),然后在同一处理器上尝试 10 - 5,您不应该看到进位位设置(无借位)。
您的第二个示例是加法操作,据我所知,进位在任何处理器上都不会反转,进一步支持进位位是指示借位的正逻辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)