匯編跳轉指令


轉自:https://blog.csdn.net/weixin_32589873/article/details/78207020


跳轉指令分三類:
一、無條件跳轉: 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 ;奇偶位不等則跳轉



跳轉相關的標志位:
11 10 9 8 7 6 5 4 3 2 1 0
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



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




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM