学 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 寄存器的值跳转: JCXZ(CX 为 0 则跳转)、JECXZ(ECX 为 0 则跳转);
三、根据 EFLAGS 寄存器的标志位跳转, 这个太多了.
根据标志位跳转的指令:
JE ;等于则跳转
JNE ;不等于则跳转 JZ ;为 0 则跳转
JNZ ;不为 0 则跳转 JS ;为负则跳转
JNS ;不为负则跳转 JC ;进位则跳转
JNC ;不进位则跳转 JO ;溢出则跳转
JNO ;不溢出则跳转 JA ;无符号大于则跳转
JNA ;无符号不大于则跳转
JAE ;无符号大于等于则跳转
JNAE ;无符号不大于等于则跳转 JG ;有符号大于则跳转
JNG ;有符号不大于则跳转
JGE ;有符号大于等于则跳转
JNGE ;有符号不大于等于则跳转 JB ;无符号小于则跳转
JNB ;无符号不小于则跳转
JBE ;无符号小于等于则跳转
JNBE ;无符号不小于等于则跳转 JL ;有符号小于则跳转
JNL ;有符号不小于则跳转
JLE ;有符号小于等于则跳转
JNLE ;有符号不小于等于则跳转 JP ;奇偶位置位则跳转
JNP ;奇偶位清除则跳转
JPE ;奇偶位相等则跳转
JPO ;奇偶位不等则跳转
跳转相关的标志位:
11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|---|---|---|---|
OF | DF | IF | TF | SF | ZF | AF | PF | CF | |||
溢 出 |
符 号 |
零 | 未 用 |
辅 助 |
未 用 |
奇 偶 |
未 用 |
进 位 |
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,
cmp eax,
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,
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, -
sub al,
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,
cmp eax,
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,
cmp eax, -
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
学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等的更多相关文章
- 学 Win32 汇编[22] - 逻辑运算指令: AND、OR、XOR、NOT、TEST
AND: 逻辑与 ;该指令会置 CF=OF=; 其结果影响 SF.ZF.PF ;指令格式: AND r/m, r/m/i ; Test22_1.asm - 使用 AND 运算将一个数的第二.四位清零 ...
- ARM 汇编指 跳转指令 b , bl
1. 跳转指令 [ b ] [ bl ] 指令格式:<opcode><cond> <address> 不带返回的跳转指令:b mov r0, #0x12 mov ...
- 学 Win32 汇编[21] - 传送指令: MOV、LEA、XCHG、XLATB、XLAT、MOVZX、MOVSX
汇编指令的一般性要求: 1.两个操作数的尺寸必须一致; 2.操作数不能同为内存. MOV(Move): 最常用的数据传送指令 ;该指令不影响 EFlags ;指令格式: (其中的 r.m.i 分别表示 ...
- 学 Win32 汇编[33] - 探讨 Win32 汇编的模块化编程
我觉得所谓的模块化有两种: "假模块化" 和 "真模块化". 所谓 "假模块化" 就是通过 include 指令把 *.inc 或 *.as ...
- 学 Win32 汇编[34] - 宏汇编(1)
从接触 C 语言时, 我就不大喜欢宏; 但为了看懂别人的代码也不得不去了解. 宏可定义在源程序的任意位置, 但一般放在 .data 前面.有些简单的宏可以用 equ.textequ 或 = 来代替, ...
- 学 Win32 汇编[20]: 洞察标志寄存器
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 NT IOPL OF DF IF TF SF ZF AF PF CF 未使用 嵌套标志 I/O权限标志占2位 溢出标志 方向 ...
- Win32汇编环境配置
放假了,发现自己知识面窄,趁有时间就打算折腾下Win32汇编.其实在学校也上过汇编课,是基于dos的.那时老师不务正业,老跟我们讲政治经济文化,唯独不怎么讲课;再加上自己的问题,导致了dos汇编学得好 ...
- 汇编:jmp系列跳转指令总结
助记方法: J:跳转C: 进位位置位N: 否S: 符号位置位o: 溢出位置位Z: 零标志位置位E: 等于P:奇偶位置位A: AboveB: BelowL: Less (Little的比较级)G: Gr ...
- 汇编 sub减法指令 比较指令CMP JZ条件跳转指令
二.SUB指令 减法指令SUB (SUBtract) 格式: SUB A,B //A=A-B; 功能: 两个操作数的相减,即从A中减去B,其结果放在A中. 二.CMP 和JZ 指令 比较指令CMP 格 ...
随机推荐
- codevs 1086 栈 2003年NOIP全国联赛普及组
题目描述 Description 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). ...
- BZOJ4254 : Aerial Tramway
可以修建的缆车总数不超过n,于是可以先通过$O(n^2)$的枚举求出所有可以修建的缆车. 对于一个缆车,若它仅连接i和i+1,那么它不受k的限制,把这种缆车额外取出,从大到小排序. 剩下的缆车两两之间 ...
- JavaScript学习笔记[0]
JavaScript学习笔记[0] 使用的是廖雪峰JavaScript教程. 数据类型 Number 表示数字,不区分浮点整形. === 比较时不转化数据类型. == 反之. NaN与任何值都不想等, ...
- CENTOS下搭建SVN服务器(转)
1.安装svn yum install -y subversion 2.验证安装是否成功 svnserve --version 3.创建svn版本库 mkdir svn svnadmin create ...
- MongoDB中的变更通知
MongoDb 3.6中引入了一个新特性change stream,简单的来说就是变更通知,它提供了一个接口允许应用实时获取数据库变更,这个在ETL.数据同步.数据迁移.消息通知等方面非常有用. 使用 ...
- 一个button导致的慘案
Win8名存实亡,Win9未出已亡.Win10会如何呢? 微软于2014年北京时间10月1日凌晨在旧金山召开新品公布会,之前盛传所谓的"windows 9"变成了"Win ...
- iOS 创建单例的两种方法
创建一个单例很多办法.我先列举一个苹果官方文档中的写法. [cpp] view plaincopy static AccountManager *DefaultManager = nil; + (Ac ...
- 玩android 遇到的问题-2014年1月15日
1.变态的java工程,不是你点击run,它就run的. eclipse 默认设置,你选择哪个文件,点击run的时候,就运行哪个文件.够变态不.那么,怎么设置点击run的时候,就运行整个工程呢? 你 ...
- 【CentOS】centos如何修改你的主机名
转载地址:https://www.linuxidc.com/Linux/2014-11/109238.htm ============================================= ...
- 解决Oracle EM 乱码问题
原创 作者:fa042 时间:2012-11-17 16:50:34 199 0 Oracle 10g提供了一个基于Web的管理工具EM(Enterprise Manager),使用比较方便.不过,如 ...