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"也可以根据标志寄存器的相关标志位进行转移;
x86汇编 条件跳转的更多相关文章
- 汇编 sub减法指令 比较指令CMP JZ条件跳转指令
二.SUB指令 减法指令SUB (SUBtract) 格式: SUB A,B //A=A-B; 功能: 两个操作数的相减,即从A中减去B,其结果放在A中. 二.CMP 和JZ 指令 比较指令CMP 格 ...
- 对X86汇编的理解与入门
本文描述基本的32位X86汇编语言的一个子集,其中涉及汇编语言的最核心部分,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令.逻辑计算指令.算数运算指令),以及函数的调用规则.个人认为:在理 ...
- 寄存器理解 及 X86汇编入门
本文整理自多材料源,感谢原址分享,请查看末尾Url I, 汇编语言分类: 汇编语言和CPU息息相关,但是不能把汇编语言完全等同于CPU的机器指令.不同架构的CPU指令并不相同,如x86,powerpc ...
- X86汇编概要
来自:https://www.cnblogs.com/jiftle/p/8453106.html 本文翻译自:http://www.cs.virginia.edu/~evans/cs216/guide ...
- x86汇编之十(使用字符串)
x86汇编之十(使用字符串) 转自网络,出处不详 一.传送字符串 Intel提供了完整的字符串传送指令,就像是MOV指令一样. 1.MOVS指令 1)movs指令格式 把字符串从一个位内存位置传送到另 ...
- X86汇编——计算斐波那契数列程序(详细注释和流程图说明)
X86汇编实现斐波那契数列 程序说明: 输入斐波那契数列的项数, 然后依次输出斐波那契数列, 输入的项数小于256且为数字, 计算的项数不能超过2^16次方, 输入失败是 不会回显数字 因为存结果是A ...
- x86汇编反编译到c语言之——(2)if语句
一. 测试的C语句及编译后的x86汇编代码 int a; int b; int main(void) { int c; if (c) a = 4; else b = 5; return 0; } 1 ...
- 汇编条件判断整理(JCC,CMP/TEST的实现)
比较的实现 我们知道CMP是比较两个寄存器内容的指令,但这是如何实现的? 当执行到CMP指令的时候会读取这两个寄存器的内容,并加以减法运算,结果本身不保留,并按照结果设置符号位(属算术运算). CMP ...
- x86汇编指令脚本虚拟机
简介 这是一个可以直接解释执行从ida pro里面提取出来的x86汇编代码的虚拟机. 非常精简,整体架构上不能跟那些成熟的虚拟机相比,主要目标是够用.能用.轻量就行,如果觉得代码架构设计的不是很好的话 ...
随机推荐
- web online code editor All In One
web online code editor All In One 在线代码编辑器 Monaco Editor 摩纳哥编辑器 ️ 22.1k The Monaco Editor is the code ...
- React Native & Fast Refresh
React Native & Fast Refresh 0.61 https://reactnative.dev/blog/2019/09/18/version-0.61/ Fast Refr ...
- js regular expression & email checker
js regular expression & email checker const isValidEmail = (email = ``) => /^([\w+\.])+@(\w+) ...
- SVG 场馆图
SVG 场馆图 https://www.infoq.cn/article/1BVg9VDSmqyHv3W3TeNH https://mp.weixin.qq.com/s/aNPAfJIHL14NFtL ...
- 法兰西金融专访SPC空投重磅来袭
最近,法兰西金融日报联合德意志财经等知名金融媒体就SPC这一话题进行了专访. 法兰西金融日报记者德维尔斯问到,之前2020年的BGV项目等市场反响异常火爆,2021年已经来到,NGK目前有何新的大动作 ...
- Renice INC:解密干型葡萄酒
市场上,干型葡萄酒往往对比甜型葡萄酒(如甜红.甜白)受到更多葡萄酒爱好者的青睐.在葡萄酒界,大部分的红葡萄酒和白葡萄酒也都是干型的,而且它们的口感往往各有特色,并非千篇一律.今天,就跟随Renice ...
- git笔记整理-learnGitBranching
声明 此篇文章内容是本人在 github上寻找到Peter Cottle的项目 https://github.com/pcottle/learnGitBranching.git 中学习git相关命令时 ...
- JVM元空间(Metaspace)
本文转载自JVM学习--元空间(Metaspace) 从方法区(PermGen)到元空间(Metaspace) 方法区(PermGen) JDK1.8以前的HotSpot JVM有方法区,也叫永久代( ...
- 详解Go语言调度循环源码实现
转载请声明出处哦~,本篇文章发布于luozhiyun的博客: https://www.luozhiyun.com/archives/448 本文使用的go的源码15.7 概述 提到"调度&q ...
- Ribbon实现负载均衡时 服务提供者注册失败 原因之一
问题描述:提供者注册时总是不用自己配置的server.port 在project structuree中的模块总是自动添加别的模块的文件 那么一定要看看project structure中的langu ...