汇编语言指令集之条件转移指令实现

条件转移指令较多,容易混淆,在此记录一下便于日后使用

 1. 根据单个条件标志的设置情况转移

指令 英文 含义 格式 测试条件
JZ/JE jump if zero/equal 结果为零/相等则转移 JZ/JE OPR ZF=1
JNZ/JNE jump if not zero/equal 结果不为零/不相等则转移 JNZ/JNE OPR ZF=0
JS jump if sign 结果为负则转移 JS OPR SF=1
JNS jump if not sign 结果为正则转移 JNS OPR SF=0
JO jump if overflow 溢出则转移 JO OPR OF=1
JNO jump if not overflow 不溢出则转移 JNO OPR OF=0
JP/JPE jump if parity/parity even 奇偶位为1则转移 JP/JPE OPR PF=1
JNP/JNPE jump if not parity/parity even 奇偶位为0则转移 JNP/JNPE OPR PF=0
JB/JNAE/JC jump if below/not above、not equal/carry 低于/不高于或不等于/进位为1则转移 JB/JNAE/JC OPR CF=1
JNB/JAE/JNC jump if not below/ above、equal/not carry 不低于/高于或等于/进位为零则转移 JNB/JAE/JNC OPR CF=0
适用于测试某 一次运算的结果并根据其 不同特征产生程序分支 不同的处理的 情况

 2. 比较两个无符号数,并根据比较的结果转移

指令 英文 含义 格式 测试条件 等价于
JB/JNAE/JC jump if below/not above、not equal/carry 低于/不高于或不等于/进位为1则转移 JB/JNAE/JC OPR CF=1 <
JNB/JAE/JNC jump if not below/ above、equal/not carry 不低于/高于或等于/进位为零则转移 JNB/JAE/JNC OPR CF=0
JBE/JNA jump if below/equal、not above 低于/等于、不高于则转移 JBE/JNA OPR CF并ZF=1
JNBE/JA jump if not below/not equal、above 不低于/不等于、高于则转移 JNBE/JA OPR CF并ZF=0 >

 3. 比较两个带符号数,并根据比较的结果转移

指令 英文 含义 格式 测试条件 等价于
JL/JNGE jump if less、not greater/equal 小于、不大于/不等于则转移 JL/JNGE OPR SF异或CF=1 <
JNL/JGE jump if not less、greater/equal 不小于、大于/等于则转移 JNL/JGE OPR SF异或CF=0
JLE/JNG jump if less/equal、not greater 小于/等于、不大于则转移 JLE/JNG OPR (SF异或CF)并ZF=1
JNLE/JG jump if not less/not equal、 greater 不小于/不等于、大于则转移 JNLE/JG OPR (SF异或CF)并ZF=0 >

 4.测试CX或ECX的值为0则转移指令

1. LCXZ (jump if CX register is zero) CX寄存器的内容为零则转移
  格式:JCXZ OPR
  测试条件:(CX)=0
2. LECXZ (jump if ECX register is zero) ECX寄存器的内容为零则转移
  格式:JECXZ OPR  (386及其后继机型可用)
  测试条件:(ECX)=0

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

(0)

