私は現在、Jeff Duntemann による「Assembly Language step by step」を読んでいます。保護されたフラット モデルのメモリ構成を説明する図には、多少不満があります。4GB サイズのメモリを示しています。そこでは、命令領域が一番下 (下位アドレス) に近く、次にデータ領域が上にあり、一番上にスタックがあります。同時に、私の理解が正しければ、フラット モードの DS および CS レジスタは、命令またはデータの開始アドレス (4GB 内) には影響しません。
私の質問は:
では、誰がコードとデータ領域 (下のコード、上のデータ) を 4GB に配布しているのでしょうか? 命令の開始アドレスとデータの開始アドレスは誰が決めるのですか? 本にはいくつかのアセンブリプログラムがありますが、プログラマーが命令とデータのメモリ位置を選択していないようです (「自分の」4GB 内)。彼はどこかでデータ セクションを宣言し、命令に入力するだけです。一方、*.lst ファイルには、命令とデータ チャンクのアドレスが既に含まれています。では、アドレスを決定するのはアセンブラーですか?