内存和寄存器之间的区别

时间:2014-04-23 06:06:03

标签: memory assembly cpu-registers instructions mov

我看到汇编代码,

MOV [EAX], EBX

上面一行,提到了[EAX]是内存,EBX是注册。那么,这里[EAX]EBX之间的区别是什么。上述指示会发生什么。

2 个答案:

答案 0 :(得分:3)

在此语法中,寄存器周围的括号表示使用存储器位置(根据指令作为源或目标),并在寄存器中指定起始地址(在您的情况下为EAX)。例如,如果EAX在指令之前包含1344,则EBX中的值将复制到逻辑存储器地址1344-1347(因为这是4字节复制)。

我希望这足以在你的脑海中解开它们:)请注意更复杂的情况是可能的(例如MOV [EAX+ECX],EBX形成目标地址作为两个寄存器值的总和)。

答案 1 :(得分:1)

让我们说从地址0x1000开始的内存中的前16个字节包含以下内容:

0x1000: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

现在让我们说EAX包含0x1002(只是一个示例;不要尝试写入实际代码中的任意地址),EBX包含0x12345678。

MOV [EAX],EBX会将EBX(32位== 4个字节)的值写入内存,从EAX中包含的地址开始,所以之后内存将如下所示:

0x1000: 00 01 78 56 34 12 06 07 08 09 0A 0B 0C 0D 0E 0F

请注意写入字节的顺序。这是因为x86处理器是小端的。

如果您已完成MOV EAX,EBX,则会将值0x12345678复制到寄存器EAX,并将内存保持在0x1002不变。