汇编语言-条件跳转指令
2016-08-29 18:00
225 查看
http://bdxnote.blog.163.com/blog/static/84442352015327011988/
理解方法:
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"也可以根据标志寄存器的相关标志位进行转移;
直接转移指令 | ||||
---|---|---|---|---|
指令格式 | 机器码 | 测试标志 | 条件说明 | 符号 |
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"也可以根据标志寄存器的相关标志位进行转移;
相关文章推荐
- 汇编语言条件转移(短转移)指令列表
- 汇编--条件跳转指令
- 汇编语言实验4-利用跳转指令构造循环
- 汇编语言7跳转指令
- 汇编语言——跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP
- 【汇编语言笔记】内存地址操作,跳转指令
- 汇编语言跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
- 8086汇编语言自学经验分享 cx=0则跳转。指令jcxz实例
- 汇编条件跳转指令及标志位
- 汇编-条件跳转与重复指令
- 32位汇编语言学习笔记(11)--条件传送指令
- 32位汇编语言学习笔记(7)--跳转指令
- 转移指令的原理02 - 零基础入门学习汇编语言44
- Win32汇编笔记-内存管理,和跳转,分支,循环指令
- 1.2.17、ARM汇编指令集:数据传输和跳转指令详解
- 用汇编语言实现冒泡排序——基于MIPS指令系统
- 汇编语言基本指令
- 关于汇编跳转指令的说明
- 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等
- 汇编中的各种跳转指令