汇编语言转移指令规则汇总
2016-03-17 14:12
465 查看
转自:http://blog.csdn.net/trochiluses/article/details/19355425
摘要:虽然jmp指令提供了控制转移,但是它不允许进行任何复杂的判断。80x86条件跳转指令提供了这种判断。条件跳转指令是创建循环和实现其他条件执行语句,如if…endif的基本要素。
条件跳转指令检查一个或多个标志位,判断它们是否匹配某个特殊条件(就像setcc指令):如果标志匹配成功,该指令就将控制转移到目标位置;如果匹配失败,CPU忽略该条件跳转指令而继续执行下一条指令。一些条件跳转指令只是简单测试符号位(sign)、进位位(carry)、溢出位(overflow)、零标志(zero)位的设置。例如,在执行一条sh1指令后,您需要测试进位标志,来判断sh1是否从操作数的高地址位移出一位。类似地,也可以在一条test指令后测试零标志位,来判断指定的位是否为1。大多数情况,在cmp指令之后执行条件跳转指令。cmp指令设置标志位,以便判断小于、大于、等于等情况。
测试标志位的JCC指令[align=center]
[align=right](续表)[/align][align=center]
使用无符号数比较的JCC指令[align=center]
使用有符号数比较的JCC指令[align=center]
loop跳转指令:注意这下面三行代码: MOV CX,3
NEXT: MOVSB
LOOP NEXT
其中,loop的跳转机制:通过对cx进行自动递减来实现跳转
摘要:虽然jmp指令提供了控制转移,但是它不允许进行任何复杂的判断。80x86条件跳转指令提供了这种判断。条件跳转指令是创建循环和实现其他条件执行语句,如if…endif的基本要素。
条件跳转指令检查一个或多个标志位,判断它们是否匹配某个特殊条件(就像setcc指令):如果标志匹配成功,该指令就将控制转移到目标位置;如果匹配失败,CPU忽略该条件跳转指令而继续执行下一条指令。一些条件跳转指令只是简单测试符号位(sign)、进位位(carry)、溢出位(overflow)、零标志(zero)位的设置。例如,在执行一条sh1指令后,您需要测试进位标志,来判断sh1是否从操作数的高地址位移出一位。类似地,也可以在一条test指令后测试零标志位,来判断指定的位是否为1。大多数情况,在cmp指令之后执行条件跳转指令。cmp指令设置标志位,以便判断小于、大于、等于等情况。
测试标志位的JCC指令[align=center]
指 令[/align] | 描 述 | 条 件 | 别 名 | 相 反 指 令 |
JC | 如果进位位被置位则跳转 | 进位标志=1 | JB,JNAE | JNC |
JNC | 如果进位位没有置位则跳转 | 进位标志=0 | JNB,JAE | JC |
JZ | 如果0标志被置位则跳转 | 0标志=1 | JE | JNZ |
JNZ | 如果0标志没有置位则跳转 | 0标志=0 | JNE | JZ |
指 令[/align] | 描 述 | 条 件 | 别 名 | 相反指令 |
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 |
指 令[/align] | 描 述 | 条 件 | 别 名 | 相反指令 |
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 |
指 令[/align] | 描 述 | 条 件 | 别 名 | 相反指令 |
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 |
NEXT: MOVSB
LOOP NEXT
其中,loop的跳转机制:通过对cx进行自动递减来实现跳转
相关文章推荐
- iOS模态跳转包装navigation导航栏
- web项目使用域名访问的基本设置
- bower list报错 Getting random ECMDERR errors
- 有关匹配HTML页面内容问题
- HTML5 - 页面结构相关的新语义元素汇总
- Git常用操作命
- MySQL高可用浅析
- HBase基本概念和hbase shell常用命令用法
- 把源码放到服务器部署webservice调用出错 MVC C#
- linux下进程的最大线程数、进程最大数、进程打开的文件数
- hibernate框架的结构和分析
- js中substring和substr的用法
- Web报表工具FineReport的JS API开发(一)
- mysql主从同步Slave_SQL_Running: No,Last_Errno: 1062的解决方法
- 单利 复利计算器程序1.0 2.0 3.0 [ 合 ] 之 C语言
- HDU-2544-基础最短路
- pyPdf和pyPdf2在合并pdf时的那个异常
- 织梦去掉栏目目录中的a
- Cpp--重载全局的new和delete
- Flume到Kafka