zoukankan      html  css  js  c++  java
  • 学 Win32 汇编[26] 加减指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP

    
    ;INC(Increment): 加一
    ;DEC(Decrement): 减一
    ;NEG(Negate):    求补(求反)
    ;ADD(Add):       加
    ;ADC(Add Carry): 带进位加
    ;SUB(Subtract):  减
    ;SBB(Subtract With Borrow): 带进位减
    ;CMP(Compare):   比较
    
    ;INC、DEC、NEG 的指令格式:
    ;INC r/m
    
    ;ADD、ADC、SUB、SBB、CMP 的指令格式:
    ;ADD r/m, r/m/i
    
    ;它们的结果影响 OF、SF、ZF、AF、PF、CF
    

    INC、DEC、NEG
    ; Test26_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
        mov eax, 6
        inc eax
        PrintDec eax ;7
        dec eax
        PrintDec eax ;6
        neg eax      ;NEG 就是加个负号
        PrintDec eax ;-6
        neg eax
        PrintDec eax ;6
        ret
    main endp
    end main
    

    ADD、ADC
    ; Test26_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
        mov eax, 5
        add eax, 1
        PrintDec eax ;6
        
        stc          ;CF=1
        mov eax, 5
        adc eax, 1   ;ADC 比 ADD 还要多加上 CF
        PrintDec eax ;7
        
        clc          ;CF=0
        mov eax, 5
        adc eax, 1
        PrintDec eax ;6
        ret
    main endp
    end main
    

    SUB、SBB
    ; Test26_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
        mov eax, 5
        sub eax, 1
        PrintDec eax ;4
        
        stc
        mov eax, 5
        sbb eax, 1   ;SBB 比 SUB 还要多减去 CF
        PrintDec eax ;3
        
        clc
        mov eax, 5
        sbb eax, 1
        PrintDec eax ;4
        ret
    main endp
    end main
    

    CMP
    
    ;CMP 隐含执行 SUB, 但并不改写操作数, 只是影响标志位;
    ;零标志位标识着两个数是否相等, 符号标志位标识着两个数的大小. 
    ;它后面经常跟着跳转指令
    
    ; Test26_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
        mov eax, 3
        cmp eax, 3
        lahf
        PrintHex ah ;46 - 01000110b(ZF=1 说明两个数相等)
        
        mov eax, 3
        cmp eax, 2
        lahf
        PrintHex ah ;02 - 00000010b(SF=0、ZF=0 说明前者 > 后者)
        
        mov eax, 3
        cmp eax, 4
        lahf
        PrintHex ah ;76 - 10010111b(SF=1、ZF=0 说明前者 < 后者)    
        ret
    main endp
    end main
    

    辨析 NEG 与 NOT
    ; Test26_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
    
    .data?
        val sword ?
    .code
    main proc
        ;求补运算: 取反+1
        mov val, 44
        PrintDec val  ;44
        PrintHex val  ;002C - 00000000 00101100b
        
        not val
        inc val
        PrintDec val  ;-44
        PrintHex val  ;FFD4 - 11111111 11010100b
        
        not val
        inc val
        PrintDec val  ;44
        PrintHex val  ;002C - 00000000 00101100b
        
        ;NEG 就相当于: 取反+1
        mov val, 44
        neg val
        PrintDec val  ;-44
        PrintHex val  ;FFD4 - 11111111 11010100b
        
        neg val
        PrintDec val  ;44
        PrintHex val  ;002C - 00000000 00101100b
        ret
    main endp
    end main
    

  • 相关阅读:
    semantic-ui 容器与栅格
    semantic-ui 分段
    semantic-ui 分割线
    semantic-ui 图片
    semantic-ui 标题
    semantic-ui 图标
    semantic-ui 按钮
    PHP实现无限级分类
    后端修改配置文件后,前端刷新页面--搭配鉴权
    上线新系统后,统计从旧系统切换到新系统的数据
  • 原文地址:https://www.cnblogs.com/del/p/1712825.html
Copyright © 2011-2022 走看看