程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> sub指令 標志位-關於sub指令是怎麼影響CF標志位的

sub指令 標志位-關於sub指令是怎麼影響CF標志位的

編輯:編程綜合問答
關於sub指令是怎麼影響CF標志位的

樓主猜想: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中的值你就明白了

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved