學 Win32 彙編[28] - 跳轉指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

跳轉指令分三類:

一、無條件跳轉: 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 ;奇偶位不等則跳轉

JMP 測試

; Test28_1.asm;.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc PrintText '1' jmp @F PrintText '2' PrintText '3'@@: PrintText '4' retmain endpend main;測試結果應該是:;1;4;以下都應該是這樣.

JE 測試

; Test28_2.asm;.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc PrintText '1' mov eax, 123 cmp eax, 123 je @F PrintText '2' PrintText '3'@@: PrintText '4' retmain endpend main

JZ 測試

; Test28_3.asm;.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc PrintText '1' xor eax, eax jz @F PrintText '2' PrintText '3'@@: PrintText '4' retmain endpend main

JS 測試

; Test28_4.asm;.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc PrintText '1' xor eax, eax dec eax js @F PrintText '2' PrintText '3'@@: PrintText '4' retmain endpend main

JC 測試

; Test28_5.asm;.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc PrintText '1' mov al, 0FFh add al, 1 jc @F PrintText '2' PrintText '3'@@: PrintText '4' retmain endpend main

JO 測試

; Test28_6.asm;.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc PrintText '1' mov al, -128 sub al, 1 jo @F PrintText '2' PrintText '3'@@: PrintText '4' retmain endpend main

JA 測試

; Test28_7.asm;.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc PrintText '1' mov eax, 22 cmp eax, 11 ja @F PrintText '2' PrintText '3'@@: PrintText '4' retmain endpend main

JG 測試

; Test28_8.asm;.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc PrintText '1' mov eax, 1 cmp eax, -1 jg @F PrintText '2' PrintText '3'@@: PrintText '4' retmain endpend main

JP 測試

; Test28_9.asm;.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc PrintText '1' mov al, 00001110b inc al jp @F PrintText '2' PrintText '3'@@: PrintText '4' retmain endpend main

JECXZ 測試

; Test28_10.asm;.386.model flat, stdcallinclude windows.incinclude kernel32.incinclude masm32.incinclude debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc PrintText '1' xor ecx, ecx jecxz @F PrintText '2' PrintText '3'@@: PrintText '4' retmain endpend main

------------------------

來源:https://www.cnblogs.com/del/archive/2010/04/16/1713886.html

查看原文 >>
相關文章