因此,假設我在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