助记方法:

J:跳转
C: 进位位置位
N: 否
S: 符号位置位
o: 溢出位置位
Z: 零标志位置位
E: 等于
P:奇偶位置位
A: Above
B: Below
L: Less (Little的比较级)
G: Greater (Great的比较级)

(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"也可以根据标志寄存器的相关标志位进行转移;

测试:
jmp 无条件跳转

无符号
Je 等于跳转
Jne 不等于跳转
Ja = jnbe 大于跳转 = JNBE(不小于或等于跳转)
Jb= jnae 小于跳转 = JNAE(不大于或等于跳转)
Jna 不大于跳转 = JBE(小于或等于跳转)
Jnb 不小于跳转 = JAE(大于或等于跳转)

Js 为负跳转
Jz 为0跳转
Jc 进位跳转
Jo 溢出跳转
Jp 奇偶位置位 跳转

有符号
Jg 有符号大于 跳转 = JNLE
Jge 有符号大于等于 跳转 = JNL
Jl 有符号小于 跳转 = JNGE
Jle 有符号小于等于 跳转 = JNG

X86下   直接的jmp分3种 
Short Jump(短跳转)机器码 EB rel8 
只能跳转到256字节的范围内 
Near Jump(近跳转)机器码 E9 rel16/32 
可跳至同一个段的范围内的地址 
Far Jump(远跳转)机器码EA ptr 16:16/32 
可跳至任意地址,使用48位/32位全指针

测试用例:

.
.model flat,c
.DATA
Temp db "hello", .CODE ;jmp 无条件跳转
Sub_1 PROC
push ebp
mov ebp,esp
sub esp,40h
mov eax,dword ptr[ebp+8h]
; jmp @F
push
push offset Temp
push offset Temp
push
call eax
@@: mov eax, add esp,40h
pop ebp
RET
Sub_1 ENDP

.
.model flat,c
.DATA
Temp db "hello", .CODE ;jmp 无条件跳转
Sub_1 PROC
push ebp
mov ebp,esp
sub esp,40h
mov eax,dword ptr[ebp+8h]
jmp @F
push
push offset Temp
push offset Temp
push
call eax
@@: mov eax, add esp,40h
pop ebp
RET
Sub_1 ENDP

win10  vs2015  .asm 文件测试

汇编:jmp系列跳转指令总结的更多相关文章

  1. 转移指令jmp和跳转指令call

    [-1]写在前面 以下内容文字描述来自于 王爽老师的<汇编语言>教材,建议大家都买一本,哈哈.不是我打广告,确实人家写的好,应该支持.我只是附上了自己的图片和理解而已. [0]先上干货 只 ...

  2. 汇编 sub减法指令 比较指令CMP JZ条件跳转指令

    二.SUB指令 减法指令SUB (SUBtract) 格式: SUB A,B //A=A-B; 功能: 两个操作数的相减,即从A中减去B,其结果放在A中. 二.CMP 和JZ 指令 比较指令CMP 格 ...

  3. arm汇编学习(六)---跳转到thumb状态

    通常函数返回使用 pop {r7,pc}或bx lr等方式(bx,b类似jmp为跳转指令,但bx可以指定跳转区域究竟为thumb还是arm指令.thumb指令指令的时候,直接填写该地址却总是产生SIG ...

  4. 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    http://www.cnblogs.com/del/archive/2010/04/16/1713886.html 跳转指令分三类:一.无条件跳转: JMP;二.根据 CX.ECX 寄存器的值跳转: ...

  5. arm学习之汇编跳转指令总结

    目前所知道的跳转指令有 b,bl,bep,bne.他们共同点是都是以b开头,首先从字面上分析:b:是Branch,表示分支.bl:是Branch Link表示带连接的分支.bep:Branch ,Eq ...

  6. ARM 汇编指 跳转指令 b , bl

    1. 跳转指令 [ b ] [ bl ]   指令格式:<opcode><cond> <address> 不带返回的跳转指令:b mov r0, #0x12 mov ...

  7. ARM汇编(2)(指令)

    一,ARM汇编语言立即数的表示方法 十六进制:前缀:0x 十进制:无前缀 二制:前缀:0b 二,常用的ARM指令(标准的ARM语法,GNU的ARM语法) 1.@M开头系列 MOV R0, #12 @R ...

  8. 汇编 JMP 详解

    汇编 JMP 详解 关键词说明 RVA: 相对虚拟地址(Relative Virtual Address),在内存中相对于PE文件装入地址的偏移位置,是一个相对地址. JMP 的 3 种类型 短跳转( ...

  9. Java系列:JVM指令详解(下)(zz)

    九.自增减指令    20:iconst_1    21:istore_1    22:return 指令码      助记符                                     ...

随机推荐

  1. Apple Swift中文入门教程【转发】

    1   简介 今天凌晨Apple刚刚发布了Swift编程语言,本文从其发布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS& ...

  2. java加密MD5实现及密码验证

    package test; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; impor ...

  3. WebAPI学习及Swagger使用

    本文用来保存自己学习WebAPI和Swagger使用过程中参考的文章,以及对WebAPI的初步了解. 1.RESTful风格 WebAPI只支持Http协议: 1.1.WebAPI与MVC的区别 Va ...

  4. 如何在app里利用js调取手机第三方地图--以高德地图和百度地图为例(2)

    接着上篇文章说一下js调取第三方地图的问题,上次的方式是通过一个链接直接接到了第三方的web页面,又从第三方的web页面调用的第三方app;结果,这个方法被否定了,因为需求不是这样,需求直接就想调用第 ...

  5. @Modifying 注解完成修改操作

    以上我们做的都是查询,那要如何实现 修改.删除和添加呢? 可以通过以下两种方式: (1)通过实现 CrudRepository 接口来完成(以后介绍): (2)通过 @Modifying 注解完成修改 ...

  6. web.xml中如何设置配置文件的加载路径

    web应用程序通过Tomcat等容器启动时,会首先加载web.xml文件,通常我们工程中的各种配置文件,如日志.数据库.spring的文件等都在此时被加载,下面是两种常用的配置文件加载路径,即配置文件 ...

  7. 转 oracle数据仓库部署注意事项(OLAP)

    https://blog.csdn.net/laven54/article/details/9840365 最近数据库升级到11G之后,出现一些问题,慢慢的开始发现一些需要总结的东西,每次心里都在想: ...

  8. 010 Regular Expression Matching 正则表达式匹配

    Implement regular expression matching with support for '.' and '*'.'.' Matches any single character. ...

  9. Unity [Tooltip("")]

    把Ad2Controller脚本挂在Ad2Ad3Manager游戏对象上,在非运行状态下把鼠标放在inspector的AdButtonObj2上就会显示广告2按钮. 如下图:

  10. Storm概念学习系列之Tuple元组(数据载体)

    不多说,直接上干货! Tuple元组 Tuple 是 Storm 的主要数据结构,并且是 Storm 中使用的最基本单元.数据模型和元组. Tuple 描述 Tuple 就是一个值列表, Tuple ...