zoukankan      html  css  js  c++  java
  • 汇编跳转指令

    转自:https://blog.csdn.net/weixin_32589873/article/details/78207020


    跳转指令分三类:
    一、无条件跳转: 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 ;奇偶位不等则跳转



    跳转相关的标志位:
    11109876543210
    OFDFIFTFSFZF 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



  • 相关阅读:
    python协程爬取某网站的老赖数据
    python异步回调顺序?是否加锁?
    go语言循环变量
    使用memory_profiler异常
    安装python性能检测工具line_profiler
    等我!
    pytorch代码跟着写
    Python异常类型总结
    Python项目代码阅读【不断更新】
    夏令营体会
  • 原文地址:https://www.cnblogs.com/yzmy/p/14192160.html
Copyright © 2011-2022 走看看