zoukankan      html  css  js  c++  java
  • 学 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
    

  • 相关阅读:
    Django model转字典的几种方法
    使用Nagios打造专业的业务状态监控
    Etcd安全配置之Basic Auth认证
    ELK日志系统之通用应用程序日志接入方案
    ELK日志系统之使用Rsyslog快速方便的收集Nginx日志
    中小团队落地配置中心详解
    ELK构建MySQL慢日志收集平台详解
    Django model select的各种用法详解
    Python:每日一题003
    Python:每日一题002
  • 原文地址:https://www.cnblogs.com/del/p/1712702.html
Copyright © 2011-2022 走看看