1

ハロー!現在、組み立ての基礎を学んでいます。以前は、TASM と Intel-syntax を使用していました。そこで、いくつかの方法でスタックを初期化する必要がありました。しかし、今は GNU Assembler と AT&T 構文を使用しています。多くの例を調べましたが、スタックの宣言/初期化は見られませんでした。やらなきゃいけないのかな?それとも、ここで私の手を借りずに作ったのでしょうか?もしそうなら、それはどのように正確に自動的に初期化されますか? データ セグメントで重要な情報をこするリスクはありますか? スタックに関するディレクティブにも気づきませんでした。

事前にご回答いただきありがとうございます。ああ、もう 1 つ。Unix ライクなシステム用の ASM (GAS) でのプログラミングに関する良い本はありますか?

4

1 に答える 1

0

仮想メモリを備えた OS は、仮想メモリを備えていない OS がスタックを処理する方法とは多少異なる方法でスタックを処理します。

  • VM なし (例: DOS、µClinux !MMU): スタック用にいくらかの物理スペースを予約します。DOS では、使用するメモリ モデルによって異なります。より大きなメモリ モデルの場合は、メモリを割り当てて、SS (スタック セグメント) をポイントします。µClinux では、実行可能ファイル形式のヘッダーのフィールドにスタック サイズを保存します。例としてbFLT形式を参照してください。
  • VM → スタックは、構成可能な制限まで動的に拡大します ( ulimit -sLinux を参照)。各プロセスには独自の仮想アドレス空間があるため、スタックと他のマップされた仮想メモリ領域の間には多くの空間があります。
于 2011-05-29T14:05:48.677 に答える