次の命令をコンパイルする場合:
movl 4(%ebp), 8(%ebp)
取得したメモリ参照が多すぎます。
どうしたの?
括弧の前の数字はバイトオフセット(これによりメモリ参照が発生します)であり、2つを。で持つことはできませんmovl
。最初に値を一時的にレジスタに移動する必要があります。
movl 4(%ebp), %ecx
movl %ecx, 8(%ebp)
法的な指示ではありません。メモリを参照するほとんどの命令では、メモリをレジスタとの間で移動する必要があります。
movl
メモリには移動しません-メモリは移動します。レジスタを経由する必要があります(したがって、2つのmovl
命令が必要です)。