因此,假设我在dx:ax
中得到了mul
的结果,我怎样才能将它保存到dword [ebx]
?如何将两个寄存器的多个结果存储到内存
我对双字有同样的问题:edx(高半)和eax(低半)到[ebx]
指向的两个双字。
因此,假设我在dx:ax
中得到了mul
的结果,我怎样才能将它保存到dword [ebx]
?如何将两个寄存器的多个结果存储到内存
我对双字有同样的问题:edx(高半)和eax(低半)到[ebx]
指向的两个双字。
正如评论者Michael和Ped7g所说,您已经使用了偏移量。让我解释一下:
x86以little-endian格式存储数字,这意味着最低位字节首先存储在内存中。一个小例子:假设你有值0x12345678
在eax
,并执行这个指令:
mov [addr], eax
...然后在地址addr
内存将是这样的:
78 56 34 12
在你的榜样,则在dx:ax
中有一个值,该值是“在dx
中具有值高16位并且其在ax
中具有低16位”的简写。假设值,再次0x12345678
,所以你必须在dx
0x1234
和0x5678
在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
。
对于edx
和eax
中的64位值具有相同的作用,偏移量为4
。让我们假设你有eax
在edx
价值0x1234567890ABCDEF
斯普利特0x12345678
和0x90ABCDEF
,那么它应该是这样的:
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
使用两个'mov's:'MOV [EBX],ax' /'MOV [EBX +2],dx' – Michael
这应该是一个答案。 – jcoder
那么eax和edx呢? +4? – formateu