如何将双寄存器mul结果存储到内存中

时间:2016-05-16 09:03:57

标签: assembly x86 intel

所以,假设我在mul中得到了dx:ax的结果,如何将其保存到dword [ebx] ??

我对双字有同样的问题:edx(高半)和eax(低半)到[ebx]指向的两个双字。

1 个答案:

答案 0 :(得分:2)

正如评论者迈克尔和Ped7g已经说的那样,你有使用补偿。让我解释一下:

x86以little-endian格式存储数字,这意味着最低位字节首先存储在内存中。一个小例子:假设0x12345678中有值eax,并执行此指令:

mov [addr], eax

...然后地址addr的内存将如下所示:

78 56 34 12

在您的示例中,您有dx:ax中的值,这是“dx中值为高16位且ax中低16位”的简写。假设该值再次为0x12345678,那么0x1234中的dx0x5678中的ax,则需要两个移动指令:

mov [addr], ax   // Memory now looks like this: 78 56
mov [addr+2], dx // Memory now looks like this: 78 56 34 12

+2来自ax是一个16位寄存器的事实,即它存储在内存中时会占用两个字节,所以因为你想在之后放置dx它,您需要通过2增加地址。

edxeax中的64位值相同,偏移量为4。假设您将0x1234567890ABCDEF中的值0x12345678拆分为edx中的0x90ABCDEFeax中的mov [addr], eax // Memory now looks like this: EF CD AB 90 mov [addr+4], edx // Memory now looks like this: EF CD AB 90 78 56 34 12 ,那么它将如下所示:

items = {
Load: 0,
Unit: 0,
object: {
  Property: "prop"    
}