汇编语⾔跳转指令: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 ;奇偶位不等则跳转
跳转相关的标志位:
11109876543210 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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论