`
zzc1684
  • 浏览: 1229439 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

跳转指令分三类:
一、无条件跳转: 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, 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
分享到:
评论

相关推荐

    汇编必备帮助文档(IA-32指令集)(8086汇编帮助手册)chm

    这个“汇编必备帮助文档”包含了全面的IA-32指令集和8086汇编帮助信息,是学习和开发汇编程序的重要参考资料。 IA-32指令集是Intel公司为x86系列处理器设计的一套复杂指令集,包括了从8086到 Pentium 4等处理器的...

    汇编指令查询器,汇编指令搜索器

    - 查找指令:用户可以通过关键词搜索特定的汇编指令,如`MOV`(数据传输)、`ADD`(加法)、`JMP`(无条件跳转)等。 - 参数解释:查询器会解释指令的操作数类型和数量,以及它们在指令中的作用。 - 示例代码:...

    关于 汇编跳转指令

    关于汇编跳转指令 汇编语言中,跳转指令是控制程序流程的重要组成部分。跳转指令可以根据条件码标志位的状态来决定程序的执行方向。本文将详细讲解汇编语言中的跳转指令,包括状态寄存器PSW、直接标志转移、间接...

    8080汇编手册_全

    从给定的文件信息来看,这是一份关于8080微处理器的汇编语言指令集的手册。8080是由英特尔公司在1972年推出的8位微处理器,是计算机历史上的一个重要里程碑,对后来的微处理器设计产生了深远的影响。这份手册详细列...

    汇编语言程序设计基础

    - 标签与跳转指令:用于控制程序流程,如JMP(无条件跳转)、JE(条件跳转,如果等于则跳转)等。 3. 数据处理指令 - 加法、减法:ADD、SUB,用于执行算术运算。 - 乘法、除法:MUL、DIV,处理较大的数值运算。 ...

    汇编语言基础--8086汇编指令[整理].pdf

    - JXX指令(如JE/JZ,JNE/JNZ等)用于条件跳转。 字符串操作指令: - MOVS指令用于移动字符串。 - CMPS指令用于比较字符串。 - SCAS指令用于扫描字符串。 - LODS指令用于加载字符串。 - STOS指令用于存储字符串。 ...

    汇编指令词汇大全 全集

    - JZ/JNZ/JS/JNS/JO/JNO/JP/JNP/JB/JNB/JBE/JNBE/JL/JNL/JLE/JNLE:条件转移指令,根据标志寄存器状态决定是否转移。 - LOOP/LOOPZ/LOOPE/LOOPNZ/LOOPNE:循环控制指令,根据CX或ECX寄存器和条件判断是否继续循环...

    汇编语言教程

    - 分支与跳转:无条件跳转(如JMP)和条件分支(如JE、JG等)。 6. 输入/输出 - I/O指令:如IN和OUT,用于与硬件设备交互。 - BIOS中断:如INT 10H用于屏幕输出,INT 21H用于磁盘I/O。 7. 实践应用 - 开发环境...

    汇编指令大全 8086

    - JZ/JNZ/JC/JNC等:条件跳转,根据标志位决定是否执行。 - LOOP/LOOPZ/LOOPNZ:循环指令,根据CX计数器或条件执行。 - CALL/RET:子程序调用和返回。 - CMP/SCAS/CMPS:比较操作,用于比较内存或寄存器值。 7....

    8088指令集-汇编语言之入门

    - `JE` / `JZ`:相等/零时跳转。 - `JNE` / `JNZ`:不等/非零时跳转。 - `JG` / `JNLE`:大于时跳转。 - `JL` / `JNGE`:小于时跳转。 - `JGE` / `JNL`:大于等于时跳转。 - `JLE` / `JNG`:小于等于时跳转。 - `JC`...

    汇编语言--x86汇编指令集大全.zip

    2. **转移指令**:包括条件转移指令(如JNE、JE、JG、JL)和无条件转移指令(如JMP、CALL、RET)。它们控制程序流程,根据特定条件或无条件地改变指令执行的顺序。 3. **处理器控制指令**:如INT、HLT、CLI、STI等...

    MCS-54指令集-单片机

    - 控制转移指令:包括跳转(JMP)、条件跳转(JZ、JNE等)、子程序调用(LCALL)和返回(RET)等,用于程序流程控制。 - 位操作指令:对单个位进行操作,如SETB、CLR、RRC、SWAP等。 - 增量/减量指令:如INC、DEC...

    汇编语言第三版 王爽

    - 循环与条件判断:通过JZ、JNZ等跳转指令实现循环和条件分支。 - 异常处理:学习如何在程序中捕获和处理错误。 6. 链接与加载: - 链接:将多个汇编源文件合并成一个可执行文件。 - 装载:将可执行文件从磁盘...

    汇编复习题及答案

    汇编语言是计算机科学中的一个重要领域,它是一种低级编程语言,直接对应于机器指令集。汇编语言的复习和学习对于理解计算机底层工作原理、优化代码性能以及进行硬件编程等具有重要意义。以下是对"汇编复习题及答案...

    汇编语言 汇编指令速查手册

    - `JZ`, `JNZ`, `JS`, `JNS`, `JO`, `JNO`, `JP`, `JNP`, `JB`, `JNB`, `JBE`, `JNBE`, `JL`, `JNL`, `JLE`, `JNLE`:条件跳转指令,根据标志位决定是否转移。 - `LOOP`:循环指令,根据 CX 或 ECX 寄存器的值决定...

    assembly 汇编 王爽 jmp转移指令总结 思维导图

    5. **条件跳转**:虽然不是直接的 jmp 指令,但与之相关的如 `je/jne/jz/jnz/jg/jl/jge/jle` 等条件跳转指令,根据特定的条件(如零标志、符号标志等)来决定是否执行跳转。这些指令在编写条件分支时非常有用。 ...

    汇编语言 指令大全 (详解版)

    - `JE`/`JZ`:相等/零时跳转。 - `JNE`/`JNZ`:不等/非零时跳转。 - `JG`:大于时跳转。 - `JGE`:大于等于时跳转。 - `JL`:小于时跳转。 - `JLE`:小于等于时跳转。 6. **输入输出指令**: - `IN`:从I/O...

    51汇编转移指令AJMP SJMP LJMP JMP的区别

    ### 51汇编转移指令AJMP SJMP LJMP JMP的区别 #### 一、概述 在MCS-51系列单片机的汇编语言编程中,转移指令是非常重要的组成部分,用于实现程序流程的控制。根据不同的转移需求,51单片机提供了多种类型的转移...

    汇编(王爽)ppt课件

    《汇编语言》是王爽教授的一本经典教材,它深入浅出地介绍了汇编语言的基础知识和实际应用。此PPT课件是基于该教材的辅助教学资料,旨在帮助学习者更直观、更深入地理解和掌握汇编语言。下面将详细阐述其中涉及的...

    常用8086汇编指令(彩色版)+汇编指令查询器

    - `JG/JL/JGE/JLE`: 根据符号标志SF和不等标志OF判断执行条件跳转。 - `CALL`: 调用子程序,保存返回地址到堆栈,然后跳转到指定地址。 - `RET`: 从子程序返回,从堆栈恢复程序计数器PC的值。 5. 条件测试指令:...

Global site tag (gtag.js) - Google Analytics