学 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, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.data?    val dd ?.codemain proc    mov val, 123    mov edx, val    mov eax, edx    PrintDec eax ;123    retmain endpend main

LEA(Load Effective Address): 有效地址传送指令
;该指令不影响 EFlags;指令格式:LEA r, m; Test21_2.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.data    szText db 'ABCDEFG', 0.codemain proc    lea eax, offset szText    lea ebx, szText    PrintHex eax ;00403000    PrintHex ebx ;00403000    retmain endpend main

XCHG(Exchange): 交换指令
;该指令不影响 EFlags;指令格式:XCHG r/m, r/m; Test21_3.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.data    val1 dd 111    val2 dd 222.codemain proc    mov eax, val1    xchg eax, val2    mov val1, eax    PrintDec val1 ;222    PrintDec val2 ;111    retmain endpend main

XLATB(Translate Byte)、XLAT(Translate): 换码指令
;XLATB 可简化为 XLAT;该指令不影响 EFlags;XLAT 无参数, 操作和 EBX、AL 相关;执行 XLAT 前, 先把源地址放入 EBX, 把字节序号放入 AL;执行后, 指定字节被读入 AL; Test21_4.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.data    szText db 'ABCDEFG', 0.codemain proc    lea ebx, szText    mov al, 1    xlat    PrintHex al ;42 - 这是 'B' 的 ASSII 编码        mov al, 2    xlatb    PrintHex al ;43 - 这是 'C' 的 ASSII 编码    retmain endpend main

MOVZX(Move With Zero-Extend): 零扩展传送
;该指令不影响 EFlags;指令格式:MOVZX r32, r16/m16MOVZX r16, r8/m8;示例同 MOVSX

MOVSX(Move With Sign-Extend): 符号扩展传送
;该指令不影响 EFlags;指令格式:MOVZX r32, r16/m16MOVZX r16, r8/m8;MOVZX 和 MOVSX 的区别是:;1、MOVZX 会将目标寄存器中高出的位补 0;2、如果源操作数的最高位是 1, MOVSX 会将目标寄存器中高出的位补 1; 反之补 0; Test21_5.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.data    bVal   db 90h    dwVal1 dw 7FFFh    dwVal2 dw 8000h.codemain 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    retmain endpend main

posted on 2010-04-14 10:19 万一 阅读(5891) 评论(2) 编辑 收藏©著作权归作者所有:来自51CTO博客作者JLee79的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 学 Win32 汇编[20]: 洞察标志寄存器
  2. jQuery中的$.ajax方法,以及基本的vue指令操作
  3. 深入理解计算机系统(4.1)------Y86指令集体系结构
  4. 冷月手撕408之操作系统(4)-操作系统的运行环境
  5. 0415作业-Vue常用指令及方法
  6. Git 工具和指令集合
  7. 【Vue框架学习】Vue常用指令、事件修饰符、按键修饰符、计算属性
  8. 第2部分- Linux ARM汇编ARM指令集变化和优势
  9. 第11部分- Linux ARM汇编 执行分支

随机推荐

  1. Google 收购 Android 十周年 全面解读And
  2. Android从启动到程序运行发生的事情
  3. Android Wear应用程序开发的简要说明,对每
  4. android 热修复之类加载机制
  5. 解读Android LOG机制的实现:c/c++域使用LO
  6. Android音频口数据通信开发;通过静态分析
  7. android json访问php webservice
  8. Android中AsyncTask的简单用法 .
  9. android app 缓存 ---- android 文件缓存
  10. 如何在Android上显示wmf的文件