30336控制转移指令
1.控制转移指令
无条件转移指令
JMP
条件转移指令
JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、
JP / JNP、 JB / JNB、 JL / JNL、 JBE / JNBE、
JLE / JNLE、 JCXZ
循环指令
LOOP、LOOPZ / LOOPE、LOOPNZ / LOOPNE
子程序调用和返回指令
CALL、RET
中断与中断返回指令
INT、INTO、IRET
2.无条件转移指令
段内直接短转移:JMP SHORT OPR
执行操作:(IP) ← (IP) + 8位位移量
段内直接近转移:JMP NEAR PTR OPR
执行操作:(IP) ← (IP) + 16位位移量
段内间接转移: JMP WORD PTR OPR
执行操作: (IP) ← (EA)
段间直接远转移:JMP FAR PTR OPR
执行操作:(IP) ← OPR 的段内偏移地址
(CS) ← OPR 所在段的段地址
段间间接转移: JMP DWORD PTR OPR
执行操作: (IP) ← (EA)
(CS) ← (EA+2)
3.条件转移指令
注意:只能使用段内直接寻址的8 位位移量
3.1根据单个条件标志的设置情况转移
格式 | 测试条件 | ||
JZ(JE) OPR | ZF=1 |
jump if zero,or equal 结果为零(或相等)则转移 |
|
JNZ(JNE) OPR | ZF=0 | ||
JS OPR | SF=1 |
jump if sign 结果为负则转移 |
|
JNS OPR | SF=0 | ||
JO OPR | OF=1 |
jump if overflow 结果溢出则转移 |
|
JNO OPR | OF=0 | ||
JP OPR | PF=1 |
jump if parity,or parity even 奇偶为为1则转移 |
|
JNP OPR | PF=0 | ||
JB(JNAE,JC) OPR | CF=1 |
低于below, 或者不高于或者等于not above or equal, 或进位为1则转移carry |
|
JNB(JAE,JNC) OPR | CF=0 |
3.2比较两个无符号数,并根据比较结果转移*
* 适用于地址或双精度数低位字的比较
格式 测试条件
< JB (JNAE,JC) OPR CF = 1 jump if below (not above or equal , carry)
≥ JNB (JAE,JNC) OPR CF = 0 jump if not below ( above or equal , not carry)
≤ JBE (JNA) OPR CF∨ZF = 1 jump if below or equal (not above)
> JNBE (JA) OPR CF∨ZF = 0 jump if not below or equal (above)
3.3 比较两个带符号数,并根据比较结果转移*
* 适用于带符号数的比较
格式 测试条件
< JL (JNGE) OPR SF∀OF = 1 less, not greater or equal
≥ JNL (JGE) OPR SF∀OF = 0
≤ JLE (JNG) OPR (SF∀OF)∨ZF = 1 less or equal, not greater
> JNLE (JG) OPR (SF∀OF)∨ZF = 0
3.4 测试 CX 的值为 0 则转移
格式 测试条件
JCXZ OPR (CX)=0
3.循环指令
3.1概述
注意:
* CX 中存放循环次数
* 只能使用段内直接寻址的8 位位移量
LOOP
LOOPZ / LOOPE
LOOPNZ / LOOPNE
执行步骤:
(1) (CX) ← (CX) - 1
(2) 检查是否满足测试条件,
如满足则(IP) ← (IP) + 8位位移量,实行循环;
不满足则 IP 不变,退出循环。
3.2指令
循环指令:LOOP OPR
测试条件:(CX) ≠ 0
为零或相等时循环指令:LOOPZ(LOOPE) OPR
测试条件:ZF=1 且 (CX) ≠ 0
不为零或不相等时循环指令:LOOPNZ(LOOPNE) OPR
测试条件:ZF=0 且 (CX) ≠ 0
4.子程序调用和返回指令
4.1 CALL 调用指令
段内直接近调用:CALL DST
执行操作: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← (IP) + 16位位移量
段内间接近调用:CALL DST
执行操作: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← (EA)
段间直接远调用:CALL DST
执行操作: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (CS)
(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← 偏移地址
(CS) ← 段地址
段间间接远调用:CALL DST
执行操作: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (CS)
(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← (EA)
(CS) ← (EA+2)
4.2 RET 返回指令
段内近返回:RET
执行操作: (IP) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
段内带立即数近返回:RET EXP
段间远返回:RET
执行操作: (IP) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
(CS) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
段间带立即数远返回:RET EXP
5.中断指令
5.1中断向量
中断例行程序的入口地址,存放于中断向量区。
5.2 中断指令: INT TYPE 或 INT
执行操作: (SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (FLAGS)
(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (CS)
(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← (TYPE*4)
(CS) ← (TYPE*4+2)
5.3 溢出中断指令:INTO
执行操作: 若OF=1,(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (FLAGS)
(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (CS)
(SP) ← (SP) - 2
( (SP)+1,(SP) ) ← (IP)
(IP) ← (10H)
(CS) ← (12H)
5.4 从中断返回指令:IRET
执行操作: (IP) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
(CS) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
(FLAGS) ← ( (SP)+1,(SP) )
(SP) ← (SP) + 2
注意:
* TYPE (0~255) 是中断类型号, 隐含的类型号为3
* INT 指令还把 IF 和 TF 置0,但不影响其它标志位
* IRET 指令执行完,标志位由堆栈中取出的值确定
转载于:https://www.cnblogs.com/ZanderZhao/p/11054484.html
30336控制转移指令相关推荐
- Intel 64/x86_64/IA-32/x86处理器 - 通用指令(5) - 控制转移指令
Control Transfer Instructions 控制转移指令支持无条件跳转jump,条件跳转conditional jump,循环loop,调用call与返回return操作,从而实现程序 ...
- RV32I控制转移指令的偏移量计算问题
RV32I的控制转移指令可以分为无条件跳转(unconditional jumps)和条件分支(conditional branches).其中,无条件跳转(unconditional jumps)包 ...
- 16.控制转移指令(条件跳转指令、比较条件跳转指令、多条件分支跳转指令、无条件跳转指令)
目录 1.控制转移指令 1.1 条件跳转指令 1.2 比较条件跳转指令 1.3 多条件分支跳转指令 1.4 无条件跳转指令 1.控制转移指令 控制转移指令分为如下图所示的5种,其中比较指令在算术指令中 ...
- 8086控制转移指令学习笔记
一.无条件转移指令 助记符:JMP 功能:无条件转移指令使程序离开原程序位置而跳转到JMP指令指定的另一个程序位置去执行. 1.目的地址的寻址方式 (1)直接寻址方式:用标号表达 (2)间接寻址方式: ...
- java 控制转移指令_控制转移类指令
条件转移指令Jcc根据指定的条件确定程序是否发生转移.如果满足条件则程序转移到目标地址去执行程序:不满足条件,则程序将顺序执行下一条指令. 其通用格式为: Jcc LABEL ;条件满 ...
- 计算机原理转移指令题,转移指令计算机原理.pdf
转移指令计算机原理.pdf 3.3.5 程序控制指令程序控制指令 程序控制指令又称为控制转移指令,包括转移指令.循环控制指令.过程调用指令和 中断指令 4 类.转移指令又分为无条件转移指令和条件转移指 ...
- c语言rsi2010中制运行,汇编语言初探(控制类指令)-来自第三章3.6的笔记-P135-P163
1.正溢出与负溢出: 首先,一个正数与一个负数相加,不可能溢出,因为结果的绝对值一定小于两个加数的绝对值,既然两个加数能合理表示出来,结果一定也能合理表示出来. 其次,正溢出是由于两个很大的正数相加, ...
- 8086CPU指令系统——控制转移类指令
控制转移(Control Jump)类指令用于改变程序的执行顺序. 8086提供了以下控制转移指令: 调用与返回指令.无条件转移指令.条件转移指令.循环控制指令.中断指令. 一.调用与返回指令 调用指 ...
- 微型计算机转移指令,微机原理与接口技术:转移指令
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如果有侵权请立即联系:55525090@qq.com,我 ...
最新文章
- DCMTK:类DcmUniqueIdentifier的测试程序
- c#通过app.manifest使程序 右键 以管理员身份运行
- 信息安全工程师笔记-案例分析(四)
- 计算两个经纬度的距离_HTML5 地理定位+地图 API:计算用户到商家的距离
- 文东工作室开通微信公众号了!欢迎订阅!~
- ndnsim r语言 ubuntu_Python语言---数据库
- Mysql为什么多个大版本并行发布的个人理解
- python安装sqlalchemy-Python流行ORM框架sqlalchemy安装与使用教程
- windows命令行包管理工具 -Scoop
- 图片压缩利器:TinyPNGWrapper
- python数据存储到access_Python操作Access数据库基本步骤分析
- SSI接口 AC97
- matlab常用了滤波函数小结
- 《可复制的领导力》——樊登书摘
- 十大管理概念(背诵)
- 推特用户曝Win10版微信截图 微信或将回归Win系统
- 单链表的逆置算法解析
- 【历史上的今天】12 月 8 日:D 语言发布;“复制粘贴”的发明者逝世;人人网成立
- 数论读书笔记——欧几里得和扩展欧几里得
- chatbot_我如何通过帮助我的ChatBot理解意图来使其变得更聪明