我正在使用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标志不会被永远设置。
我正在使用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,则不应该看到进位位设置(无借位)。
你的第二个例子是一个加法操作,在我知道的任何处理器上进位并不反转,进一步支持进位是正逻辑,表示借位。
在第一种情况下,进位标志被设置,因为你从one.In第二情况小减去更大数目的允许假设EAX是8位寄存器,然后
eax=00000101=05
ebx=00010000=10
not ebx=11101111
+ 1
---------------------
11110000
+ 0101
---------------------
11110101
不溢出是发生即没有进位标志置位。
硬件产生相同的答案增加或减少,因为使用相同的逻辑,不同之处在于如何处理该处理器的执行。它听起来像这个处理器系列(x86)反转执行(以及进位和第二个操作数)进行减法,但不加反转。 –
是8086编程还是什么? – nKandel