彙編基礎 cmp彙編指令

2021-09-01 17:19:24 字數 1897 閱讀 4394

**

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,...