x86汇编 条件跳转
阅读原文时间:2023年07月09日阅读:2

条件跳转表

汇编语言-条件跳转指令

直接转移指令

指令格式

机器码

测试标志

条件说明

符号

 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"也可以根据标志寄存器的相关标志位进行转移;

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章