學習 CMP TEST比較指令

2022-03-14 00:07:38 字數 1483 閱讀 5422

cmp指令:比較

cmp指令,和sub指令的最大的不同點就是cmp指令是影響標誌位 不儲存結果

1、當前彙編指令為cmp edx,ecx

2、當前ecx暫存器中的位址為00000001,edx暫存器中的位址00000000,相當於 edx = edx - ecx

3、單步步過

結果發現ecx暫存器中沒有變化

1、當前彙編指令為cmp eax,ecx

2、當前eax暫存器中的位址為00000001,ecx暫存器中的位址00000001,相當於 eax = eax-ecx

3、單步步過

結果發現ecx暫存器中沒有變化,但是發現z標誌位發生了變化 變為了1,也可以說明了當cmp指令為兩個相減為0的時候,那麼z標誌位為1

如何進行對字串的比較呢,這裡自己理解的是對暫存器中的位址中的值進行比較比如如下

再進行重新設定eip然後單步步過,結果如下,發現z標誌位變0,所以大小不一致

同樣的,cmp影響的不只是z標誌位,之前s標誌位是根據正負數來判斷的,這裡同樣生效

1、當前彙編指令為cmp eax,ecx

2、當前eax暫存器中的位址為00000000,ecx暫存器中的位址00000001,相當於 eax = eax-ecx

3、單步步過

結果發現,s標誌位為1,因為相減為負數

2、設定位址402000中的值為01

3、單步步過

結果z為1 那麼相減結果為0,s為0,那麼結果不是負數

test指令:對兩個運算元進行與操作,同時影響符號標誌位、零標誌位和奇偶標誌位

test指令就是進行與運算,如果與運算結果為0那麼z標誌位為1,反之為0

1、當前彙編指令為cmp eax,ecx

2、設定eax暫存器位址為00000001,ecx暫存器位址00000010,

3、單步步過

發現z標誌位為1,說明是相等,00000001的二進位制為‭‭00000001,‬ 00000010的二進位制位為00010000,與運算結果為00000000‬‬

ARM 指令集 比較指令

譯註 cmp 和 cmp 是算術指令,teq 和 tst 是邏輯指令。把它們歸入一類的原因是它們的 s 位總是設定的,就是說,它們總是影響標誌位。compare negative cmn status op 1 op 2 cmn同於cmp,但它允許你與小負值 運算元 2 的取負的值 進行比較,比如難...

CMP比較指令詳解

cmp compare 指令進行比較兩個運算元的大小 例 cmp oprd1,oprd2 為第乙個操作減去第二個運算元,但不影響第兩個運算元的值 它影響flag的cf,zf,of,af,pf 我們怎麼判斷大小呢?若執行指令後 zf 1 這個簡單,則說明兩個數相等,因為zero為1說明結果為0 當無符...

組合語言 比較指令 跳轉指令 JCC

一 jmp 指令 修改eip 當前執行的下一條指令 jmp暫存器 立即數 目標類似 mov eip,暫存器 立即數 call指令 呼叫函式 call 位址a 暫存器 等價 push位址b 儲存call的下一條指令位址,壓棧,作為返回值,mov eip,位址a 暫存器 將函式首位址作為eip ret指...