2011-08-31 19 views
13

私はアセンブリの本を読んでいます。この本は、コンピュータのメモリに.textセクションと.dataセクションがあることを説明しています。本の例では、次のソースコードも使用しています。アセンブリで.dataセクションと.textセクションを定義する必要があるのはなぜですか?

[SECTION .data] 

[SECTION .text] 

上記コードスニペットはアセンブリで記述されているため、質問があります。

物理メモリに.dataと.textコードが区切られていますか(なぜそうであれば、CPUは気にしますか?)またはアセンブリ言語でそれらを分離するのは私たち(人間)ですか?

答えて

15

Dataの部分は読み取り専用であり、Dataは読み取られません。多くのOSは、アプリケーションが何回起動されても、テキストセクションをメモリに一度だけロードします。これにより、メモリ使用量と起動時間が短縮され、コードが変更されないため安全です。 データセクションには、アプリケーションの実行中に変更できる情報が含まれています。このセクションは、すべてのインスタンスでコピーする必要があります。

+0

//このOSは指定されていますか?私が自分のOSを書いているとします(私はそれをするつもりはありません:))、私はこのコンベンションに従う必要がありますか? – Moon

+0

それらを別々にしておくことは、そのセクションに関連する各セクションに作業を行うことができるためです。たとえば、異なるメモリスワップのイン/アウトルール、メモリ保護コード、および連続したストレージエンフォースメントをプログラムのこれらの異なる部分に設計することができます。 – Pete855217

+1

はい、これはOS固有のものだと思います。あなた自身のOSでこの規則に従う必要はありません。今でも、OSは、アプリケーションやデバッグAPIのデバッグ中に、テキストセクションを読み取り専用から読み取りと書き込みに変更することができます。http://msdn.microsoft.com/en-us/library/ms681674(v=vs。 85).aspx。 あなたのOSでない通常の使用の場合、私はこの規則に従います。 – Zuljin

関連する問題