8

C リンク リストと、x86 ASM 内での表現方法について説明している本を読んでいます。説明がわかりにくいMOV [edx], eax

命令が逆だった場合、MOV eax, [edx]edx に格納されているメモリ アドレスで表される 4 バイトをコピーし、eax に格納することを意味すると理解できます。

MOV は何[edx], eaxを表していますか?

命令で使用する場合[]MOVメモリアドレスにあるデータをその宛先にコピーすることを意味すると思いました。eaxそれが本当なら、 にあるものを のデータ値にどのようにコピーできますedxか?

4

1 に答える 1

17

これはインテルのアセンブリ構文です。Intel アセンブリ構文では、デスティネーションは常に最初のオペランドであり、残りのオペランドはソース オペランドです。x86 で一般的に使用されるその他のアセンブリ構文は AT&T ですが、Intel と AT&T の構文は見た目が大きく異なるため、簡単に区別できます。

mov [edx],eaxの値をeaxメモリ内の で指定されたアドレスにedx(リトル エンディアンのバイト順で) 格納します。

mov eax,[edx]はまったく逆のことを行い、 で指定されたアドレスからメモリから格納された値を読み取り、 に格納しedxますeax

[reg]*regは常に間接アドレス指定を意味し、Cのポインタのようなものです。

eaxの内容をにコピーするにはedx、必要なのは だけですmov edx,eax。デスティネーションは第 1 オペランド、ソースは第 2 オペランドです。

于 2012-12-24T11:39:03.763 に答える