跳转指令分三类:
一、无条件跳转: 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 procPrintText '1'jmp @FPrintText '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 procPrintText '1'mov eax, 123cmp eax, 123je @FPrintText '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 procPrintText '1'xor eax, eaxjz @FPrintText '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 procPrintText '1'xor eax, eaxdec eaxjs @FPrintText '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 procPrintText '1'mov al, 0FFhadd al, 1jc @FPrintText '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 procPrintText '1'mov al, -128sub al, 1jo @FPrintText '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 procPrintText '1'mov eax, 22cmp eax, 11ja @FPrintText '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 procPrintText '1'mov eax, 1cmp eax, -1jg @FPrintText '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 procPrintText '1'mov al, 00001110binc aljp @FPrintText '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 procPrintText '1'xor ecx, ecxjecxz @FPrintText '2'PrintText '3'@@: PrintText '4'retmain endpend main