跳转至

数据修改

数据修改通常发生在几个汇编操作中,但最终结果必须存储在内存或寄存器中,通常用 MOV 指令。MOV 操作接受两个操作数:目标和源。表 4-6 显示了 MOV 所有可能的操作数组合以及你可以预期的结果。

指令语法结果把 R2 的值复制到 R1。把 R2 引用的内存中的值复制到 R1。把 R2+0xA 引用的内存中的值复制到 R1。把 0xDEADBEEF 处内存中的值复制到 R1。把值 0xBADF00D 复制到 R1。把 R2 的值复制到 R1 引用的内存。把值 0xBADF00D 复制到 R1 引用的内存。指令语法结果把 R2 的值复制到 R1+0x4 引用的内存。把值 0xBADF00D 复制到 R1+0x4 引用的内存。把 R1 的值复制到 0xDEADBEEF 处的内存。把值 0xBADF00D 复制到 0xDEADBEEF 处的内存。

MOV 指令可以接受很多操作数组合,但有些是不允许的。首先,目标操作数不能是立即值;它必须是寄存器或地址,因为立即值不能修改。第二,值不能直接从一块内存复制到另一块。复制值需要两个单独的操作,像这样:

MOV EAX, [EBP+10h] ; 把内存从 EBP+0x10 复制到 EAX
MOV [DEADBEEFh], EAX ; 把复制到 EAX 的内存移到 

0xDEADBEEF 处的内存

这些指令把 EBP+0x10 处存储的任何内容复制到 0xDEADBEEF 处的内存。