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

学 Win32 汇编[25] - 符号扩展指令: CBW、CWDE、CDQ、CWD

 
阅读更多

CBW、CWDE、CDQ、CWD: 扩展指令



;CBW(Convert Byte to Word):             将 AL 扩展为 AX
;CWDE(Convert Word to Extended Double): 将 AX 扩展为 EAX
;CDQ(Convert Doubleword to Quadword):   将 EAX 扩展为 64 位数 EDX:EAX
;CWD(Convert Word to Doubleword):       将 AX 扩展为 DX:AX

;它们都是用符号位填充多出的空间

;它们对 EFLAGS 无影响, 也无参数

; Test25_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 ;CBW   mov al, 7Fh   cbw   PrintHex ax ;007F     mov al, 80h   cbw   PrintHex ax ;FF80   ;CWDE   mov ax, 7FFFh   cwde   PrintHex eax ;00007FFF     mov ax, 8000h   cwde   PrintHex eax ;FFFF8000   ;CDQ   mov eax, 7FFFFFFFh   cdq   PrintHex edx ;00000000   PrintHex eax ;7FFFFFFF     mov eax, 80000000h   cdq   PrintHex edx ;FFFFFFFF   PrintHex eax ;80000000   ;CWD   mov ax, 7FFFh   cwd   PrintHex dx ;0000   PrintHex ax ;7FFF     mov ax, 8000h   cwd   PrintHex dx ;FFFF   PrintHex ax ;8000   ret main endp end main


符号扩展指令的本质



;一个正数(无符号)或负数(有符号)在扩展储存空间时, 使用这些指令可保证原值不变

; Test25_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 al, 68
    cbw
    PrintHex ax ;0044
    PrintDec ax ;68
    
    mov al, -68
    cbw
    PrintHex ax ;FFBC
    PrintDec ax ;-68
    ret
main endp
end main


CBW、CWDE 和 MOVSX 的关系



; Test25_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
    ;CBW 等价于 movsx ax, al
    mov al, 80h
    cbw
    PrintHex ax ;FF80
    
    mov al, 80h
    movsx ax, al
    PrintHex ax ;FF80
    
    ;CWDE 等价于 movsx eax, ax
    mov ax, 8000h
    cwde
    PrintHex eax ;FFFF8000
    
    mov ax, 8000h
    movsx eax, ax
    PrintHex eax ;FFFF8000
    ret
main endp
end main
分享到:
评论

相关推荐

    英特尔汇编指令集.doc

    - `ESC`:逃逸指令,用于扩展指令集。 - `HLT`:停止CPU。 - `IDIV`:有符号整数除法。 - `IMUL`:有符号乘法。 - `IN`:从端口输入字节或字。 - `INC`:递增。 - `INS`:从端口输入字符串(80188+)。 - `INT`:...

    汇编指令手册介绍.doc

    - CBW, CWD, CWDE, CDQ:用于数据类型转换,如字节扩展到字,字扩展到双字等,以适应不同的运算需求。 汇编指令手册不仅提供了指令的基本功能,还涵盖了指令的使用场景和效果,对于编程、调试和优化程序都具有重要...

    8086 汇编语言六大编程指令集

    - **CWDE指令**:用于将16位寄存器扩展为32位寄存器。 - `CWDE`:将AX中的值扩展为32位,EAX中的高16位被设置为AX的符号位。 - **CDQ指令**:用于将32位寄存器扩展为64位寄存器。 - `CDQ`:将EAX中的值扩展为64位...

    汇编语言语句表只是内容

    - `CBW/CWD/CWDE/CDQ`:字节/字到字/字到双字的符号扩展。 三、逻辑运算指令 - `AND`:按位与运算,用于设置或清除位。 - `OR`:按位或运算,用于设置位。 - `XOR`:按位异或运算,用于翻转位或测试位。 - `NOT`:...

    汇编指令大全

    - `CBW`, `CWD`, `CWDE`, `CDQ`:这些指令用于将低阶寄存器中的数值扩展到高阶寄存器,保持符号不变。 综上所述,汇编语言中的数据传输和算术运算指令构成了程序设计的基础,它们使得开发者能够精确地控制硬件资源...

    Arm汇编指令的英文解释

    - `CBW`, `CWD`, `CWDE`, `CDQ`:在x86中,用于扩展字节、字到双字或四字,但不适用于ARM。 6. **逻辑运算指令** - `AND`:按位与,对两个操作数的每个位进行逻辑与操作。 - `OR`:按位或,对两个操作数的每个位...

    汇编指令速查手册-VC爱好者.doc

    CDQ指令:双字扩展。 逻辑运算指令: AND指令:与运算。 OR指令:或运算。 XOR指令:异或运算。 NOT指令:取反。 TEST指令:测试。 SHL指令:逻辑左移。 SAL指令:算术左移。 SHR指令:逻辑右移。 SAR指令:算术...

    汇编指令大全。。。。。。。。

    **5.6 AAD/CBW/CWD/CWDE/CDQ指令** - **功能**: - `AAD`:ASCII调整指令,用于ASCII码的除法运算。 - `CBW`:将AL的值扩展到AH中。 - `CWD`:将AX的值扩展到DX:AX中。 - `CWDE`:将AX的值扩展到EAX中。 - `...

    汇编语言指令集 微型计算机原理与接口技术

    * CDQ指令:双字扩展 六、逻辑运算指令 逻辑运算指令用于进行逻辑运算。常见的逻辑运算指令包括: * AND指令:与运算 * OR指令:或运算 * XOR指令:异或运算 * NOT指令:取反 * TEST指令:测试 * SHL指令:逻辑...

    Intel 汇编指令集

    - **CWDE - Convert Word to Extended Doubleword (386+)**: 字转换为扩展双字指令。 - **DAA - Decimal Adjust for Addition**: 十进制加法调整指令。 - **DAS - Decimal Adjust for Subtraction**: 十进制减法调整...

    DSP C6000系列 常用汇编指令大全

    DSP C6000系列常用汇编指令大全是面向DSP C6000系列芯片的汇编指令大全,旨在供大家在编写汇编时进行参考,特别是在CCS中编C与汇编混合编程时。该文档包含了DSP C6000系列芯片的全部汇编指令,涵盖了数据传输、输入...

    汇编语言程序指令大全

    汇编语言程序指令大全 汇编语言是低级programming语言,它直接使用机器语言指令对计算机进行控制和操作。该语言程序指令大全涵盖了数据传输指令、算术运算指令、逻辑运算指令、转移指令等多种类型的指令。 一、...

    汇编指令及说明举例

    14. **CWDE**:无符号字扩展为双字指令,用于将AX寄存器中的值扩展到EAX。 - 示例:`CWDE` AX的高位被扩展为0,结果存储在EAX中。 15. **CDQ**:双字扩展为四字指令,用于将EAX寄存器中的值扩展到EDX:EAX。 - ...

    汇编指令大全(有注释)

    - **CBW/CWD/CWDE/CDQ**:扩展操作数的符号位,用于保持数值的有效性。 #### 逻辑运算指令 **逻辑运算指令**提供基本的逻辑运算功能,如与、或、非等。 - **AND/OR/XOR**:分别执行按位与、按位或和按位异或操作...

    386汇编指令详解

    - **AAD/CBW/CWD/CWDE/CDQ**:除法的ASCII码调整指令、字到字节的符号扩展、字到双字的符号扩展等。 #### 逻辑运算指令 逻辑运算指令主要用于执行按位逻辑操作,包括与、或、异或等。 - **AND/OR/XOR/NOT**:按位...

    汇编指令英文全称

    CBW 指令用于将字节扩展至字,CWD 指令用于将字扩展至双字,CWDE 指令用于将字扩展至双字并将符号扩展至 EAX 寄存器,CDQ 指令用于将双字扩展至四字节。 三、逻辑运算指令: AND 指令用于实现与运算,OR 指令用于...

    INTEL 汇编指令集

    ### INTEL 汇编指令集 #### Intel 8086 Family Architecture Intel 8086架构是Intel在1978年推出的一种16位微处理器架构,为后续许多型号的微处理器(如8088、80186、80286等)奠定了基础。该架构定义了一系列重要...

    80x86指令系统.txt80x86指令系统.txt

    CBW/CWD/CWDE/CDQ指令:补码转换 用于将无符号或有符号整数转换为更长的宽度。 - **CBW**:将8位寄存器扩展为16位寄存器。 - **CWD/CWDE**:将16位寄存器扩展为32位寄存器。 - **CDQ**:将32位寄存器扩展为64位...

Global site tag (gtag.js) - Google Analytics