10

GCC によって生成されたアセンブリ コードを調べています。しかし、私は理解していません:

movl $0x2d, 0x4(%esp)

第 2 オペランドで、 は何0x4を表していますか? オフセットアドレス?また、レジスタ EAX の用途は何ですか?

4

5 に答える 5

4

0x4(%esp)逆参照を意味する*(%esp + 4)場所を意味します。*

このステートメントは、即値 0x2d を、スタックの 4 番目のオフセットを占めるローカル変数に格納することを意味します。

(あなたが示したコードは AT&T 構文です。Intel 構文では、次のようになりますmov [esp, 4], 2dh)

于 2010-03-05T12:40:36.183 に答える
1

GCC アセンブリ オペランドは、次のように、バイト (b)、ワード (w)、ロング (l) などに続きます。

動く
動く
動く

レジスタにはパーセント記号 (%) が前に付きます。

定数には、ドル記号 ($) がプレフィックスとして付きます。

上記の質問の例では、スタック ポインター (esp) からの 4 番目のオフセットを意味します。

これがお役に立てば幸いです。よろしくお願いします、トム。

于 2010-03-05T12:39:36.133 に答える
1

0x42 番目のオペランドは、括弧内のレジスタの値からのオフセットです。EAXアセンブリコーディング(計算、一時値の保存など)に使用される汎用レジスタです。正式には「アキュムレータレジスタ」と呼ばれますが、関連するよりも歴史的です。

x86 アーキテクチャに関するこのページを読むことができます。あなたの質問に最も関連するのは、アドレッシングモード汎用レジスタに関するセクションです

于 2010-03-05T12:37:46.730 に答える