條件跳轉表
匯編語言-條件跳轉指令
直接轉移指令 | ||||
---|---|---|---|---|
指令格式 | 機器碼 | 測試標志 | 條件說明 | 符號 |
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"也可以根據標志寄存器的相關標志位進行轉移;