Win32ASM学习[17]:条件跳转
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一.跳转相关的标志位:
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
---|---|---|---|---|---|---|---|---|---|---|---|
OF |
DF |
IF |
TF |
SF |
ZF |
|
AF |
|
PF |
|
CF |
溢 |
|
|
|
符 |
零 |
未 |
辅 |
未 |
奇 |
未 |
进 |
条件码:
①OF(Overflow Flag)溢出标志。溢出时为1,否则置0。
②SF(Sign Flag)符号标志。结果为负时置1,否则置0.
③ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0.
④CF(Carry Flag)进位标志,进位时置1,否则置0.
⑤AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位置。有进位时1,否则置0.
⑥PF(Parity Flag)奇偶标志。结果操作数中1的个数为偶数时置1,否则置0.
控制标志位:
⑦DF(Direction Flag)方向标志,在串处理指令中控制信息的方向。
⑧IF(Interrupt Flag)中断标志。
⑨TF(Trap Flag)陷井标志,单步中断。
二.条件跳转的分类
(1).标志寄存器FR中有6个标志是状态的,它反映运算结果的情况。6个状态中除AF半进位标志外,其余5个标志可以反映10种不同的条件
故单条件跳转指令有10种
jc CF=1;则转移
jnc CF=0;则转移
je\jz ZF=1;jmp
jne\jnz ZF=0;jmp
js SF=1;jmp
jns SF=0;jmp
jo OF=1;jmp
jno OF=0;jmp
jp\jpe PF=1;jmp
jnp\jpo PF=0;jmp
(2).无符号数条件跳转指令
用于无符号数的条件跳转指令如下
ja\jnbe 大于则跳转 > 则转移, CF 或 ZF = 0;
jae\jnb 大于等于则跳转 >= 则跳转, CF = 0;
jna\jbe 小于则跳转 < 则转移, CF 或 ZF = 0;
jb\jnae 小于等于则跳转 <= 则跳转, CF = 1;
(3).带符号数的比较
JG/JNLE 大于则跳 > 则跳, SF 或 OF 或 ZF = 0则跳
JGE/JNL 大于等于则跳 >= 则跳, SF 或 OF = 0 则跳
JL/JNGE 小于则跳 < 则跳, SF 或 OF = 1 则跳
JLE/JNG 小于等于则跳 <= 则跳, SF 或 OF 或 ZF = 1则跳
用带符号数和无符号数的条件转移指令时,必须严格加以区别,否则会得到错误的结果
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三.无条件跳转
操作码 | 伪码指令 | 含义 |
EB cb
|
JMP rel8 | 相对短跳转(8位),使rel8处的代码位下一条指令 |
E9 cw
|
JMP rel16 | 相对跳转(16位),使rel16处的代码位下一条指令 |
FF /4
|
JMP r/m16 | 绝对跳转(16位),下一指令地址在r/m16中给出 |
FF /4
|
JMP r/m32 | 绝对跳转(32位),下一指令地址在r/m32中给出 |
EA cb
|
JMP ptr16:16 | 远距离绝对跳转, 下一指令地址在操作数中 |
EA cb
|
JMP ptr16:32 | 远距离绝对跳转, 下一指令地址在操作数中 |
FF /5
|
JMP m16:16 | 远距离绝对跳转, 下一指令地址在内存m16:16中 |
FF /5
|
JMP m16:32 | 远距离绝对跳转, 下一指令地址在内存m16:32中 |
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
四.16位/32位寻址方式(fisheep译 fisheep@sohu.com)
操作码
|
伪码指令
|
跳转含义
|
跳转类型
|
跳转的条件(标志位)
|
|
0F 87 cw/cd
|
JA rel16/32
|
大于
|
near
|
(CF=0 and ZF=0)
|
|
0F 83 cw/cd
|
JAE rel16/32
|
大于等于
|
near
|
(CF=0)
|
|
0F 82 cw/cd
|
JB rel16/32
|
小于
|
near
|
(CF=1)
|
|
0F 86 cw/cd
|
JBE rel16/32
|
小于等于
|
near
|
(CF=1 or ZF=1)
|
|
0F 82 cw/cd
|
JC rel16/32
|
进位
|
near
|
(CF=1)
|
|
0F 84 cw/cd
|
JE rel16/32
|
等于
|
near
|
(ZF=1)
|
|
0F 84 cw/cd
|
JZ rel16/32
|
为0
|
near
|
(ZF=1)
|
|
0F 8F cw/cd
|
JG rel16/32
|
大于
|
near
|
(ZF=0 and SF=OF)
|
|
0F 8D cw/cd
|
JGE rel16/32
|
大于等于
|
near
|
(SF=OF)
|
|
0F 8C cw/cd
|
JL rel16/32
|
小于
|
near
|
(SF<>OF)
|
|
0F 8E cw/cd
|
JLE rel16/32
|
小于等于
|
near
|
(ZF=1 or SF<>OF)
|
|
0F 86 cw/cd
|
JNA rel16/32
|
不大于
|
near
|
(CF=1 or ZF=1)
|
|
0F 82 cw/cd
|
JNAE rel16/32
|
不大于等于
|
near
|
(CF=1)
|
|
0F 83 cw/cd
|
JNB rel16/32
|
不小于
|
near
|
(CF=0)
|
|
0F 87 cw/cd
|
JNBE rel16/32
|
不小于等于
|
near
|
(CF=0 and ZF=0)
|
|
0F 83 cw/cd
|
JNC rel16/32
|
不进位
|
near
|
(CF=0)
|
|
0F 85 cw/cd
|
JNE rel16/32
|
不等于
|
near
|
(ZF=0)
|
|
0F 8E cw/cd
|
JNG rel16/32
|
不大于
|
near
|
(ZF=1 or SF<>OF)
|
|
0F 8C cw/cd
|
JNGE rel16/32
|
不大于等于
|
near
|
(SF<>OF)
|
|
0F 8D cw/cd
|
JNL rel16/32
|
不小于
|
near
|
(SF=OF)
|
|
0F 8F cw/cd
|
JNLE rel16/32
|
不小于等于
|
near
|
(ZF=0 and SF=OF)
|
|
0F 81 cw/cd
|
JNO rel16/32
|
未溢出
|
near
|
(OF=0)
|
|
0F 8B cw/cd
|
JNP rel16/32
|
不是偶数
|
near
|
(PF=0)
|
|
0F 89 cw/cd
|
JNS rel16/32
|
非负数
|
near
|
(SF=0)
|
|
0F 85 cw/cd
|
JNZ rel16/32
|
非零(不等于)
|
near
|
(ZF=0)
|
|
0F 80 cw/cd
|
JO rel16/32
|
溢出
|
near
|
(OF=1)
|
|
0F 8A cw/cd
|
JP rel16/32
|
偶数
|
near
|
(PF=1)
|
|
0F 8A cw/cd
|
JPE rel16/32
|
偶数
|
near
|
(PF=1)
|
|
0F 8B cw/cd
|
JPO rel16/32
|
奇数
|
near
|
(PF=0)
|
|
0F 88 cw/cd
|
JS rel16/32
|
负数
|
near
|
(SF=1)
|
|
0F 84 cw/cd
|
JZ rel16/32
|
为零(等于)
|
near
|
(ZF=1)
|
注:一些指令操作数的含义说明:
rel8 表示 8 位相对地址
rel16 表示 16 位相对地址
rel16/32 表示 16或32 位相对地址
r/m16 表示16位寄存器
r/m32 表示32位寄存器
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
另外有其他的 在补充 ^_^
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Win32ASM学习[17]:条件跳转相关推荐
- 一次不成功的深度学习实践 - 微信跳一跳
最近微信的跳一跳小程序火了一把,所以前天也更新了微信玩了几盘,最多手动到200左右就不行了. 后来准备用代码写个辅助工具,上Github一查,已经有人做出来了,17年12月29号的项目,不到5天差不多 ...
- 汇编--条件跳转指令
条件跳转指令很多,支持根据有符号.无符号整数的比较以及对CPU状态标志的检查进行跳转的一系列指令. 根据特定的标志的 根据两操作数是否相等,或根据(E)CX的值是否相等 基于无符号操作数的比较结果的 ...
- C学习if条件判断和for循环
通过学习if条件判断和for循环之后,做了一个实例.实现的实例都在代码中有详细的注释. #include <stdio.h>/******************************* ...
- activiti 条件表达式json报错_2020年2月13日学习python 条件控制
2020年2月13日学习python 条件控制 所谓条件(condition):指的是成立的条件,即返回值是True的布尔表达式. 运行报错: def account_login(): passwor ...
- 汇编语言-008(条件跳转应用 、loopnz 条件循环指令使用 、loopz 条件循环指令使用 、 if语句编写汇编时 、while语句编写汇编时 、循环内的if语句嵌套)
1: 条件跳转应用,三个数中最小数 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data V1 WOR ...
- 汇编语言-007(ADD_SUB_NEG 、 PUSH和POP指令应用 、 AND,OR,XOR使用 、 条件跳转应用)
1: ADD_SUB_NEG : ADD伪指令增加数值,SUB伪指令减少数值,NEG取反+1 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO ...
- Python小白的数学建模课-17.条件最短路径算法
条件最短路径问题,指带有约束条件.限制条件的最短路径问题.例如: 顶点约束,包括必经点或禁止点的限制: 边的约束,包括必经路段.禁行路段和单向路段:无权路径长度的限制,如要求经过几步或不超过几步到达终 ...
- 【汇编语言与计算机系统结构笔记07】条件码,比较、测试、条件跳转与条件转移指令,结合微体系结构与流水的说明
本次笔记内容: 08.控制流-1 文章目录 条件码 基于add的CF, ZF, SF, OF 比较(Compare)指令 测试(Test)指令 读取条件码(SetX)指令 例子 拓展:流水设计与微体系 ...
- 16.控制转移指令(条件跳转指令、比较条件跳转指令、多条件分支跳转指令、无条件跳转指令)
目录 1.控制转移指令 1.1 条件跳转指令 1.2 比较条件跳转指令 1.3 多条件分支跳转指令 1.4 无条件跳转指令 1.控制转移指令 控制转移指令分为如下图所示的5种,其中比较指令在算术指令中 ...
最新文章
- MPB:湖南农大尹杰组-猪粪便来源乳酸菌分离技术
- python三个点画正弦线_python3绘图示例5(基于matplotlib:正弦图等)
- RHEAS 显示、输入中文
- 2020年11月全国程序员工资,新出炉!
- Latex中定理、引理、证明、假设、空白行
- neo4j merge
- uniapp前端处理接口返回一整个html格式
- python3d绘图代码_python机器学习之3D Matplotlib绘图
- inotify监控文件变化
- Opencv中rectangle函数与Rect函数的用法
- 电脑主板各部件详细图解
- 华为每天给武汉员工发2千块,任正非:我最擅长的事,就是分钱!
- iOS之推荐六款不错的 iOS 15 Safari 浏览器扩展
- 如何将CHM转换为PDF文件?
- 2023年全国最新二级建造师精选真题及答案25
- 基于JavaSwing开发模拟电梯系统+分析报告 课程设计 大作业源码
- 第二章:关系数据库 - 04735数据库系统原理 - 自考知识点
- 51nod 1298 圆与三角形
- 控制Unity物体的旋转
- 关于OSCE 的安装部署视频教程
热门文章
- windows聚焦壁纸不更新_壁纸推荐说 | 爱上你的壁纸,每天更新的免费壁纸软件dynamic theme...
- 用法与区别_生抽老抽、蚝油味极鲜,总算搞清楚区别了,用法大不同,别用错了...
- centos图形化桌面的文件在哪_CentOS 安装图形桌面
- css 样式面板,关于 CSS 样式面板
- transform限制position:fixed的跟随效果
- antd listView中onEndReached()失效
- 获取 HTML5 网页设计灵感的10个网站推荐
- 如何将html特殊字符编码转换成特殊字符_html十进制编码字符转回来
- 使用html css js实现计算器
- MongoDB非关系型数据库开发手册