汇编语言MOV指令:将源操作数复制到目的操作数

  • 内容
  • 评论
  • 相关

MOV 指令将源操作数复制到目的操作数。作为数据传送(data transfer)指令,它几乎用在所有程序中。在它的基本格式中,第一个操作数是目的操作数,第二个操作数是源操作数:

MOV destination,source

其中,目的操作数的内容会发生改变,而源操作数不会改变。这种数据从右到左的移动与 C++ 或 Java 中的赋值语句相似:

dest = source;

在几乎所有的汇编语言指令中,左边的操作数是目标操作数,而右边的操作数是源操作数。只要按照如下原则,MOV 指令使用操作数是非常灵活的。

  • 两个操作数必须是同样的大小。
  • 两个操作数不能同时为内存操作数。
  • 指令指针寄存器(IP、EIP 或 RIP)不能作为目标操作数。

下面是 MOV 指令的标准格式:

MOV reg, reg
MOV mem, reg
MOV reg, mem
MOV mem, imm
MOV reg, imm

内存到内存

单条 MOV 指令不能用于直接将数据从一个内存位置传送到另一个内存位置。相反,在将源操作数的值赋给内存操作数之前,必须先将该数值传送给一个寄存器:

.data
var1 WORD ?
var2 WORD ?
.code
mov ax,var1
mov var2,ax

提示:在将整型常数复制到一个变量或寄存器时,必须考虑该常量需要的最少字节数。

覆盖值

下述代码示例演示了怎样通过使用不同大小的数据来修改同一个 32 位寄存器。当 oneWord 字传送到 AX 时,它就覆盖了 AL 中已有的值。当 oneDword 传送到 EAX 时,它就覆盖了 AX 的值。最后,当 0 被传送到 AX 时,它就覆盖了 EAX 的低半部分。

.data
oneByte BYTE 78h
oneWord WORD 1234h
oneDword DWORD 12345678h
.code
mov eax,0                                 ;EAX=OOOOOOOOh
mov al,oneByte                            ;EAX=00000078h
mov ax,oneWord                            ;EAX=00001234h
mov eax,oneDword                          ;EAX=12345678h
mov ax, 0                                 ;EAX=12340000h

本文标题:汇编语言MOV指令:将源操作数复制到目的操作数

本文地址:https://www.hosteonscn.com/5308.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注