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

http://www.cnblogs.com/del/archive/2010/04/16/1713886.htmlhtml

跳轉指令分三類:
1、無條件跳轉: JMP;
2、根據 CX、ECX 寄存器的值跳轉: JCXZ(CX 爲 0 則跳轉)、JECXZ(ECX 爲 0 則跳轉);
3、根據 EFLAGS 寄存器的標誌位跳轉, 這個太多了.

根據標誌位跳轉的指令:windows


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 測試spa


; 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 測試debug


; 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 測試code


; 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 測試htm


; 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 測試blog


; 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 測試get


; 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 測試asm


; 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
相關文章
相關標籤/搜索