GCC によって生成されたアセンブリ コードを調べています。しかし、私は理解していません:
movl $0x2d, 0x4(%esp)
第 2 オペランドで、 は何0x4
を表していますか? オフセットアドレス?また、レジスタ EAX の用途は何ですか?
GCC によって生成されたアセンブリ コードを調べています。しかし、私は理解していません:
movl $0x2d, 0x4(%esp)
第 2 オペランドで、 は何0x4
を表していますか? オフセットアドレス?また、レジスタ EAX の用途は何ですか?
0x4(%esp)
逆参照を意味する*(%esp + 4)
場所を意味します。*
このステートメントは、即値 0x2d を、スタックの 4 番目のオフセットを占めるローカル変数に格納することを意味します。
(あなたが示したコードは AT&T 構文です。Intel 構文では、次のようになりますmov [esp, 4], 2dh
)
GCC アセンブリ オペランドは、次のように、バイト (b)、ワード (w)、ロング (l) などに続きます。
動く 動く 動く
レジスタにはパーセント記号 (%) が前に付きます。
定数には、ドル記号 ($) がプレフィックスとして付きます。
上記の質問の例では、スタック ポインター (esp) からの 4 番目のオフセットを意味します。
これがお役に立てば幸いです。よろしくお願いします、トム。
0x4
2 番目のオペランドは、括弧内のレジスタの値からのオフセットです。EAX
アセンブリコーディング(計算、一時値の保存など)に使用される汎用レジスタです。正式には「アキュムレータレジスタ」と呼ばれますが、関連するよりも歴史的です。
x86 アーキテクチャに関するこのページを読むことができます。あなたの質問に最も関連するのは、アドレッシングモードと汎用レジスタに関するセクションです