**
cmp是比較指令,cmp的功能相當於減法指令。它不儲存結果,只是影響相應的標誌位。其他的指令通過識別這些被影響的標誌位來得知比較結果。
cmp指令格式: cmp 操作物件1, 操作物件2
計算 操作物件1 - 操作物件2 但不儲存結果,只是根據結果修改相應的標誌位。
舉例假如此時eax = 0h
那麼cmp eax, eax (eax - eax = 0)
此時我們的指令執行後, zf標誌位 = 1, pf = 0, sf =0 , cf =0 , of = 0 。
(因為我們結果為0,所以zf標誌位為1 . 前提是在pf運算元為0的情況下執行
ps:其實pf標誌位無關緊要)
在繼續舉例
mov ebx, 05h
mov eax, 08h
cmp eax, ebx (eax - ebx = 03h)
此時我們的指令執行後(zf = 0, pf = 1, sf = 0, cf = 0, of = 0)
因為此時我們就可以通過標誌位判斷出eax 是否大於ebx。 我們有時候想問題,可以逆序的想。
可以這樣想,如果它小於的話會發生什麼。。 舉例假如al = 05h, bl = 08h (為了更直觀,所以我採用低8位暫存器)
mov al, 05h
mov bl, 08h
cmp al, bl (al - bl = -3h)
(注意:al是低8位暫存器,為了更直觀,所以我採用低8位暫存器,計算機負數是以補碼的形式在記憶體存放的,趕快拿起你的手,算算-3的補碼是多少。)
那麼執行後 (zf = 0, pf = 0, cf = 1, sf = 1, of =0)
(那麼大家肯定會問:cf = 1, 為何存在了進製操作。 在我們計算機中兩個資料做減法運算的時候,有可能象更高位借位,舉例
mov al, 56h
mov bl, 57h
sub al, bl
借位後,將產生156 - 57h )
sf我就不說了吧,符號標誌位,我們的結果為負,所以sf = 1
從以上兩點標誌位我們是否就可以分析出呢。 如果小於則sf = 1 , cf =1 。。 呵呵
那麼剛剛上面的我們就可以輕鬆的解決了。。 如果我們的數值大於的話,則 sf, cf ,zf肯定是0。 所以
mov ebx, 05h
mov eax, 08h
cmp eax, ebx (eax - ebx = 03h)
此時我們的指令執行後(zf = 0, pf = 1, sp = 0, cf = 0, of = 0)
那麼上面我們分析了=(等於)、<(小於) 和》(大於) 的情況。接下來我們分析下 不等於、大於等於,小於等於的情況。
首先分析不等於
(我們分析題目,可以通過逆序的思路)假設此時我們的比較的兩數值相等,則zf=1,所以如果不相等,則zf肯定不等於1,也就是zf =0
接著分析小於等於
其實這個就是剛剛我們上面分析的+上等於的條件。我們看上面如果小於則sf = 1, cf =1。那麼小於等於 cf =1 或 zf =1。
最後 大於等於
這個我就不說了,同上,也讓大家自己思考下。。
今天的課程就這麼多了。最後作業列:
1.假如此時有兩數值做cmp比較判斷,執行後zf = 0 ,cf = 0 ,sf = 0。那麼請問我們的數值是大於比較的數值,還是小於,或是等於。
zf=0 不相等 a!=b
cf=0 沒有借位 a>b
sf=0 正數
大於2.假如此時有兩數值做cmp比較判斷,執行後有可能zf = 1,cf = 1 ,sf = 1 。那麼請問我們的數值是大於比較的數值,還是小於,或是等於,或是大於等於,或是小於等於。
zf = 1 相等 a==b
cf = 1 借位 asf = 1 負數 a
小於 等於
170419 彙編 cmp指令
1625 5 王子昂 總結 2017年4月19日 連續第200天總結 a.組合語言十一章 b.cmp指令是比較指令,相當於減法,但不儲存結果 它執行後對標準暫存器產生影響,其他相關指令通過讀取flag來得知結果 eg cmp ax,ax 結果 zf 1,pf 1,sf 0,cf 0,of 0 對cm...
彙編cmp比較指令詳解
剛剛看到了cmp指令,一開始有點暈。後來上網找了些資料,終於看明白了,為了方便初學者,我就簡單寫下我的思路吧。高手繞過,謝謝!cmp compare 指令進行比較兩個運算元的大小 例 cmp oprd1,oprd2 為第乙個操作減去第二個運算元,但不影響第兩個運算元的值 它影響flag的cf,zf,...
彙編cmp比較指令詳解
剛剛看到了cmp指令,一開始有點暈。後來上網找了些資料,終於看明白了,為了方便初學者,我就簡單寫下我的思路吧。高手繞過,謝謝!cmp compare 指令進行比較兩個運算元的大小 例 cmp oprd1,oprd2 為第乙個操作減去第二個運算元,但不影響第兩個運算元的值,它影響flag的cf,zf,...