に単語を追加します。総会は、私は次のコードを持ってEAX
私が理解できるように、メモリは次のようになります。FE00ABBC
、そのために、次のコマンドが動作するはずです:
mov eax, 0x010000101
add dword [Var1], eax
しかし、この1つが働いている:
mov eax, 0x01010001
add dword [Var1], eax
なぜ?ありがとう。
に単語を追加します。総会は、私は次のコードを持ってEAX
私が理解できるように、メモリは次のようになります。FE00ABBC
、そのために、次のコマンドが動作するはずです:
mov eax, 0x010000101
add dword [Var1], eax
しかし、この1つが働いている:
mov eax, 0x01010001
add dword [Var1], eax
なぜ?ありがとう。
メモリマップが間違っているようです。私はこれを次のように解釈します:
BCAB00FE
^ ^
| |
MSB LSB
これは、あなたが見る動作を正確に説明するものです。
いいえ、彼の記憶マップは正しいです。 – hirschhornsalz
まあ、実際に彼は自分のメモリマップのローエンドがどこにあるのかを示していませんでした。私はちょうど左下を仮定しました(普通はバイトが左から右に読み込まれます。もう一度見た後、私はあなたが正反対であると思っています。 – hirschhornsalz
@drhirsch:私の前提は、OPが見る動作を説明するという事実によって支持されています。問題は、彼がメモリマップで左から右に読んでいるが、eaxでは右から左に読んでいるということです。 –
あなたの問題は、あなたがアーキテクチャのendiannessを考慮しなかったことにあります。
これで問題は解決しません。問題は、3つの変数を間違った順序でメモリに入れてしまうことです。あなたがしたことは、仲介者として 'ebx'を使うことを除いて、まさに彼がしたことです。 –
実際には解決しないため、最後の部分を削除しました。しかし、私は問題は私が述べたようにエンディアンであると思う。 – gusbro
achitecureはローエンド、最下位ビットは最も低いメモリアドレスにあります。これは、通常の洋書の書き方の逆です。
メモリはあなたが説明したとおりに見えますが、それがロードされイストとき、一見逆になり:
`FE 00 AB BC`
low high address
mov eax, 0x1010001
01 00 01 01
low high byte in eax
あなたが書くために左からそれを書くのであれば、EAXの内容は今01010001
です。
アセンブラソースで数値定数を書き込む順序が実際にメモリに格納される順序と異なるため、この問題が発生します。
エンディアンが正しいことを確認する必要があります。 –