x86汇编 条件跳转

条件跳转表

汇编语言-条件跳转指令

直接转移指令
指令格式 机器码 测试标志 条件说明 符号
 JO       OPR 70  OF=1  结果有溢出  
 JNO      OPR 71  OF=0  结果无溢出  
 JC       OPR 72  CF=1  小于  <
 JNC      OPR 73  CF=0  大于或等于  >=
 JZ/JE    OPR 74  ZF=1  结果为0  ==
 JNZ/JNE  OPR 75  ZF=0  结果非0  !=
 JS       OPR 78  SF=1  结果为负  <0
 JNS      OPR 79  SF=0  结果为正  >0
 JP/JPE   OPR 7A  PF=1  结果中1的个数为偶数  
 JNP/JPO  OPR 7B  PF=0  结果中1的个数为奇数  
间接转移指令-无符号数
指令格式 机器码 测试标志 条件说明 符号
 JB/JNAE  OPR 72  CF=1  低于/不高于且不等于  <
 JNB/JAE  OPR 73  CF=0  不低于/高于或等于  >=
 JBE/JNA  OPR 76  (CF=1)|(ZF=1)  低于或等于/不高于  <=
 JNBE/JA  OPR 77  (CF=0)&(ZF=0)  不低于且不等于/高于  >
间接转移指令-有符号数
指令格式 机器码 测试标志 条件说明 符号
 JL/JNGE  OPR 7C  (SF^OF)=1  小于/不大于且不等于  <
 JNL/JGE  OPR 7D  (SF^OF)=0  不小于/大于或等于  >=
 JLE/JNG  OPR 7E  (SF^OF)=1|(ZF=1)  小于或等于/不大于  <=
 JNLE/JG  OPR 7F  (SF^OF)=0&(ZF=0)  不小于且不等于/大于  >

理解方法:
N: Not
E: Equal
A: Above
B: Below
L: Less    (Little的比较级)
G: Greater (Great的比较级)

Less Than   : 小于
Greater Than: 大于

(SF^OF)=1 --> SF=0,OF=1 --> a < b
              SF=1,OF=0 --> a < b

(SF^OF)=0 --> SF=1,OF=1 --> a >  b
              SF=0,OF=0 --> a >= b

条件跳转指令是根据标志寄存器中的相关标志位的值来进行跳转的,因此,条件跳转指令只能与那些能够影响标志寄存器的相关标志位的指令配合使用;
能够直接影响标志寄存器的相关标志位的指令有:
1、算术运算指令 : add、sub、adc、sbb、inc、dec、neg、mul、div、imul、idiv,等等;
2、按位逻辑运算 : and、or、xor、not,等等;
3、比较运算指令 : cmp、test;
4、移位操作指令 : shr、shl、sar、sal、ror、rol、rcr、rcl;
5、BCD数调整指令: aaa、aas、daa、das、aam、aad;
6、标志处理指令 : clc、stc、cmc、cld、std、cli、sti;

能够间接影响标志寄存器的相关标志位的指令序列有:
pushf --> pop eax --> modify eax --> push eax --> popf
即:
pushf
pop eax
modify eax
push eax
popf
jbe OPR
这样的一系列操作之后,条件转移指令"jbe OPR"也可以根据标志寄存器的相关标志位进行转移;

原文地址:https://www.cnblogs.com/DirWang/p/12150259.html

时间: 2024-11-02 20:09:33

x86汇编 条件跳转的相关文章

汇编-条件跳转与重复指令

条件跳转 速记方法: j(jmp) z(zero) n(not) e(equal) g(greater) l(less) a(above,无符号) b(below,无符号) 汇编指令x86下 指令+目的操作数+原操作数 比较是用目的操作数去和原操作数比较 jz loc 当cmp的两个值相等的时候跳转,否则继续执行下一条 jnz loc 当cmp的两个值不相等的时候跳转,否则继续执行下一条 je loc 当cmp的两个值相等的时候跳转,否则继续执行下一条 jne loc 当cmp的两个值不相等的时

linux平台学x86汇编(八):条件跳转

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] 在此之前我们使用的汇编代码示例都是从第一条指令开始,直到最后最后一条指令程序退出.但实际上和高级语言类似,汇编代码也提供指令来改变程序处理数据方式. 正常情况下,程序要执行要执行的下一条指令是在指令指针寄存器中,指令指针确定程序中哪条指令是应该执行的下一条指令. 当指令指针在程序指令中移动时,EIP寄存器会递增.指令长度可能是多个字节,所以指向下一条指令不仅仅是每次是指令指针

