程序控制指令
1. 无条件转移指令
(1). 段内直接转移指令JMP
JMP NEAR LABLE
功能:
LABLE是一个符号地址, 指令执行会跳到LABLE指向的位置
(2). 段内间接转移指令JMP
JMP OPRD
功能:
OPRD是一个16位寄存器或存储器地址(需要指明16位), 指令执行会跳到以OPRD为内容的位置
(3). 段间直接转移指令JMP
JMP FAR LABLE
功能:
LABLE是另一个代码段的地址, 指令执行会跳到CS:IP的位置
(4). 段间间接转移指令JMP
JMP CALL DWORD PTR [REG]
功能:
REG是16位寄存器, 存储器中该位置存储着CS:IP, 低16位送入IP, 高16位送入CS
2. 有条件转移指令
转移范围: -128 ~ +127
指令名称 | 汇编格式 | 转移条件 | 备注 |
---|---|---|---|
CX内容为0 转移 | JCXZ TARGET | CX = 0 | – |
大于/不小于等于 转移 | JG/JNLE TARGET | SF = OF, 且 ZF = 0 | 带符号数 |
大于等于/不小于 转移 | JGE/JNL TARGET | SF = OF | 带符号数 |
小于/不大于等于 转移 | JL/JNGE TARGET | SF ≠ OF, 且 ZF = 0 | 带符号数 |
小于等于/不大于 转移 | JLE/JNG TARGET | SF ≠ OF, 且 ZF = 1 | 带符号数 |
溢出转移 | JO TARGET | OF = 1 | – |
不溢出转移 | JNO TARGET | PF = 0 | – |
结果为负转移 | JS TARGET | SF = 1 | – |
结果为正转移 | JNS TARGET | SF = 0 | – |
高于/不低于等于转移 | JA/JNBE TARGET | CF = 0, 且 ZF = 0 | 无符号数 |
高于等于/不低于转移 | JAE/JNB TARGET | CF = 0 | 无符号数 |
低于/不高于等于转移 | JB/JNAE TARGET | CF = 1 | 无符号数 |
低于等于/不高于转移 | JBE/JNA TARGET | CF = 1 或 ZF = 1 | 无符号数 |
进位转移 | JC TARGET | CF = 1 | – |
无进位转移 | JNC TARGET | CF = 0 | – |
等于或为零转移 | JE/JZ TARGET | ZF = 1 | – |
不等于或非零转移 | JNE/JNZ TARGET | ZF = 0 | – |
奇偶校验为偶转移 | JP/JPE TARGET | PF = 1 | – |
奇偶校验为奇转移 | JNP/JPO TARGET | PF = 0 | – |
3. 有条件转移指令
指令 | 转移条件 |
---|---|
LOOP LABLE | CX ≠ 0 |
LOOPZE(LOOPE) LABLE | CX ≠ 0 ,且 ZF = 1 |
LOOPNZ(LOOPNE) LABLE | CX ≠ 0 ,且 ZF = 0 |
4. 过程调用和返回
(1). 段内直接调用指令
CALL NEAR PROC
功能:
PROC是一个近过程的符号地址, 指令执行会跳到PROC这个过程中
(2). 段内间接调用指令
CALL OPRD
功能:
OPRD是一个16位寄存器或存储器地址(需要指明16位), 内容代表近过程入口地址, IP会指向该位置, 并且向下执行
(3). 段间直接调用指令
CALL FAR LABLE
功能:
PROC是一个远过程的符号地址, 指令执行会跳到CS:IP位置执行
(4). 段间间接调用指令
CALL DWORD PTR [REG]
功能:
REG是16位寄存器, 指令跳到以寄存器为内容的4个单元位置处执行, 低16位送入IP, 高16位送入CS, CS:IP
(4). 返回指令
RET
功能:
返回过程的调用处
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/122849.html