2017-10-15 2 views
0

とすれば、%eaxの内容は0x1230x123の内容は0x987.であり、アドレスは0xabcであり、内容は0x100です。x86:レジスタを中間体として使用する理由は?

movl (%eax), 0xabcの場合、 は、0xabcの内容として移動されませんか?なぜこれを行うために別の登録簿が必要なのですか?すなわち

movl (%eax), %eax  
movl %eax, 0xabc 

同様に、movl 0xabc, (%eax)は、それは我々がこれを実行するだけでなく他のレジスタが必要なのです%eax i.e. 0x123??のアドレスに0x100を移動しないのだろうか?

+0

x86 mov命令は2つのメモリオペランドをとらないためです。 –

答えて

1

x86はメモリ間の単純なmov命令を提供しないためです。提供されているすべてのフォームhereを見ることができ、本質的にロード(メモリからの移動)、ストア(メモリへの移動)およびレジスタ登録フォームは表示されますが、メモリからのロードとストアの両方を行うリストはスキャンできません。

x86は、movsdのように、メモリからロードして格納するより複雑な命令を提供します。つまり、rsiからrdiに4バイト移動します。彼らはおそらくあなたのシナリオで本当に役立つことはありません:彼らはまだアドレスのための "即時"フォームがないので、アドレスのための2つのレジスタがまだ必要です。これらは、可変長メモリコピーを行うためのフォームの中でのみ、大いに役立ちます(rep movs)。

関連する問題