樓主猜想:sub a, b 和 add a, -b 應該差不多。
舉個例子:
mov al, 1
mov bl, 2
sub al, bl
首先sub al, bl === add al, -bl
al是正數,原碼補碼相同為:00000001B
-bl是負數,原碼位:10000010B, 補碼為:11111110B
add al, -bl的補碼結果為:11111111B
所以沒有進位,所以CF = 0
因此執行sub al, bl之後的CF應該為0
SUB如何影響標志位:
1.減法的CF反應的是無符號數運算中的借位情況:當減數>被減數是CF=1,否則CF=0
2.OF:如果兩個數的符號相反而結果的符號與減數相同,則OF=1,否則OF=0;
3.SF(運算結果<0為1否則為0)、ZF(零標志)、AF(輔助進位標志)、PF(奇偶標志)根據其含義設置
mov eax, 1
sub eax, 2
;這兩個結果是EAX=FFFFFFFFH,而1不夠2減,所以產生了借位,CF=1
mov eax, 1
add eax, -2
;而這兩個就不同了,第一條執行後EAX=1,第二條的-2取補碼後是不是等於FFFFFFFEH?而FFFFFFFEH加上EAX中的1是不是就等於FFFFFFFFH???所以沒有產生進位也沒有產生借位,CF=0
你糾結在-2這裡,你試試把2個值顛倒一下變成這樣
mov eax, -2
add eax, 1
然後調試,看著EAX中的值你就明白了