匯編cmp比較指令詳解


 剛剛看到了cmp指令,一開始有點暈。后來上網找了些資料,終於看明白了,為了方便初學者,我就簡單寫下我的思路吧。高手繞過,謝謝!

    cmp(compare)指令進行比較兩個操作數的大小

    例:cmp oprd1,oprd2

   為第一個操作減去第二個操作數,但不影響第兩個操作數的值,它影響flag的CF,ZF,OF,AF,PF.

 

 

 

 

    我們怎么判斷大小呢?

   若執行指令后:ZF=1,則說明兩個數相等,因為zero為1說明結果為0.

   當無符號時:

   若CF=1,則說明了有進位或借位,cmp是進行的減操作,故可以看出為借位,所以,此時oprd1<oprd2;

   CF=0,則說明了無借位,但此時要注意ZF是否為0,若為0,則說明結果不為0,故此時oprd1>oprd2.

   當有符號時:

   若SF=0,OF=0 則說明了此時的值為正數,沒有溢出,可以直觀的看出,oprd1>oprd2;

   若SF=1,OF=0 則說明了此時的值為負數,沒有溢出,則為oprd1<oprd2;

   若SF=0,OF=1 則說明了此時的值為正數,有溢出,可以看出oprd1<oprd2;

   若SF=1,OF=1則說明了此時的值為負數,有溢出,可以看出oprd1>oprd2;

   最后兩個可以作出這種判斷的原因是,溢出的本質問題:

   兩數同為正,相加,值為負,則說明溢出

   兩數同為負,相加,值為正,則說明溢出

   故有,正正得負則溢出,負負得正則溢出

   很簡單的一條指令,初學者看看,我感覺我寫的還挺詳細的,哈哈……

 

   補充: 兩數相減,同號,則不溢出;兩數為異號,結果與減數符號相同,則溢出。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM