ホームページ  >  記事  >  メモリにアクセスするときに bp アドレス指定が使用される場合、デフォルトのセグメント レジスタは何ですか?

メモリにアクセスするときに bp アドレス指定が使用される場合、デフォルトのセグメント レジスタは何ですか?

青灯夜游
青灯夜游オリジナル
2020-10-19 11:49:119794ブラウズ

メモリにアクセスするときに bp アドレス指定を使用する場合、デフォルトのセグメント レジスタはスタック セグメントである「SS」になります。 SS スタック セグメントは通常、スタック モードで動作するメモリ領域を指します。プログラム メモリ割り当てにセグメント化されたメモリ管理を使用するアーキテクチャでは、スタック セグメントはローカル変数と関数の戻りアドレスを格納するために使用されます。

メモリにアクセスするときに bp アドレス指定が使用される場合、デフォルトのセグメント レジスタは何ですか?

#セグメントレジスタは、メモリをセグメント化して管理するために設定されます。コンピューターは、メモリをセグメント化してさまざまなプログラムに割り当てる必要があります (ハードディスクのページングと同様)。メモリのセグメンテーションを記述する場合、1. セグメントのサイズ、2. セグメントの開始アドレス、3. セグメントの管理属性(書き込み禁止/実行禁止/システムエクスクルーシブなど)のセグメント情報が必要です。この情報を格納するには8バイト(64ビット)を使用する必要がありますが、セグメントレジスタには16ビットしかないため、セグメント番号(セグメントセレクタ、「セグメントセレクタ」とも訳されます)のみをセグメントレジスタに格納できます。次に、セグメント番号がメモリ内の存在する GDT (グローバル (セグメント) 記述子テーブル、グローバル セグメント番号レコード テーブル) にマッピングされ、セグメント情報が読み取られます。

8086CPU には 20 のアドレス ラインがあり、アドレス可能な最大メモリ空間は 1MB です。 8086 レジスタは 16 ビットのみで、命令ポインタ (IP) とインデックス レジスタ (SI、DI) も 16 ビットです。 16 ビット アドレスで 1MB の空間をアドレス指定することは不可能です。したがって、メモリはセグメント化する必要があります。つまり、1MB スペースを 2^4、つまり 16 セグメントに分割し、各セグメントが 64KB を超えないようにする必要があります (2^16、16 ビット データ ラインをアドレス指定できます)。 8086 には 4 つの 16 ビット セグメント レジスタが設定されており、4 種類のセグメントを管理します。CS はコード セグメント、DS はデータ セグメント、SS はスタック セグメント、ES は追加セグメントです。メモリがセグメント化された後、各セグメントはセグメント ベース アドレスを持ちます。セグメント レジスタには、セグメント ベース アドレスの上位 16 ビットが格納されます。この 16 ビット アドレスは、16 ビット アドレスを左に 4 シフトすることで形成できますビット (その後に 4 つのゼロを追加) 20 ビットのセグメント ベース アドレス。

セグメントレジスタCSは、プログラムが格納されているメモリセグメントを指します。IPは、セグメント内で次に実行される命令のオフセットを格納するために使用されます。これらをまとめると、次回メモリにフェッチできますセグメント. 実行する命令。

セグメントレジスタSSはスタックに使用するメモリセグメントを指し、SPはスタックの先頭を指し、これらを組み合わせることでスタックの先頭ユニットにアクセスできます。さらに、オフセットがポインタ レジスタ BP を使用する場合、そのデフォルトのセグメント レジスタも SS になり、BP を使用してスタックの先頭だけでなくスタック全体にアクセスできます。

セグメント レジスタ DS はデータ セグメントを指し、ES は追加セグメントを指します。オペランドにアクセスするとき、2 つのうちの 1 つがオフセットと結合されて、ストレージ ユニットの物理アドレスが取得されます。 。オフセットは、特定の数値、記号アドレス、ポインタ レジスタの値などのいずれかになります。特定の状況は、命令のアドレッシング モードによって決まります。

通常、デフォルトのデータ セグメント レジスタは DS ですが、例外が 1 つあります。文字列操作を実行する場合、宛先アドレスのセグメント レジスタは ES として指定されます。もちろん、一般的な命令では、プレフィックスの「セグメント置換」フィールドを変更することで、オペランドのセグメント レジスタを変更することもできます。

「オプションのセグメント レジスタ」は、これらのセグメント レジスタの値をオペランド アドレスとして強制するために使用できるセグメント アドレスです。

以上がメモリにアクセスするときに bp アドレス指定が使用される場合、デフォルトのセグメント レジスタは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。