5

私はこのようなコードを持っています:

.bss
woof: .long 0

.text
bleh:
...some op codes here.

次に、woof のアドレスを eax に移動したいと思います。それを行うためのインテルの構文コードは何ですか? bleh のアドレスを ebx などに移動する場合も同様です。

あなたの助けは大歓迎です!

4

1 に答える 1

8

bss セクションには、実際のオブジェクトを含めることはできません。一部のアセンブラでは .bss セクションに切り替えることができますが、そこでできることは次のように言うことだけですx: . = . + 4

最近のほとんどのアセンブラ、特に intel の gnu ではディレクティブがなくなっている.bssため、一時的に bss に切り替えて、次のようなコマンドで bss シンボルを 1 回で作成します.comm sym,size,alignment。これが、おそらく ". bss ディレクティブが認識されない" などのエラーが発生する理由です。

そして、次のいずれかでアドレスを取得できます。

lea woof, %eax

また

movl $woof, %eax

更新:あはは、Intel 構文であり、Intel アーキテクチャではありません。わかった:

.intel_syntax noprefix
    lea    esi,fun
    lea    esi,[fun]
    mov     eax,OFFSET FLAT:fun
.att_syntax
    lea     fun, %eax
    mov     $fun, %eax
.data
fun: .long 0x123

すべてのleaフォームが同じコードを生成する必要があります。

于 2009-12-13T19:48:57.107 に答える