mul
の結果がdx:ax
にあるとします。どうすればdword [ebx]
に保存できますか?2レジスタの結果をメモリに格納する方法
私はダブルワードで同じ問題を抱えています:[ebx]
で指された2つのdwordsへのedx(上半分)とeax(下半分)。
mul
の結果がdx:ax
にあるとします。どうすればdword [ebx]
に保存できますか?2レジスタの結果をメモリに格納する方法
私はダブルワードで同じ問題を抱えています:[ebx]
で指された2つのdwordsへのedx(上半分)とeax(下半分)。
コメント者MichaelとPed7gがすでに言ったように、あなたはオフセットを使用しています。私に説明させてください:
x86はリトルエンディアン形式の数字を格納します。つまり、最下位バイトが最初にメモリに格納されます。少し例:あなたはeax
で値0x12345678
を持っており、あなたがこの命令を実行すると仮定:
mov [addr], eax
...その後アドレスaddr
のメモリは次のようになります。
78 56 34 12
あなたの例ではdx:ax
という値があります。これは、値の上位16ビットがdx
で、下位16ビットがax
になります。あなたはax
でdx
で0x1234
と0x5678
を持っているので、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
+2
がax
は、16ビットのレジスタ、すなわちであるという事実に由来しますメモリに格納されているときに2バイトを使用するので、すぐ後にdx
を入れたいので、アドレスを2
で増やす必要があります。
edx
とeax
の64ビット値と同じものがあり、オフセットは4
です。あなたがeax
の値0x1234567890ABCDEF
edx
で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
を使用して、2つの 'mov's:' MOV [EBX]、ax'/'MOV [EBX +2]、dx' – Michael
これは答えになるはずです。 – jcoder
そして、eaxとedxはどうですか? +4? – formateu