第二课 汇编MOV指令的认识,使用及OD调试

33 阅读2分钟

MOV 指令是汇编语言中最基础的数据传输指令,其核心功能是将源操作数的值复制到目标操作数中,且源操作数的内容保持不变。以下是关于 MOV 指令的综合说明:


一、基本功能与语法

  1. 功能
    MOV 指令用于实现以下类型的数据传输:
    • 立即数 → 寄存器/内存
    • 寄存器 ↔ 寄存器
    • 寄存器 ↔ 内存
    • 段寄存器 ↔ 寄存器(部分场景)

  2. 语法

    MOV destination, source  ; 将 source 的值复制到 destination
    

    例如:
    MOV EAX, #050aH:将十六进制数 050a 存入 EAX 寄存器
    MOV [2000H], 02H:将立即数 02H 存入内存地址 2000H


二、操作数类型与分类

  1. 操作数类型
    源操作数:立即数、寄存器、内存地址
    目标操作数:寄存器、内存地址、累加器(如单片机的 A 寄存器)

三、OD调试

#include <windows.h>
#include <stdio.h>

int main()
{
    MessageBoxA(0NULLNULL, 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(0NULLNULL, 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