x86匯編 條件跳轉


條件跳轉表

 

 

 

 

匯編語言-條件跳轉指令  

直接轉移指令
指令格式 機器碼 測試標志 條件說明 符號
 JO       OPR 70  OF=1  結果有溢出  
 JNO      OPR 71  OF=0  結果無溢出  
 JC       OPR 72  CF=1  小於  <
 JNC      OPR 73  CF=0  大於或等於  >=
 JZ/JE    OPR 74  ZF=1  結果為0  ==
 JNZ/JNE  OPR 75  ZF=0  結果非0  !=
 JS       OPR 78  SF=1  結果為負  <0
 JNS      OPR 79  SF=0  結果為正  >0
 JP/JPE   OPR 7A  PF=1  結果中1的個數為偶數  
 JNP/JPO  OPR 7B  PF=0  結果中1的個數為奇數  

 

間接轉移指令-無符號數
指令格式 機器碼 測試標志 條件說明 符號
 JB/JNAE  OPR 72  CF=1  低於/不高於且不等於  <
 JNB/JAE  OPR 73  CF=0  不低於/高於或等於  >=
 JBE/JNA  OPR 76  (CF=1)|(ZF=1)  低於或等於/不高於  <=
 JNBE/JA  OPR 77  (CF=0)&(ZF=0)  不低於且不等於/高於  >

 

間接轉移指令-有符號數
指令格式 機器碼 測試標志 條件說明 符號
 JL/JNGE  OPR 7C  (SF^OF)=1  小於/不大於且不等於  <
 JNL/JGE  OPR 7D  (SF^OF)=0  不小於/大於或等於  >=
 JLE/JNG  OPR 7E  (SF^OF)=1|(ZF=1)  小於或等於/不大於  <=
 JNLE/JG  OPR 7F  (SF^OF)=0&(ZF=0)  不小於且不等於/大於  >


理解方法:
N: Not
E: Equal
A: Above
B: Below
L: Less    (Little的比較級)
G: Greater (Great的比較級)

Less Than   : 小於
Greater Than: 大於

(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"也可以根據標志寄存器的相關標志位進行轉移;


免責聲明!

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



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