匯編:jmp系列跳轉指令總結


助記方法:

J:跳轉
C: 進位位置位
N: 否
S: 符號位置位
o: 溢出位置位
Z: 零標志位置位
E: 等於
P:奇偶位置位
A: Above
B: Below
L: Less (Little的比較級)
G: Greater (Great的比較級)

 

(SF^OF)=1 --> SF=0, OF=1 --> a < b
SF=1, OF=0 --> a < b

(SF^OF)=0 --> SF=1, OF=1 --> a > b
SF=0, OF=0--> a >= b


條件跳轉指令是根據標志寄存器中的相關標志位的值來進行跳轉的,因此,條件跳轉指令只能與那些能夠影響標志寄存器的相關標志位的指令配合使用;
能夠直接影響標志寄存器的相關標志位的指令有:
1、算術運算指令 : add、sub、adc、sbb、inc、dec、neg、mul、div、imul、idiv,等等;
2、按位邏輯運算 : and、or、xor、not,等等;
3、比較運算指令 : cmp、test;
4、移位操作指令 : shr、shl、sar、sal、ror、rol、rcr、rcl;
5、BCD數調整指令: aaa、aas、daa、das、aam、aad;
6、標志處理指令 : clc、stc、cmc、cld、std、cli、sti;

能夠間接影響標志寄存器的相關標志位的指令序列有:
pushf --> pop eax --> modify eax --> push eax --> popf
即:
pushf
pop eax
modify eax
push eax
popf
jbe OPR
這樣的一系列操作之后,條件轉移指令"jbe OPR"也可以根據標志寄存器的相關標志位進行轉移;

測試:
jmp 無條件跳轉


無符號
Je 等於跳轉
Jne 不等於跳轉
Ja = jnbe 大於跳轉 = JNBE(不小於或等於跳轉)
Jb= jnae 小於跳轉 = JNAE(不大於或等於跳轉)
Jna 不大於跳轉 = JBE(小於或等於跳轉)
Jnb 不小於跳轉 = JAE(大於或等於跳轉)

Js 為負跳轉
Jz 為0跳轉
Jc 進位跳轉
Jo 溢出跳轉
Jp 奇偶位置位 跳轉


有符號
Jg 有符號大於 跳轉 = JNLE
Jge 有符號大於等於 跳轉 = JNL
Jl 有符號小於 跳轉 = JNGE
Jle 有符號小於等於 跳轉 = JNG

 

X86下   直接的jmp分3種 
Short Jump(短跳轉)機器碼 EB rel8 
只能跳轉到256字節的范圍內 
Near Jump(近跳轉)機器碼 E9 rel16/32 
可跳至同一個段的范圍內的地址 
Far Jump(遠跳轉)機器碼EA ptr 16:16/32 
可跳至任意地址,使用48位/32位全指針 

測試用例:

 

.386
.model  flat,c
.DATA
Temp db "hello",0

.CODE

;jmp 無條件跳轉
Sub_1 PROC  
        push ebp
        mov  ebp,esp
        sub  esp,40h
        mov  eax,dword ptr[ebp+8h]
       ; jmp  @F
        push 0
        push offset Temp
        push offset Temp
        push 0
        call eax
@@:     mov eax,2
 
        add esp,40h
        pop ebp
        RET
Sub_1 ENDP

 

 

.386
.model  flat,c
.DATA
Temp db "hello",0

.CODE

;jmp 無條件跳轉
Sub_1 PROC  
        push ebp
        mov  ebp,esp
        sub  esp,40h
        mov  eax,dword ptr[ebp+8h]
        jmp  @F
        push 0
        push offset Temp
        push offset Temp
        push 0
        call eax
@@:     mov eax,2
 
        add esp,40h
        pop ebp
        RET
Sub_1 ENDP

 

 

 

win10  vs2015  .asm 文件測試

 


免責聲明!

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



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