MOV 指令是汇编语言中最基础的数据传输指令,其核心功能是将源操作数的值复制到目标操作数中,且源操作数的内容保持不变。以下是关于 MOV 指令的综合说明:
一、基本功能与语法
-
功能
MOV 指令用于实现以下类型的数据传输:
• 立即数 → 寄存器/内存
• 寄存器 ↔ 寄存器
• 寄存器 ↔ 内存
• 段寄存器 ↔ 寄存器(部分场景) -
语法
MOV destination, source ; 将 source 的值复制到 destination
例如:
•MOV EAX, #050aH
:将十六进制数 050a 存入 EAX 寄存器
•MOV [2000H], 02H
:将立即数 02H 存入内存地址 2000H
二、操作数类型与分类
- 操作数类型
• 源操作数:立即数、寄存器、内存地址
• 目标操作数:寄存器、内存地址、累加器(如单片机的 A 寄存器)
三、OD调试
#include <windows.h>
#include <stdio.h>
int main()
{
MessageBoxA(0, NULL, NULL, MB_OK);
int a = 0x050A; // 将立即数0x050A赋值给变量a(可能被优化到寄存器)
__asm
{
mov eax, 0x778899
}
u_int src_value = 0x1234;
u_int dst_value;
__asm
{
mov eax, src_value // 将src_value加载到EAX
mov ebx, eax // 将EAX的值复制到EBX
mov dst_value, ebx // 将EBX的值保存到变量
}
int b = 0x2000;
int *ptr = &b;
MessageBoxA(0, NULL, NULL, MB_OK);
return 0;
}
bp MessageBoxA下一个断点,反汇编窗口跟随。
009A2A39 C745 FC 0A05000>mov dword ptr ss:[ebp-0x4],0x50A
009A2A40 B8 99887700 mov eax,0x778899
009A2A45 C745 F8 3412000>mov dword ptr ss:[ebp-0x8],0x1234
009A2A4C 8B45 F8 mov eax,dword ptr ss:[ebp-0x8]
009A2A4F 8BD8 mov ebx,eax
009A2A51 895D F4 mov dword ptr ss:[ebp-0xC],ebx
009A2A54 C745 EC 0020000>mov dword ptr ss:[ebp-0x14],0x2000
009A2A5B 8D45 EC lea eax,dword ptr ss:[ebp-0x14]
009A2A5E 8945 E4 mov dword ptr ss:[ebp-0x1C],eax