學 Win32 彙編「28」-跳轉指令
學 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
查看原文 >>