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

    注:本文转载网络,原文链接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  ;奇偶位不等则跳转


    跳转相关的标志位:

    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

  • 相关阅读:
    android 多线程
    Uva 10881 Piotr’s Ants 蚂蚁
    LA 3708 Graveyard 墓地雕塑 NEERC 2006
    UVa 11300 Spreading the Wealth 分金币
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    HDU 4162 Shape Number
    HDU 1869 六度分离
    HDU 1041 Computer Transformation
    利用可变参数函数清空多个数组
  • 原文地址:https://www.cnblogs.com/nsxz85/p/3957408.html
Copyright © 2011-2022 走看看