zoukankan      html  css  js  c++  java
  • 学 Win32 汇编[21] 传送指令: MOV、LEA、XCHG、XLATB、XLAT、MOVZX、MOVSX


    汇编指令的一般性要求: 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

  • 相关阅读:
    使用SWFUpload进行多文件上传
    TSQL递归
    Silverlight之视频录制
    Silverlight之摄像头麦克风使用
    Silverlight之文件上传组件
    SQL FOR XML
    XAML开发入门之XAML核心语法
    Ajax技术三种实现方式之xmlhttp+httphandler篇 (三)
    Ext中超时设定 ext.ajax.timeout
    后台执行js先执行前端的JS函数,再执行后台函数的按钮实
  • 原文地址:https://www.cnblogs.com/del/p/1711611.html
Copyright © 2011-2022 走看看