zoukankan      html  css  js  c++  java
  • 学 Win32 汇编[21]

    汇编指令的一般性要求: 1、两个操作数的尺寸必须一致; 2、操作数不能同为内存.

    MOV(Move): 最常用的数据传送指令


    ;该指令不影响 EFlags
    ;指令格式: (其中的 r、m、i 分别表示: 寄存器、内存、立即数)
    MOV r/m, r/m/i

    
    ; Test21_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
    
    .data?
        val dd ?
    .code
    main proc
        mov val, 123
        mov edx, val
        mov eax, edx
        PrintDec eax ;123
        ret
    main endp
    end main


    LEA(Load Effective Address): 有效地址传送指令


    ;该指令不影响 EFlags
    ;指令格式:
    LEA r, m

    
    ; Test21_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
    
    .data
        szText db 'ABCDEFG', 0
    .code
    main proc
        lea eax, offset szText
        lea ebx, szText
        PrintHex eax ;00403000
        PrintHex ebx ;00403000
        ret
    main endp
    end main


    XCHG(Exchange): 交换指令


    ;该指令不影响 EFlags
    ;指令格式:
    XCHG r/m, r/m

    
    ; Test21_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
    
    .data
        val1 dd 111
        val2 dd 222
    .code
    main proc
        mov eax, val1
        xchg eax, val2
        mov val1, eax
        PrintDec val1 ;222
        PrintDec val2 ;111
        ret
    main endp
    end main


    XLATB(Translate Byte)、XLAT(Translate): 换码指令


    ;XLATB 可简化为 XLAT
    ;该指令不影响 EFlags
    
    ;XLAT 无参数, 操作和 EBX、AL 相关
    ;执行 XLAT 前, 先把源地址放入 EBX, 把字节序号放入 AL
    ;执行后, 指定字节被读入 AL

    
    ; Test21_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
    
    .data
        szText db 'ABCDEFG', 0
    .code
    main proc
        lea ebx, szText
        mov al, 1
        xlat
        PrintHex al ;42 - 这是 'B' 的 ASSII 编码
        
        mov al, 2
        xlatb
        PrintHex al ;43 - 这是 'C' 的 ASSII 编码
        ret
    main endp
    end main


    MOVZX(Move With Zero-Extend): 零扩展传送


    ;该指令不影响 EFlags
    ;指令格式:
    MOVZX r32, r16/m16
    MOVZX r16, r8/m8

    
    ;示例同 MOVSX


    MOVSX(Move With Sign-Extend): 符号扩展传送


    ;该指令不影响 EFlags
    ;指令格式:
    MOVZX r32, r16/m16
    MOVZX r16, r8/m8
    
    ;MOVZX 和 MOVSX 的区别是:
    ;1、MOVZX 会将目标寄存器中高出的位补 0
    ;2、如果源操作数的最高位是 1, MOVSX 会将目标寄存器中高出的位补 1; 反之补 0

    
    ; Test21_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
        bVal   db 90h
        dwVal1 dw 7FFFh
        dwVal2 dw 8000h
    .code
    main proc
        movzx eax, dwVal1
        movsx edx, dwVal1
        PrintHex eax ;00007FFF
        PrintHex edx ;00007FFF
        
        movzx eax, dwVal2
        movsx edx, dwVal2
        PrintHex eax ;00008000
        PrintHex edx ;FFFF8000
        
        mov cl, bVal
        movzx ax, cl
        movsx dx, cl
        PrintHex ax  ;0090
        PrintHex dx  ;FF90
        ret
    main endp
    end main
    不追热点、不关时政、不要喧哗、不惹纷争、做自己喜欢的事,过宁静的生活。
  • 相关阅读:
    C#获取配置文件中的文件数据
    wpf MVVMLight的DataGrid绑定数据
    扫码支付自动跳转,可以使用第三方网站实现扫码二维码付款然后跳转到想要的页面展示想要内容或者是解压码或者是某个资源的下载页呢 具体步骤(我以你上传一个压缩包到某种网盘或者可以下载的地址等让人付费解压为例):
    oracle数据库如何创建用户以及分配权限
    ORA-12547: TNS: 丢失连接
    springmvc中applicationapplicationContext头部代码
    No mapping found for HTTP request with URI
    在Navicat新建用户
    myeclipse 项目引入 com.sun.image.codec.jpeg 的api报错解决方法
    java.lang.NullPointerException at org.apache.jsp.**_jsp.jspInit(**_jsp.java)tomcat启动异常解决方法
  • 原文地址:https://www.cnblogs.com/dsli/p/7221503.html
Copyright © 2011-2022 走看看