-
汇编语言转移指令规则汇总
摘要:虽然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
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数