彙編基礎--CMP彙編指令

 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。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章