对X86汇编的理解与入门

本文描述基本的32位X86汇编语言的一个子集,其中涉及汇编语言的最核心部分,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令.逻辑计算指令.算数运算指令),以及函数的调用规则.个人认为:在理解了本文后,基本可以无障碍地阅读绝大部分标准X86汇编程序.当然,更复杂的指令请参阅Intel相关文档. 1 寄存器. 主要寄存器如下图所示: X86处理器中有8个32位的通用寄存器.由于历史的原因,EAX通常用于计算,ECX通常用于循环变量计数.ESP和EBP有专门用途,ESP指示栈指针(用于指示

X86汇编快速入门

本文描述基本的32位X86汇编语言的一个子集,其中涉及汇编语言的最核心部分,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令.逻辑计算指令.算数运算指令),以及函数的调用规则.个人认为:在理解了本文后,基本可以无障碍地阅读绝大部分标准X86汇编程序.当然,更复杂的指令请参阅Intel相关文档. 1 寄存器. 主要寄存器如下图所示: X86处理器中有8个32位的通用寄存器.由于历史的原因,EAX通常用于计算,ECX通常用于循环变量计数.ESP和EBP有专门用途,ESP指示栈指针(用于指示

x86汇编之十(使用字符串)

x86汇编之十(使用字符串) 转自网络,出处不详 一.传送字符串 Intel提供了完整的字符串传送指令,就像是MOV指令一样. 1.MOVS指令 1)movs指令格式 把字符串从一个位内存位置传送到另一个内存内置,其指令隐含了源操作数与目的操作数.ATT有3条传字符串的指令的,分别是MOVSB,MOVSW,MOVSL. 指令 含义 源址 目址 MOVSB 传一个字节的字符 (%ESI) (%EDI) MOVSW 传一个字的字符 (%ESI) (%EDI) MOVSL 传4个字节的字符 (%ESI

汇编语言--条件跳转指令

修改自: http://bdxnote.blog.163.com/blog/static/84442352015327011988/ 在此向原作者致敬, 网上大多数帖子都是拷贝自一个把跳转条件写错了的帖子, 害的我差点要怀疑人生了,-_-! . 本贴主要是把原作者的跳转条件改成C语言逻辑表达式的写法, 这样看着更舒服一些, 而且不会产生歧义 直接转移指令 指令格式 机器码 跳转条件 条件说明 符号  JO       OPR 70  OF==1  结果有溢出    JNO      OPR 71

X86汇编5.高级指令详解

最近学习了X86汇编,其实无论是古老的8086还是现在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位数,寻址空间,寄存器个数,指令集的扩充等方面有所不同,对于学习,8086永不过时. 转移指令1.转移指令分类:(1)无条件转移指令,如: jmp(2)条件转移指令(3)循环指令,如: loop(4)过程(5)中断 操作符1.offset释义:由编译器处理的符号,功能是取得标号的偏移地址start: mov ax,offset start ;相当于mov ax, 0s:

X86汇编2.寄存器

最近学习了X86汇编,其实无论是古老的8086还是现在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位数,寻址空间,寄存器个数,指令集的扩充等方面有所不同,对于学习,8086永不过时. 1.CPU组成一个典型CPU由:运算器.控制器.寄存器(CPU工作原理)等部件构成,这些器件依靠内部总线连接.运算器进行信息处理寄存器进行信息存储,每个CPU有不同数量的寄存器控制器控制各种器件进行工作内部总线连接各种器件,在他们之间进行数据的传送 对于一个汇编程序员来说,寄存器是CPU

linux平台学x86汇编(十三 ):字符串的比较与搜索

[版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途] cmps指令用于比较字符串值,cmps指令有三种格式:cmpsb.cmpsw.cmpsl.隐含的源操作数和目标操作数位置存储在esi和edi寄存器中,每次执行cmps指令时,根据DF标志,esi和edi寄存器按照被比较的数据长度递增或递减.cmps指令从源字符串中减去目标字符串,并且适当地设置EFLAGS寄存器的进位.符号.溢出.零.奇偶校验和富足进位标志.cmps指令执行之