43

マイクロコンピューターアーキテクチャクラスでアセンブリ言語がどのように機能するかを理解しようとしていますが、例ではさまざまな構文に直面し続けています。

sub $48, %esp
mov %eax, 32(%esp)

これらのコードはどういう意味ですか?espレジスタに追加された32オペランドは何ですか?

4

5 に答える 5

39

これは Intel 構文ではなく、そのAT&T 構文であり、 GAS 構文とも呼ばれます。

$プレフィックスは即値 (定数) 用で、プレフィックス%はレジスター用です (これらは必須です1 )。

AT&T 構文の詳細については[att]タグ wikiも参照してください。


1noprefixオプションが指定されていない場合は、ここここを参照してください。ただし、通常は、MASM のような構文を取得するために ,noprefixとのみ使用されます。.intel_syntax noprefix

于 2012-02-08T15:53:43.457 に答える
2

はい、「32(%esp)」は %esp からの 32 のオフセットを示します。

于 2012-02-09T06:49:34.023 に答える
1

@Necrolis が言ったように、それは AT&T 構文で書かれています。その意味は:

subtract 48 from the register esp (the stack pointer).
store the contents of eax to the four bytes starting at (esp + 32).
于 2012-02-08T15:56:34.760 に答える
0

これは x86 用の AT&T 構文です。AT&T では%、一般にレジスタを表し、$は即値用に予約されています。省略した場合$、アセンブラは 48 をアドレスとして解釈します。

于 2012-02-08T15:57:00.110 に答える