-
汇编语言转移指令规则汇总
摘要:虽然jmp指令提供了控制转移,但是它不允许进行任何复杂的判断。80x86条件跳转指令提供了这种判断。条件跳转指令是创建循环和实现其他条件执行语句,如if…endif的基本要素。
条件跳转指令检查一个或多个标志位,判断它们是否匹配某个特殊条件(就像setcc指令):如果标志匹配成功,该指令就将控制转移到目标位置;如果匹配失败,CPU忽略该条件跳转指令而继续执行下一条指令。一些条件跳转指令只是简单测试符号位(sign)、进位位(carry)、溢出位(overflow)、零标志(zero)位的设置。例如,在执行一条sh1指令后,您需要测试进位标志,来判断sh1是否从操作数的高地址位移出一位。类似地,也可以在一条test指令后测试零标志位,来判断指定的位是否为1。大多数情况,在cmp指令之后执行条件跳转指令。cmp指令设置标志位,以便判断小于、大于、等于等情况。
测试标志位的JCC指令
指 令
|
描 述
|
条 件
|
别 名
|
相 反 指 令
|
JC
|
如果进位位被置位则跳转
|
进位标志=1
|
JB,JNAE
|
JNC
|
JNC
|
如果进位位没有置位则跳转
|
进位标志=0
|
JNB,JAE
|
JC
|
JZ
|
如果0标志被置位则跳转
|
0标志=1
|
JE
|
JNZ
|
JNZ
|
如果0标志没有置位则跳转
|
0标志=0
|
JNE
|
JZ
|
(续表)
指 令
|
描 述
|
条 件
|
别 名
|
相反指令
|
JS
|
如果符号位被置位则跳转
|
符号标志=1
|
JNS
|
|
JNS
|
如果符号位没有被置位则跳转
|
符号标志=0
|
JS
|
|
JO
|
如果溢出标志置位则跳转
|
溢出标志=1
|
JNO
|
|
JNO
|
如果溢出标志没有置位则跳转
|
溢出标志=0
|
JO
|
|
JP
|
如果奇偶校验位被置位则跳转
|
奇偶校验标志=1
|
JPE
|
JNP
|
JPE
|
如果奇偶校验位为偶校验则跳转
|
奇偶校验标志=1
|
JP
|
JPO
|
JNP
|
如果奇偶校验位没有被置位则跳转
|
奇偶校验标志=0
|
JPO
|
JP
|
JPO
|
如果奇偶校验位为奇校验则跳转
|
奇偶校验标志=0
|
JNP
|
JPE
|
使用无符号数比较的JCC指令
指 令
|
描 述
|
条 件
|
别 名
|
相反指令
|
JA
|
如果超过(>)则跳转
|
进位标志=0,0标志=0
|
JNBE
|
JNA
|
JNBE
|
如果不低于或等于(不 <=)则跳转
|
进位标志=0,0标志=0
|
JA
|
JBE
|
JAE
|
如果超过或等于(>=)则跳转
|
进位标志=0
|
JNC,JNB
|
JNAE
|
JNB
|
如果不低于则跳转(不 <)
|
进位标志=0
|
JNC,JAE
|
JB
|
JB
|
如果低于(<)则跳转
|
进位标志=1
|
JC,JNAE
|
JNB
|
JNAE
|
如果不超过或等于(不>=)则跳转
|
进位标志=1
|
JC,JB
|
JAE
|
JBE
|
如果低于或等于(<=)则跳转
|
进位标志=1或0标志=1
|
JNA
|
JNBE
|
JNA
|
如果不超过(不>)则跳转
|
进位标志=1或0标志=1
|
JBE
|
JA
|
JE
|
如果相等(=)则跳转
|
0标志=1
|
JZ
|
JNE
|
JNE
|
如果不相等(<>)则跳转
|
0标志=0
|
JNZ
|
JE
|
使用有符号数比较的JCC指令
指 令
|
描 述
|
条 件
|
别 名
|
相反指令
|
JG
|
如果大于(>)则跳转
|
符号标志=溢出标志或0标志=0
|
JNLE
|
JNG
|
JNLE
|
如果小于或等于(<=)则跳转
|
符号标志=溢出标志或0标志=0
|
JG
|
JLE
|
JGE
|
如果大于或等于(>=)则跳转
|
符号标志=溢出标志
|
JNL
|
JGE
|
JNL
|
如果不小于(不<)则跳转
|
符号标志=溢出标志
|
JGE
|
JL
|
JL
|
如果小于(<)则跳转
|
符号标志<>溢出标志
|
JNGE
|
JNL
|
JNGE
|
如果大于或等于(>=)跳转
|
符号标志<>溢出标志
|
JL
|
JGE
|
JLE
|
如果小于或等于(<=)跳转
|
符号标志<>溢出标志或0标志=1
|
JNG
|
JNLE
|
JNG
|
如果不大于(不>)则跳转
|
符号标志<>溢出标志或0标志=1
|
JLE
|
JG
|
JE
|
如果等于(=)则跳转
|
0标志=1
|
JZ
|
JNE
|
JNE
|
如果不等于(<>)则跳转
|
0标志=0
|
JNZ
|
JE
|
loop跳转指令:
注意这下面三行代码:
- MOV CX,3
- NEXT: MOVSB
- LOOP NEXT
其中,loop的跳转机制:通过对cx进行自动递减来实现跳转
参考:http://blog.csdn.net/trochiluses/article/details/19355425
Delphi汇编跳转
参考:http://www.cnblogs.com/huangjacky/archive/2010/01/20/1652495.html
出处:https://www.cnblogs.com/findumars/p/4121980.html
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式