汇编语言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

4.1 操作数类型
4.2 MOV指令
4.3 MOVZX和MOVSX指令
4.4 LAHF和SAHF指令
4.5 XCHG指令
4.6 直接偏移量操作数
4.7 汇编语言数据传送示例
4.8 加法和减法详解
4.9 OFFSET运算符
4.10 ALIGN伪指令
4.11 PTR运算符
4.12 TYPE运算符
4.13 LENGTHOF运算符
4.14 LABEL伪指令
4.15 间接寻址
4.16 JMP和LOOP指令
4.17 64位MOV指令
4.18 64位加法和减法

猜你喜欢

转载自blog.csdn.net/Javaxuxuexi/article/details/93401373