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

学 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
分享到:
评论

相关推荐

    汇编指令大全 8086

    - INC/DEC:增加或减少一个寄存器或内存单元的值。 - SUB/SBB:进行减法运算,SBB带有借位。 - NEG:对操作数求补。 - MUL/IMUL:进行无符号/有符号乘法。 - DIV/IDIV:进行无符号/有符号除法。 3. 逻辑运算...

    x86汇编指令集大全(带注释).pdf

    X86汇编指令集是计算机体系结构中不可或缺的一部分,特别是在32位和64位的x86架构处理器中。这篇文档详细列举了汇编指令,并为每条指令提供了注释说明。以下知识点涵盖了文档中提及的关键指令及其功能。 一、数据...

    汇编指令词汇大全 全集

    - INC:数值加1。 - SUB:不带借位的减法。 - SBB:带借位的减法。 - DEC:数值减1。 - NEG:求补操作,使数值变成其二进制补码形式。 - CMP:比较两个操作数,修改标志寄存器状态。 - MUL/IMUL:执行无符号/...

    8086汇编指令大全

    - INC/DEC:加1/减1。 - SUB/SBB:减法,SBB带借位减法。 - NEG:求反(以0减之)。 - CMP:比较,仅修改标志位,不回送结果。 - DAA/DAS/AAS:ASCII码或十进制调整用于处理ASCII编码的数值。 - MUL/IMUL:无...

    汇编指令大全 汇编语言的学习

    汇编语言是一种低级编程语言,它直接对应于计算机硬件的指令集,对于理解计算机底层工作原理和编写高效的系统级程序至关重要。本文将详细介绍汇编指令大全中的数据传输、输入输出、目的地址传送、标志传送、算术运算...

    汇编语言指令以及伪指令速查手册

    《汇编语言指令以及伪指令速查手册》是学习和参考汇编语言编程的重要工具,它涵盖了各种基本的指令和伪指令,便于程序员快速查找和理解。以下是对这些指令的详细解释: 1. **通用数据传送指令**: - `MOV`:用于在...

    汇编指令大全

    - `INC`:数值加1。 - `DAA` 和 `AAA`:对加法结果进行ASCII码或十进制调整,用于处理字符数据。 - `SUB`:减法运算。 - `SBB`:带借位减法。 - `DEC`:数值减1。 - `NEG`:求相反数。 - `CMP`:比较操作,但...

    8088 汇编速查手册 .docx

    - `INC`:加1,如`INC AX`。 - `AAA`/`DAA`:ASCII码和十进制调整,用于处理ASCII字符串计算。 2. 减法指令: - `SUB`:普通减法,如`SUB DX, AX`。 - `SBB`:带借位减法,如`SBB BX, CX`。 - `DEC`:减1,如`...

    IBM-PC汇编语言指令集.doc

    - `INC`,`DEC`:增加或减少操作数的值。 - `NEG`:改变操作数的符号。 - `MUL`,`IMUL`:执行乘法,`IMUL`处理带符号整数。 - `DIV`,`IDIV`:执行除法,`IDIV`处理带符号整数。 - `CBW`,`CWD`:扩展字节或双...

    80868088汇编指令汇总

    - ADD、ADC、INC:加法操作,ADC带有进位。 - SUB、SBB、DEC:减法操作,SBB带有借位。 - NEG:求反,相当于用0减去操作数。 - CMP:比较操作,仅修改标志位,不返回结果。 - AAS、DAS、AAA、DAA:用于ASCII码...

    8080汇编手册.pdf

    - `INC`:增加1。 - `SUB`和`SBB`:减法和带借位的减法。 - `DEC`:减少1。 - `NEG`:求相反数。 - `CMP`:比较操作数,但不返回结果,只更新标志位。 - `AAS`和`DAS`:用于ASCII码调整的加法和减法。 - `MUL...

    汇编语言的指令全集.docx

    ### 汇编语言指令全集详解 #### 数据传送指令集 在计算机系统中,数据传送指令用于在不同的存储单元之间移动数据。这类指令对于构建高效的数据处理算法至关重要。 ##### MOV - **功能**:把源操作数送给目的操作数...

    单片机汇编语言指令集.doc

    - `INC`和`DEC`:增加或减少一个操作数的值。 - `NEG`:对操作数取反,改变其符号。 - `MUL`和`IMUL`:执行乘法操作,`IMUL`处理带符号整数。 - `DIV`和`IDIV`:执行除法操作,`IDIV`处理带符号整数。 3. 位...

    8088汇编[借鉴].pdf

    - `INC`:加1操作。 - `DAA`和`AAA`:对加法结果进行ASCII码或十进制调整。 - `SUB`和`SBB`:执行减法运算,`SBB`带有借位。 - `DEC`:减1操作。 - `NEG`:求反,相当于减去操作数自身。 - `CMP`:比较操作,...

Global site tag (gtag.js) - Google Analytics