跳轉指令分三類:
一、無條件跳轉: 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.inc
include ? ?kernel32.inc
include ? ?masm32.inc
include ? ?debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procPrintText '1'jmp @FPrintText '2'PrintText '3'
@@: PrintText '4'ret
main endp
end main;測試結果應該是:
;1
;4
;以下都應該是這樣.
JE 測試
; Test28_2.asm;
.386
.model flat, stdcallinclude ? ?windows.inc
include ? ?kernel32.inc
include ? ?masm32.inc
include ? ?debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procPrintText '1'mov eax, 123cmp eax, 123je @FPrintText '2'PrintText '3'
@@: PrintText '4'ret
main endp
end main
JZ 測試
; Test28_3.asm;
.386
.model flat, stdcallinclude ? ?windows.inc
include ? ?kernel32.inc
include ? ?masm32.inc
include ? ?debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procPrintText '1'xor eax, eaxjz @FPrintText '2'PrintText '3'
@@: PrintText '4'ret
main endp
end main
JS 測試
; Test28_4.asm;
.386
.model flat, stdcallinclude ? ?windows.inc
include ? ?kernel32.inc
include ? ?masm32.inc
include ? ?debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procPrintText '1'xor eax, eaxdec eaxjs @FPrintText '2'PrintText '3'
@@: PrintText '4'ret
main endp
end main
JC 測試
; Test28_5.asm;
.386
.model flat, stdcallinclude ? ?windows.inc
include ? ?kernel32.inc
include ? ?masm32.inc
include ? ?debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procPrintText '1'mov al, 0FFhadd al, 1jc @FPrintText '2'PrintText '3'
@@: PrintText '4'ret
main endp
end main
JO 測試
; Test28_6.asm;
.386
.model flat, stdcallinclude ? ?windows.inc
include ? ?kernel32.inc
include ? ?masm32.inc
include ? ?debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procPrintText '1'mov al, -128sub al, 1jo @FPrintText '2'PrintText '3'
@@: PrintText '4'ret
main endp
end main
JA 測試
; Test28_7.asm;
.386
.model flat, stdcallinclude ? ?windows.inc
include ? ?kernel32.inc
include ? ?masm32.inc
include ? ?debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procPrintText '1'mov eax, 22cmp eax, 11ja @FPrintText '2'PrintText '3'
@@: PrintText '4'ret
main endp
end main
JG 測試
; Test28_8.asm;
.386
.model flat, stdcallinclude ? ?windows.inc
include ? ?kernel32.inc
include ? ?masm32.inc
include ? ?debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procPrintText '1'mov eax, 1cmp eax, -1jg @FPrintText '2'PrintText '3'
@@: PrintText '4'ret
main endp
end main
JP 測試
; Test28_9.asm;
.386
.model flat, stdcallinclude ? ?windows.inc
include ? ?kernel32.inc
include ? ?masm32.inc
include ? ?debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procPrintText '1'mov al, 00001110binc aljp @FPrintText '2'PrintText '3'
@@: PrintText '4'ret
main endp
end main
JECXZ 測試
; Test28_10.asm;
.386
.model flat, stdcallinclude ? ?windows.inc
include ? ?kernel32.inc
include ? ?masm32.inc
include ? ?debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main procPrintText '1'xor ecx, ecxjecxz @FPrintText '2'PrintText '3'
@@: PrintText '4'ret
main endp
end main
?
總結
以上是生活随笔為你收集整理的ARM汇编:汇编语言跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。