汇编跳转指令使用总结

 更新时间:2020年01月24日 08:50:14   作者:H-KING  
这篇文章主要介绍了汇编跳转指令使用总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

虽然jmp指令提供了控制转移,但是它不允许进行任何复杂的判断。80x86条件跳转指令提供了这种判断。条件跳转指令是创建循环和实现其他条件执行语句。条件跳转指令检查一个或多个标志位,判断它们是否匹配某个特殊条件(就像setcc指令):如果标志匹配成功,该指令就将控制转移到目标位置;如果匹配失败,CPU忽略该条件跳转指令而继续执行下一条指令。条件跳转指令有一个限制:目标标号的位置必须在跳转指令本身附近32768字节范围内,这通常对应着8000~32000条机器指令。一般情况下不会超过这种限制。

用自己的话总结:条件跳转指令是指jz,jg..等等指令,这些指令跳转方式是根据标志位的状态进行跳转,而设置这些标志的常见指令为cmp和test指令,所以他们经常搭配使用(应该是必须的)。即跳转指令前一行要吗有cmp指令要吗有test指令。

汇编标志位:

标志名                          标志 1              标志 0

OF (溢出标志)                 OV                  NV

DF  (方向标志)                                         UP                  DN

IF (中断标志)                 DI                  EI

SF (符号标志位)               PL                  NG

ZF (零标志)                   NZ                  ZR

AF (辅助进位标志位)           NA                  AC

PF (奇偶标志)                 PO                  PE

CF (进位标志)                 NC                  CY

反汇编窗口,对应的标志位(双击后面的数字可改变其状态)

Test和cmp指令的区别

test属于逻辑运算指令
Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。
举例:
Test的一个非常普遍的用法是用来测试一方寄存器是否为空:
test ecx, ecx
jz somewhere
如果ecx为零,设置ZF零标志为1,Jz跳转

--------------------------------------------

CMP属于算术运算指令
CMP比较.(两操作数作减法,仅修改标志位,不回送结果). 
cmp实际上是只设置标志不保存结构的减法,并设置Z-flag(零标志).
举例:
Cmp eax, 2;       如果eax-2=0即eax=2就设置零标志为1
Jz ****;          如果设置了零标志就跳转

============================================

得出的结论
test逻辑与运算结果为零,就把ZF(零标志)置1;
cmp 算术减法运算结果为零,就把ZF(零标志)置1.

指 令

描 述

条 件

别 名

相 反 指 令

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 汇编语言指令大全 X86和X87汇编指令大全(带注释)

    汇编语言指令大全 X86和X87汇编指令大全(带注释)

    汇编指令集太多,如果不用就会忘记,所以将i处理器官方的指令集大全写到博客上,有需要的人可以参考一下
    2021-10-10
  • GNU ARM汇编语法原理及操作解析

    GNU ARM汇编语法原理及操作解析

    这篇文章主要介绍了GNU ARM汇编语法原理及操作解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 汇编语言 and和or逻辑运算指令的实现

    汇编语言 and和or逻辑运算指令的实现

    这篇文章主要介绍了汇编语言 and,or逻辑运算指令的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编语言:比较指令、跳转指令、JCC的使用

    汇编语言:比较指令、跳转指令、JCC的使用

    这篇文章主要介绍了汇编语言:比较指令、跳转指令、JCC的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 汇编语言程序设计之根据输入改变屏幕颜色的代码

    汇编语言程序设计之根据输入改变屏幕颜色的代码

    这篇文章主要介绍了汇编语言中的根据输入改变屏幕颜色的代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • 汇编跳转指令使用总结

    汇编跳转指令使用总结

    这篇文章主要介绍了汇编跳转指令使用总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • libAccessibility通知Crash排查记录分析

    libAccessibility通知Crash排查记录分析

    这篇文章主要为大家介绍了libAccessibility通知Crash排查记录分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 在vs2017中编写汇编的实现(图文)

    在vs2017中编写汇编的实现(图文)

    这篇文章主要介绍了在vs2017中编写汇编的实现(图文),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • 汇编语言伪指令和汇编指令的区别

    汇编语言伪指令和汇编指令的区别

    指令是控制程序运行时的机器代码运作的,是CPU执行的依据,编程、编译、执行都是有效的。伪指令不直接控制运行时刻的机器,但是控制翻译程序如何生成机器指令代码,感兴趣的朋友跟随小编一起看看吧
    2020-01-01
  • 汇编语言系列之汇编实现各种码制的转换(思路详解)

    汇编语言系列之汇编实现各种码制的转换(思路详解)

    本文列出了十六进制转二进制、十进制、ASCII码及大小写字母转换的代码,对汇编语言系列之实现各种码制的转换问题感兴趣的朋友跟随小编一起看看吧
    2021-11-11

最新评论