學 Win32 彙編[28] - 跳轉指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
跳轉指令分三類:
一、無條件跳轉: JMP;
二、根據 CX、ECX 暫存器的值跳轉: JCXZ(CX 為 0 則跳轉)、JECXZ(ECX 為 0 則跳轉);
三、根據 EFLAGS 暫存器的標誌位跳轉, 這個太多了.
根據標誌位跳轉的指令:
跳轉相關的標誌位:
JMP 測試
JE 測試
JZ 測試
JS 測試
JC 測試
JO 測試
JA 測試
JG 測試
JP 測試
JECXZ 測試
一、無條件跳轉: JMP;
二、根據 CX、ECX 暫存器的值跳轉: JCXZ(CX 為 0 則跳轉)、JECXZ(ECX 為 0 則跳轉);
三、根據 EFLAGS 暫存器的標誌位跳轉, 這個太多了.
根據標誌位跳轉的指令:
JE ;等於則跳轉 JNE ;不等於則跳轉 JZ ;為 0 則跳轉 JNZ ;不為 0 則跳轉 JS ;為負則跳轉 JNS ;不為負則跳轉 JC ;進位則跳轉 JNC ;不進位則跳轉 JO ;溢位則跳轉 JNO ;不溢位則跳轉 JA ;無符號大於則跳轉 JNA ;無符號不大於則跳轉 JAE ;無符號大於等於則跳轉 JNAE ;無符號不大於等於則跳轉 JG ;有符號大於則跳轉 JNG ;有符號不大於則跳轉 JGE ;有符號大於等於則跳轉 JNGE ;有符號不大於等於則跳轉 JB ;無符號小於則跳轉 JNB ;無符號不小於則跳轉 JBE ;無符號小於等於則跳轉 JNBE ;無符號不小於等於則跳轉 JL ;有符號小於則跳轉 JNL ;有符號不小於則跳轉 JLE ;有符號小於等於則跳轉 JNLE ;有符號不小於等於則跳轉 JP ;奇偶位置位則跳轉 JNP ;奇偶位清除則跳轉 JPE ;奇偶位相等則跳轉 JPO ;奇偶位不等則跳轉
跳轉相關的標誌位:
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||
溢 出 |
符 號 |
零 |
未 用 |
輔 助 |
未 用 |
奇 偶 |
未 用 |
進 位 |
JMP 測試
; Test28_1.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' jmp @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main ;測試結果應該是: ;1 ;4 ;以下都應該是這樣.
JE 測試
; Test28_2.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' mov eax, 123 cmp eax, 123 je @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main
JZ 測試
; Test28_3.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' xor eax, eax jz @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main
JS 測試
; Test28_4.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' xor eax, eax dec eax js @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main
JC 測試
; Test28_5.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' mov al, 0FFh add al, 1 jc @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main
JO 測試
; Test28_6.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' mov al, -128 sub al, 1 jo @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main
JA 測試
; Test28_7.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' mov eax, 22 cmp eax, 11 ja @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main
JG 測試
; Test28_8.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' mov eax, 1 cmp eax, -1 jg @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main
JP 測試
; Test28_9.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' mov al, 00001110b inc al jp @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp end main
JECXZ 測試
; Test28_10.asm; .386 .model flat, stdcall include windows.inc include kernel32.inc include masm32.inc include debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc PrintText '1' xor ecx, ecx jecxz @F PrintText '2' PrintText '3' @@: PrintText '4' ret main endp
end main
轉自http://www.cnblogs.com/del/archive/2010/04/16/1713886.html
相關文章
- 彙編跳轉指令
- 正確區分LJMP、AJMP、SJMP、JMP跳轉指令
- 彙編debug程式跳轉指令的方法
- Win32彙編教程二 Win32彙編程式的結構和語法 (轉)Win32
- 基本概念(win32)彙編教程(轉)Win32
- Win32彙編教程十二 管道操作 (轉)Win32
- 彙編學習筆記之轉移指令筆記
- Win32彙編的環境和基礎(轉)Win32
- Win32彙編的環境和基礎 (轉)Win32
- win32下彙編程式碼結構學習Win32
- 彙編指令
- Win32彙編教程八 圖形介面的操作 (轉)Win32
- Win32彙編教程十 定時器的應用 (轉)Win32定時器
- 彙編指令速查
- 基本彙編指令
- Weex 學習文件、跳轉路徑、控制檯輸出、we轉js彙總JS
- 學習筆記分享之彙編---2.彙編指令/語法筆記
- Win32彙編教程四 編寫一個簡單的視窗 (轉)Win32
- 我的彙編學習之路(1):指令
- Win32彙編教程七 控制元件的子類化 (轉)Win32控制元件
- 操作符offset 和 jmp指令
- 彙編---移位指令
- 彙編指令(待完善)
- linux彙編指令Linux
- [ARM] ARM彙編指令
- ARM彙編指令集彙總
- Apr.7.2024小結——彙編中jmp和call的用法
- JS 跳轉JS
- Jack's第一個Win32彙編程式HelloWorldWin32
- Jack整理的Win32彙編基礎知識Win32
- 64位下JMP遠跳地址的計算方法
- 彙編學習筆記07——BCD碼及調整指令筆記
- 逆向學習筆記3——暫存器與彙編指令筆記
- 彙編--串傳送指令 MOVS
- 8086彙編指令快速參考
- 常用的x86彙編指令
- Jack架設WIN32彙編程式的開發環境Win32開發環境
- js頁面跳轉JS