2

私はat&t構文が初めてです。でtest.cファイルをコンパイルしましたgcc -S test.c

test.s のファイルの一部:

 1. .file "test.c"
 2. .local temp
 3. .comm temp,8,4
 4. ...
 5. funtion1:
 6. blah
 7. blah
 8. blah
 9. movl $temp, -8(%ebp)

-8(%ebp)ローカル変数であることは知っていますが、$temp意味がわかりません

これはnasmでどのように行うことができますか?

.bss セクションにグローバル temp があります

言ってもいい:

  1. mov eax, [ebp-8]; eax には [ebp-8] のメモリ アドレスが含まれていますか?
  2. mov ebx, temp; ebx には temp のアドレスが含まれていますか?
  3. mov [eax], ebx; これは、ローカル変数が temp を指すようにするということですか、それともローカル変数に temp のコピーを作成するということですか?
4

2 に答える 2

1

movl $temp, -8(%ebp)あなたのアドレスをtempローカル変数に書き込みますebp-8 これはnasmで次のように行うことができますmov dword [ebp-8], temp

他の質問に答えるには:

  1. いいえ、eaxローカル変数 at の値が含まれます[ebp-8]。アドレスをロードするには、次を使用できますlea eax, [ebp-8]
  2. はい
  3. tempローカル変数のアドレスを保持している場合、ローカル変数を へのポインタにしeaxます (ポイント #1 を参照)。
于 2012-11-02T01:30:42.433 に答える