私が読んだことからmov
、それは2番目の引数を最初の引数にコピーします。では、これは何をするのでしょうか?
movl 8(%ebp)、%edx
edxにあるものはすべて関数の最初のパラメーターにコピーされます(からのオフセットが+8ebp
のパラメーターであるため)?
これが本当に意味するのは、最初のパラメーターをedx
レジスターに移動することだと思いますが、ウィキペディアでそれが逆であると読みましたか?
movl 8(%ebp), %edx
「AT&T構文」にあります。この構文では、ソースが最初に来て、宛先が次に来ます。そうです、あなたの信念は正しいです。ほとんどのドキュメントでは、逆の順序の「Intel構文」を使用しています。これは、x86アセンブリを初めて使用する人にとってはかなりの混乱の原因です。
Intel構文では、命令は次のように記述されます。
mov edx, [ebp + 8]
%
レジスタ名の前に存在しないこと、アドレスに括弧の代わりに角かっこを使用していること、およびl
命令に接尾辞がないことに注意してください。これらは、あなたが見ているアセンブリの形式を知るための死んだプレゼントです。