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