汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

2017年11月12日 15:01:09 zmmycsdn 阅读数 19334

转自:http://www.cnblogs.com/del/archive/2010/04/16/1713886.html

http://pan.baidu.com/s/1gVTSi

跳转指令分三类:

一、无条件跳转:

JMP  ;无条件跳转

二、根据CX、ECX寄存器的值跳转:

 
JCXZ ;CX 为 0 则跳转
JECXZ;ECX 为 0 则跳转

三、根据EFLAGS寄存器的PSW标志位跳转, 这个太多了.

根据标志位跳转的指令:


 
JE  ;等于则跳转 同JZ JNE  ;不等于则跳转 同JNZ 
JA  ;无符号大于则跳转 JNA  ;无符号不大于则跳转 JAE  ;无符号大于等于则跳转 同JNB JNAE ;无符号不大于等于则跳转 同JB
JB   ;无符号小于则跳转
JNB  ;无符号不小于则跳转
JBE  ;无符号小于等于则跳转        同JNA
JNBE ;无符号不小于等于则跳转   同JA
 
JG  ;有符号大于则跳转 JNG  ;有符号不大于则跳转 JGE  ;有符号大于等于则跳转 同JNL JNGE ;有符号不大于等于则跳转 同JL
 
JL   ;有符号小于则跳转
JNL  ;有符号不小于则跳转
JLE  ;有符号小于等于则跳转        同JNG
JNLE ;有符号不小于等于则跳转   同JG
JZ   ;为零则跳转
JNZ  ;不为零则跳转JS   ;为负则跳转
JNS  ;不为负则跳转JC   ;进位则跳转
JNC  ;不进位则跳转JO   ;溢出则跳转
JNO  ;不溢出则跳转
 

JP ;为偶则跳转

 
JNP  ;不为偶则跳转
JPE  ;奇偶位置位则跳转       同JP
JPO  ;奇偶位复位则跳转       同JNP

 

跳转相关的PSW标志位:

11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF   AF   PF   CF












影响标志位的汇编指令:

加法指令:ADD、ADC、INC、XADD除了INC不影响CF标志位外,都影响条件标志位。CF、ZF、SF、OFCF最高位是否有进位DF若两个操作数符号相同而结果符号与之相反OF=1,否则OF=0.减法指令:SUB、SBB、DEC、NEG、CMP、CMPXCHG、CMPXCHG8B前六种除了DEC不影响CF标志外都影响标志位。CMPXHG8B只影响ZF。CF说明无符号数相减的溢出,同时又确实是被减数最高有效位向高位的借位。OF位则说明带符号数的溢出无符号运算时,若减数>被减数,有借位CF=1,否则CF=0.OF若两个数符号相反,而结果的符号与减数相同则OF=1.否则OF=0.乘法指令:MUL、IMULMUL:如果乘积高一半为0,则CF和OF位均为0,否则CF和OF均为1.IMUL:如果高一半是低一半符号的扩展,则CF位和OF位均为0,否则就均为1.除法指令:DIV、IDIV对所有条件位均无定义。逻辑指令:AND、OR、NOT、XOR、TESTNOT不影响标志位,其余4种CF、OF、置0,AF无定义,SF、ZF、PF位看情况而定。定位扫描指令:BSF正向位扫描、BSR反向位扫描影响ZF位。

指令类型

助记符

对标志寄存器的影响

备注

ZF

CF

PF

SF

OF

AF

DF

IF

TF

数据传送类

通用

MOV

不影响标志位

交换

XCHG

堆栈操作

PUSH

POP

地址传送

LEA

LDS

LES

累加器专用

IN

OUT

XALT

标志寄存器

LAHF

SAHF

标志寄存器低八位的内容由AH的值决定

CF,AF,ZF,SF,PF的值会被影响

PUSHF

不影响标志位

POPF

标志寄存器的内容由装入的具体值决定

可能影响所有标志位

算术运算类

加法

ADD

ADC

INC

INC指令不影响CF

AAA

?表示不确定或者未定义

DAA

减法

SUB

SBB

DEC

DEC指令不影响CF

AAS

DAS

DAA指令不影响OF

乘法

MUL

IMUL

AAM

除法

DIV

此指令可能会产生中断,故影响IF,TF

IDIV

同上

AAD

符号位扩展

CBW

不影响标志位

CWD

不影响标志位

比较

CMP

由计算结果确定标志位的值

不会影响到DF,IF,TF

