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

学 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
分享到:
评论

相关推荐

    x86汇编指令集大全(带注释).pdf

    X86汇编指令集是计算机体系结构中不可或缺的一部分,特别是在32位和64位的x86架构处理器中。这篇文档详细列举了汇编指令,并为每条指令提供了注释说明。以下知识点涵盖了文档中提及的关键指令及其功能。 一、数据...

    汇编指令大全--指令集

    本篇文章将深入解析汇编指令集中的主要类别,包括数据传输指令、输入输出端口传送指令、目的地址传送指令以及算术运算指令。 1. 数据传输指令: - MOV:用于在寄存器或内存之间传输数据,如`MOV AX, BX`将BX的内容...

    汇编必备帮助文档(IA-32指令集)(8086汇编帮助手册)chm

    6. 存储器操作指令:MOV、LEA用于在寄存器和内存之间传输数据,PUSH、POP用于栈操作,常用于函数调用时保存和恢复现场。 7. 处理器控制指令:如INT、CLI、STI用于中断处理,CPU状态的设置。 8086汇编帮助手册则...

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

    这个汇编指令速查手册涵盖了数据传输指令、输入输出端口传送指令、目的地址传送指令、标志传送指令、算术运算指令、逻辑运算指令和串指令等多方面的内容,为编程人员提供了一个全面的参考手册。

    8086(8088)指令及部分伪指令

    ### 8086(8088)指令及部分伪指令详解 #### 指令概述 8086/8088处理器的指令集主要包括数据传送指令、算术运算指令等几大类。这些指令是进行编程的基础,掌握它们能够帮助程序员有效地控制处理器执行各种任务。 ##...

    8086汇编指令大全

    本文将详细介绍8086汇编指令,这些指令主要分为数据传输、输入输出、目的地址传送、标志传送、算术运算、逻辑运算和串指令等类别。 1. 数据传输指令: - MOV:用于在寄存器和内存之间,或者两个寄存器之间传递数据...

    8086 汇编指令速查手册.doc

    本文档提供了8086汇编指令的速查手册,涵盖了数据传输指令、输入输出端口传送指令、目的地址传送指令、标志传送指令和算术运算指令等多个方面。 数据传输指令: 1. MOV指令:传送字或字节。 2. MOVSX指令:先符号...

    8088 汇编速查手册

    8088汇编语言是早期个人计算机编程中常用的一种低级编程语言,它直接对应于8088微处理器的指令集。8088汇编速查手册提供了汇编语言指令的快速参考,方便程序员在编写代码时查阅。以下是对8088汇编指令的详细解释: ...

    部分8086汇编指令集

    这些指令可以分为四大类:数据传输指令、输入输出端口传送指令、目的地址传送指令和标志传送指令。 数据传输指令: * MOV:传送字或字节 * MOVSX:先符号扩展,再传送 * MOVZX:先零扩展,再传送 * PUSH:把字压入...

    常用汇编指令(常用汇编指令)

    汇编语言是基于 CPU 指令集的低级编程语言,它使用符号表示来表示机器语言指令,从而使得编程更加灵活和高效。下面是常用的汇编指令分类: 1. 通用数据传送指令 MOV:传送字或字节 MOVSX:先符号扩展,再传送 ...

    汇编指令手册介绍.doc

    - MOVSX和MOVZX:这两个指令用于扩展字节或字的数据宽度,MOVSX进行符号扩展,而MOVZX进行零扩展。 - PUSH和POP:分别用于将数据压入和弹出堆栈,常用于保存和恢复寄存器状态。 - PUSHA和POPA:一次性将所有通用...

    汇编指令啊

    【汇编指令详解】 汇编语言是计算机编程的基础,它是一种低级语言,直接对应机器指令,用于控制计算机硬件。本文将详细介绍其中的一些关键指令,包括数据传输、输入输出、地址传送以及算术和逻辑运算。 1. 数据...

    80868088汇编指令汇总

    汇编指令集包含了多种指令,这些指令用于数据传输、输入输出、算术运算、逻辑运算以及串操作等。下面将详细阐述这些指令。 1. 数据传输指令: - MOV:用于在寄存器和存储器之间,或者寄存器和寄存器之间传输数据。...

    汇编指令大全 8086

    《8086汇编指令大全详解》 在计算机编程领域,汇编语言是一种低级编程语言,它直接对应于机器指令,对于理解和控制计算机硬件的运作有着至关重要的作用。8086处理器是Intel公司设计的一种16位微处理器,它的指令集...

    汇编语言基础--8086汇编指令[整理].pdf

    文档主要介绍和整理了8086汇编语言中的各种指令和操作,包括数据传送指令、算术指令、逻辑指令、程序控制指令等。这些指令是8086 CPU执行程序的基础。 在描述中提到,“汇编语言基础--8086汇编指令[整理]”,强调了...

    汇编指令大全 汇编语言的学习

    本文将详细介绍汇编指令大全中的数据传输、输入输出、目的地址传送、标志传送、算术运算和逻辑运算等指令。 1. 数据传输指令: - `MOV`:用于在寄存器和存储器之间、寄存器和寄存器之间、存储器和存储器之间传输...

Global site tag (gtag.js) - Google Analytics