Vla*_*tai 5 x86 assembly masm status carryflag
我正在使用MASM32.
使用此代码:
mov eax,5
sub eax,10
Run Code Online (Sandbox Code Playgroud)
将设置CF状态标志.但是使用我的铅笔和纸,我实际上发现MSB没有携带任何东西.是的,我知道从减去数量较少的数字集CF减去.但我想知道为什么?
因为使用此代码:
mov eax,5
mov ebx,10
not ebx
add ebx,1
add eax,ebx
Run Code Online (Sandbox Code Playgroud)
CF标志永远不会被设置.
5 - 10 = 5 + (-10) = 0x05 + (0xF5 + 1) = 0x05 + 0xF6 = 0xFB
00000101 -- 0x05
11110101 -- 0xF5
+ 00000001 -- 0x01
==========
11111011 -- 0xFB
Run Code Online (Sandbox Code Playgroud)
并且这继续为16或32或64位0 + 1 + 0 = 1,进位为0
从某种意义上说,你是对的,它没有实现.减法是一个加法,第二个操作数被反转,进位被反转.一些处理器系列反转执行一些不.听起来你正在寻找一些可以减少减法执行的东西.
因此,如果5 - 10给出执行(借用)然后在同一处理器上尝试10 - 5,则不应该看到进位设置(不借用).
你的第二个例子是一个加法运算,在我知道的任何处理器上都没有反转进位,进一步支持进位位是指示借位的正逻辑.