逻辑运算类

求反

NOT

不影响标志位

移位

SAL

OF标志位只在移位次数是1时有效

AF未定义

SHL

SAR

SHR

循环

移位

ROL

循环移位指令影响OF和CF

AF未定义

ROR

RCL

RCR

AND

置0

置0

OR

置0

置0

异或

XOR

置0

置0

检测

TSET

置0

置0

字符串操作

传送

MOVS

不影响标志位

比较

CMPS

由计算结果确定标志位的值

不会影响DF,IF,TF

搜索

SCAS

由计算结果确定标志位的值

不会影响DF,IF,TF

装入

LODS

不影响标志位

填充

STOS

不影响标志位

前缀

REP

不影响标志位

程序控制类

无条件转移

JMP

不影响标志位

单个

标志

JS/JNS

SF=1/0,则转移到目的地址

JZ/ JNZ

ZF=1/0,则转移到目的地址

JP/JNP

PF=1/0,则转移到目的地址

JB/JNB

CF=1/0,则转移到目的地址

JO/JNO

OF=1/0,则转移到目的地址

若干

标志

位的

逻辑

组合

JA

两个无符号数比较,A>B

JBE

两个无符号数比较,A <=B

JG

两个带符号数比较,A>B

JGE

两个带符号数比较,A>=B

JL

两个带符号数比较,A<B

JLE

两个带符号数比较,A <=B

循环控制

LOOP

不影响标志位

LOOPE

LOOPNE

JCXZ

JECXZ

中断控制

INT

不影响标志位

INTO

IRET

影响所有标志位

标志位到恢复中断以前的状态

CPU控制指令

标志位操作

CLC

此指令置CF=0

CMC

此指令CF取反

STC

此指令置CF=1

CLD

此指令置DF=0

STD

此指令置DF=1

CLI

此指令置IF=0

STI

此指令置IF=1

空操作

NOP

不影响标志位

暂停

HLT

等待

WAIT

交权

ESC

总线锁定前缀

LOCK


JMP 测试


 
; Test28_1.asm; .386 .model flat, stdcall include  windows.inc include  kernel32.inc include  masm32.inc include  debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc   PrintText '1'   jmp @F   PrintText '2'   PrintText '3' @@: PrintText '4'   ret main endp end main  ;测试结果应该是: ;1 ;4 ;以下都应该是这样. 

 

JE 测试


 
; Test28_2.asm; .386 .model flat, stdcall include  windows.inc include  kernel32.inc include  masm32.inc include  debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc   PrintText '1'   mov eax, 123   cmp eax, 123   je @F   PrintText '2'   PrintText '3' @@: PrintText '4'   ret main endp end main 

 

JZ 测试


 
; Test28_3.asm; .386 .model flat, stdcall include  windows.inc include  kernel32.inc include  masm32.inc include  debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc   PrintText '1'   xor eax, eax   jz @F   PrintText '2'   PrintText '3' @@: PrintText '4'   ret main endp end main 

 

JS 测试


 
; Test28_4.asm; .386 .model flat, stdcall include  windows.inc include  kernel32.inc include  masm32.inc include  debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc   PrintText '1'   xor eax, eax   dec eax   js @F   PrintText '2'   PrintText '3' @@: PrintText '4'   ret main endp end main 

 

JC 测试


 
; Test28_5.asm; .386 .model flat, stdcall include  windows.inc include  kernel32.inc include  masm32.inc include  debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc   PrintText '1'   mov al, 0FFh   add al, 1   jc @F   PrintText '2'   PrintText '3' @@: PrintText '4'   ret main endp end main 

 

JO 测试


 
; Test28_6.asm; .386 .model flat, stdcall include  windows.inc include  kernel32.inc include  masm32.inc include  debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc   PrintText '1'   mov al, -128   sub al, 1   jo @F   PrintText '2'   PrintText '3' @@: PrintText '4'   ret main endp end main 

 

JA 测试


 
; Test28_7.asm; .386 .model flat, stdcall include  windows.inc include  kernel32.inc include  masm32.inc include  debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc   PrintText '1'   mov eax, 22   cmp eax, 11   ja @F   PrintText '2'   PrintText '3' @@: PrintText '4'   ret main endp end main 

 

JG 测试


 
; Test28_8.asm; .386 .model flat, stdcall include  windows.inc include  kernel32.inc include  masm32.inc include  debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc   PrintText '1'   mov eax, 1   cmp eax, -1   jg @F   PrintText '2'   PrintText '3' @@: PrintText '4'   ret main endp end main 

 