相关推荐

  • 汇编语言之寄存器详解

    上图是cpu中三个组成部分:寄存器 运算器 控制器.其中寄存器是cpu中程序员用指令读取的唯一部件(调剂界面中的 寄存器窗口).如果是16位cpu,就是处理,传输,暂时存储的数据长度都是16位.所以16位的cpu,寄存器也是16位.<汇编语言>这本书中使用的是16位寄存器位例子来讲的,所以下面的内容也都是16位寄存器的. ps:查看处理器型号以及几核cpu,我现在的电脑4核64位 寄存器名字 16位的寄存器有:AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW

  • 汇编语言编译环境搭建过程

    1. 将masm615文件夹拷贝在C或D盘或其他(文件路径不要有中文文件夹) 2. 运行DOSBox(网上下载) 3. DOSBox软件中输入命令mount C C:\masm615(假设masm615安装在C盘),回车输入C: 4. 测试程序test1.asm DATA SEGMENT BUFFER DB "1 STYLE ONE ", 0DH, 0AH DB "2 STYLE TWO ", 0DH, 0AH DB "3 EXIT ", 0DH

  • 汇编语言环境搭建软件与教程

    1.编写汇编程序需要的环境: 1]dosbox 2]masm 上面两个软件打包下载:https://www.jb51.net/softs/709793.html 2.搭建步骤: 1]下载dosbox 2]安装dosbox 下载的dosbox解压: 运行exe,一直下一步即可: 3]下载masm masm用来编译汇编程序: 到网上搜索下载即可: 解压目录如下: 将解压masm,将文件放在特定的目录下: 例如:D:\GongJu\masm 4]挂载dosbox 目的是将dosbox的c盘挂载到mas

  • 汇编语言AAD,DAA,DAS用法解析

    这篇文章主要介绍了汇编语言AAD,DAA,DAS用法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 AAD 为下面的除法做准备 ,把AL 和 AH 两个单BCD码组成一个十进制数 1.AAD(调整除) 5.2该指令是在作除法前用于调整寄存器AH和AL之值,它是把二个寄存器中单BCD码组成一个十进制数值,其调整规则如下: AL←AH*10+AL,AH←0 受影响的标志位:PF.SF和ZF(AF.CF和OF等都是无定义) MOV AX, 050

  • 什么是汇编语言

    汇编语言(assembly language)是一种用于电子计算机.微处理器.微控制器或其他可编程器件的低级语言,亦称为符号语言.在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址.在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令.普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植. 许多汇编程序为程序开发.汇编控制.辅助调试提供了额外的支持机制.有

  • 详解如何在Mac上用汇编语言写HelloWorld

    首先,Mac自带nasm,不过我们要先将其升级. 升级它的方法有很多种,因为我已经装好了homebrew,所以我直接在终端输入: brew install nasm 这样就升级啦- 接下来,创建一个HelloWorld.asm文件! msg: db "hello world!", 0x0a len: equ $-msg SECTION .text global _main kernel: syscall ret _main: mov rax,0x2000004 mov rdi,1 mo

  • 汇编语言之寄存器(详细介绍)

    1.寄存器 32位寄存器有16个,分别是: 4个数据寄存器(EAX.EBX.ECX.EDX). 2个变址和指针寄存器(ESI和EDI):2个指针寄存器(ESP和EBP). 6个段寄存器(ES.CS.SS.DS.FS.GS). 1个指令指针寄存器(EIP):1个标志寄存器(EFlags). 2.数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间. 32位CPU有4个32位通用寄存器:EAX.EBX.ECX和EDX.对低16位数据的取存,不会影

  • 汇编语言超浓缩教程

    所以我个人看法学汇编,不一定要写程序,写程序确实不是汇编的强项,大家不妨玩玩DEBUG,有时CRACK出一个小软件比完成一个程序更有成就感(就像学电脑先玩游戏一样).某些高深的指令事实上只对有经验的汇编程序员有用,对我们而言,太过高深了.为了使学习汇编语言有个好的开始,你必须要先排除那些华丽复杂的命令,将注意力集中在最重要的几个指令上(CMP LOOP MOV JNZ--).但是想在啰里吧嗦的教科书中完成上述目标,谈何容易,所以本人整理了这篇超浓缩(用WINZIP.WINRAR-依次压迫,嘿嘿!

  • 16位汇编语言寄存器及指令整理(小结)

    寄存器 通用寄存器 8位寄存器 16位寄存器 32位寄存器 寄存器名称 AH,AL AX EAX 累加寄存器 BH,BL BX EBX 基地址寄存器 CH,CL CX ECX 计数器寄存器 DH,DL DX EDX 数据寄存器 SI ESI 源变址寄存器 DI EDI 源目标寄存器 DH,DL DX EDX 基地址寄存器 DH,DL DX EDX 栈顶寄存器 段寄存器 标号 名称 CS 代码段 DS 数据段 SS 栈段 ES 附加数据段 GS,FS 附加数据段(+80386) 专用寄存器 标号

  • 汇编语言lea指令使用方法解析

    这篇文章主要介绍了汇编语言lea指令使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 lea指令变种(按大小分类): leaw #2个字节 leal #4个字节 leaq #8个字节 lea的用法: leaq a(b, c, d), %rax 首先lea指令是mov指令的变种,据说,lea指令是x86体系结构中,是一条最古老但是从某个方面来讲又是最神奇的指令. 表面上看,它做的事情非常简单,根据括号里的源操作数来计算地址,然后把地址加

随机推荐