博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等...
阅读量:4612 次
发布时间:2019-06-09

本文共 4088 字,大约阅读时间需要 13 分钟。

跳转指令分三类:

一、无条件跳转: 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, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc    PrintText '1'    jmp @F    PrintText '2'    PrintText '3'@@: PrintText '4'    retmain endpend main;测试结果应该是:;1;4;以下都应该是这样.

JE 测试


; Test28_2.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc    PrintText '1'    mov eax, 123    cmp eax, 123    je @F    PrintText '2'    PrintText '3'@@: PrintText '4'    retmain endpend main

JZ 测试


; Test28_3.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc    PrintText '1'    xor eax, eax    jz @F    PrintText '2'    PrintText '3'@@: PrintText '4'    retmain endpend main

JS 测试


; Test28_4.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc    PrintText '1'    xor eax, eax    dec eax    js @F    PrintText '2'    PrintText '3'@@: PrintText '4'    retmain endpend main

JC 测试


; Test28_5.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc    PrintText '1'    mov al, 0FFh    add al, 1    jc @F    PrintText '2'    PrintText '3'@@: PrintText '4'    retmain endpend main

JO 测试


; Test28_6.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc    PrintText '1'    mov al, -128    sub al, 1    jo @F    PrintText '2'    PrintText '3'@@: PrintText '4'    retmain endpend main

JA 测试


; Test28_7.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc    PrintText '1'    mov eax, 22    cmp eax, 11    ja @F    PrintText '2'    PrintText '3'@@: PrintText '4'    retmain endpend main

JG 测试


; Test28_8.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc    PrintText '1'    mov eax, 1    cmp eax, -1    jg @F    PrintText '2'    PrintText '3'@@: PrintText '4'    retmain endpend main

JP 测试


; Test28_9.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc    PrintText '1'    mov al, 00001110b    inc al    jp @F    PrintText '2'    PrintText '3'@@: PrintText '4'    retmain endpend main

JECXZ 测试


; Test28_10.asm;.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain proc    PrintText '1'    xor ecx, ecx    jecxz @F    PrintText '2'    PrintText '3'@@: PrintText '4'    retmain endpend main

 

转载于:https://www.cnblogs.com/qanholas/p/3534020.html

你可能感兴趣的文章
python random
查看>>
esp32-智能语音-cli(调试交互命令)
查看>>
netty与MQ使用心得
查看>>
关于dl dt dd 文字过长换行在移动端显示对齐的探讨总结
查看>>
swoolefy PHP的异步、并行、高性能网络通信引擎内置了Http/WebSocket服务器端/客户端...
查看>>
Python学习笔记
查看>>
unshift()与shift()
查看>>
使用 NPOI 、aspose实现execl模板公式计算
查看>>
行为型模式:中介者模式
查看>>
How to Notify Command to evaluate in mvvmlight
查看>>
33. Search in Rotated Sorted Array
查看>>
461. Hamming Distance
查看>>
Python垃圾回收机制详解
查看>>
jquery 编程的最佳实践
查看>>
MeetMe
查看>>
IP报文格式及各字段意义
查看>>
(转载)rabbitmq与springboot的安装与集成
查看>>
C2. Power Transmission (Hard Edition)(线段相交)
查看>>
STM32F0使用LL库实现SHT70通讯
查看>>
Atitit. Xss 漏洞的原理and应用xss木马
查看>>