JP 测试


 
; Test28_9.asm; .386 .model flat, stdcall include  windows.inc include  kernel32.inc include  masm32.inc include  debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc   PrintText '1'   mov al, 00001110b   inc al   jp @F   PrintText '2'   PrintText '3' @@: PrintText '4'   ret main endp end main 

 

JECXZ 测试


 
; Test28_10.asm; .386 .model flat, stdcall include  windows.inc include  kernel32.inc include  masm32.inc include  debug.inc includelib kernel32.lib includelib masm32.lib includelib debug.lib .code main proc   PrintText '1'   xor ecx, ecx   jecxz @F   PrintText '2'   PrintText '3' @@: PrintText '4'   ret main endp end main

【debug】汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等相关推荐

  1. 汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    转自:http://www.cnblogs.com/del/archive/2010/04/16/1713886.html http://pan.baidu.com/s/1gVTSi 跳转指令分三类: ...

  2. 汇编jnl_汇编跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    http://pan.baidu.com/s/1gVTSi 跳转指令分三类: 一.无条件跳转: JMP ;无条件跳转 二.根据CX.ECX寄存器的值跳转: JCXZ ;CX 为 0 则跳转 JECXZ ...

  3. 汇编 跳转指令: JMP、JCXZ、JECXZ、JA、JE、JNA、JNE、JZ、JB、JS、JC、JNC、JG、JNBE、JO、JP、JL、JPO、JGE、JLE 汇编语言

    以下为JCXZ和JECXZ .JMP:

  4. 汇编——跳转指令与分支结构(包括OF和CF的溢出判断)

    汇编中的循环和分支结构 虽然我们没有花里胡哨的函数和对象等等,但是我们也可以实现循环和分支结构(其实就是if_else) 我们要知道一个问题,就是代码是一行行执行的. (其实这个是说给我这样的被Ver ...

  5. 014-无条件跳转指令jmp+

    l  无条件跳转指令jmp l   goto指令 l   优化后的指令     l  标志寄存器PSW 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DF IF T ...

  6. ARM汇编:汇编语言跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

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

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

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

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

  9. 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

最新文章

  1. Springboot之多环境打包配置
  2. 系统功能图怎么画_[分享]照明系统图和照明平面图怎么看?系统讲解
  3. 干货!策略路由和路由策略的区别和联系
  4. Hive的基本操作-创建外部表
  5. NOIP Mayan游戏
  6. 如何将word中的对象怎么显示到工具栏_MathType怎么添加到Word快速访问栏?
  7. MyBatis总结六:resultMap详解(包含多表查询)
  8. git clone远程仓库时,输错密码如何解决?
  9. C++:20---成员变量初始化方式
  10. 使用c++查看linux服务器某个进程正在使用的内存_精选20个常用的Linux命令
  11. ios xcode文件前缀_IOS Xcode开发中 文件名的后缀名m,mm,cpp,h区别
  12. python中函数的可变参数_Python中函数的参数定义和可变参数
  13. Hive 实战(1)--hive数据导入/导出基础
  14. [FPGA] 2、新建并运行一个工程
  15. 末日帝国——Agile公司的困境
  16. python 画ks曲线_风控模型—区分度评估指标(KS)深入理解应用
  17. 阿里双十一数据库技术
  18. “当高启强遇到陈书婷”与TCP协议
  19. Python绘制节点是饼状图的社交网络图(Plot network with pie chart)
  20. 正则将长数字转为英式写法(从后向前3个数字一个逗号)

热门文章

  1. 8、RH850 F1 IIC通讯功能和配置
  2. IntelliJ IDEA之配置JDK的4种方式
  3. css动效:气泡在屏幕上随机漂浮
  4. npm ERR Error while executing: npm ERR C:\Program Files\Git\cmd\git.EXE ls-remote -h -t ssh://git@
  5. c语言中热河输入空格,热河 - 在線打字測試(dazi.kukuw.com)
  6. postgresql 数据库出现 autovacuum:VACUUM xxoo.xxoo (to prevent wraparound)
  7. WiFi万能钥匙破解显密码版。
  8. 假设检验-U检验、T检验、卡方检验、F检验
  9. msi和exe安装文件有什么区别
  10. [2019 年百度之星·程序设计大赛 - 初赛三]简要题解?