2016-05-16 13 views
0

mulの結果がdx:axにあるとします。どうすればdword [ebx]に保存できますか?2レジスタの結果をメモリに格納する方法

私はダブルワードで同じ問題を抱えています:[ebx]で指された2つのdwordsへのedx(上半分)とeax(下半分)。

+3

を使用して、2つの 'mov's:' MOV [EBX]、ax'/'MOV [EBX +2]、dx' – Michael

+0

これは答えになるはずです。 – jcoder

+0

そして、eaxとedxはどうですか? +4? – formateu

答えて

2

コメント者MichaelとPed7gがすでに言ったように、あなたはオフセットを使用しています。私に説明させてください:

x86はリトルエンディアン形式の数字を格納します。つまり、最下位バイトが最初にメモリに格納されます。少し例:あなたはeaxで値0x12345678を持っており、あなたがこの命令を実行すると仮定:

mov [addr], eax 

...その後アドレスaddrのメモリは次のようになります。

78 56 34 12 

あなたの例ではdx:axという値があります。これは、値の上位16ビットがdxで、下位16ビットがaxになります。あなたはaxdx0x12340x5678を持っているので、0x12345678、値が再び、であると仮定すると、次の2つの移動命令が必要です。

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

+2axは、16ビットのレジスタ、すなわちであるという事実に由来しますメモリに格納されているときに2バイトを使用するので、すぐ後にdxを入れたいので、アドレスを2で増やす必要があります。

edxeaxの64ビット値と同じものがあり、オフセットは4です。あなたがeaxの値0x1234567890ABCDEFedx0x12345678に分割し、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 
関連する問題