我看到汇编代码,
MOV [EAX], EBX
上面一行,提到了[EAX]
是内存,EBX
是注册。那么,这里[EAX]
和EBX
之间的区别是什么。上述指示会发生什么。
答案 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不变。