為什麼要在段寄存器位址末尾添加4個「零」位元(0000)來取得實體記憶體中的段位址?

為什麼要在段寄存器位址末尾添加4個「零」位元(0000)來取得實體記憶體中的段位址?

為什麼我們必須在記憶體中找到一個有 20 位元可用空間的位址,其中 16 位元用於段暫存器和 4 個「零」位元?

例如,如果CS暫存器為346AH,則主記憶體中的程式碼段將為346A0H,即20位元。我們為什麼要這樣做?

記憶體段是 64Kbytes(?),除了那 20 位元之外,其餘空間會發生什麼事?

抱歉,我不太擅長電腦架構!

答案1

例如,如果CS暫存器為346AH,則主記憶體中的程式碼段將為346A0H,即20位元。我們為什麼要這樣做?

顯然你指的是x86 分段,最初用於 Intel 8086/88 CPU。這種「細分」並不具有普遍性。記憶還有其他定義”」。

在歷史背景下,您需要認識到矽和(鐵氧體)內存曾經非常昂貴。為了對抗昂貴的大型計算機,小型機出現於 20 世紀 70 年代,旨在提供低成本計算機。這種對低成本的關注通常意味著 16 位元位址匯流排(例如 DEC PDP、Data General Nova、HP 21xx)和高達 64KB 的記憶體。但隨著系統需求的成長,通常需要更多的記憶體。

設計的記憶體方案仍然可以使用現有的 16 位元位址,但可以存取更多記憶體。
以16位元位址擴充64KB記憶體容量的最常見技術是使用儲存體,即有效儲存位址的實際高位元由儲存體暫存器指定。使用儲存體的主要優點是它可以在儲存子系統(即CPU 外部)中實現,因此可以改裝到任何CPU。
隨著微處理器的出現,使用 16 位元尋址的系統(例如 Intel 8051、Zilog Z80)傾向於以類似的方式發展,即合併成組記憶體。

Intel x86(以及我所知道的至少一個其他系統)使用的段尋址與處理器集成,因此更加通用。
儲存體只能佔用原始儲存空間中的固定區域,而 x86 段則使用 16 位元偏移量和段暫存器的規格來提供對擴充的 20 位元位址空間的存取。

x86 段位址實際上是一個 20 位元位址,被截斷為僅 16 個位址位元。
該段落可以從任何段落開始(位址模 16 為零)。
因此,需要附加四個截斷的零位元來取得 20 位元記憶體空間中 x86 段的實際開始位置。
取決於x86 記憶體模型,x86 軟體可以主要使用 16 位元「位址」(就像舊版軟體一樣),但可以比舊版 16 位元位址軟體存取更有效的記憶體。

IOW x86 段是一種將硬體擴展到 20 位元位址匯流排的方法,但允許軟體主要使用 16 位元“位址”,而不需要 20 位元算術(即 20 位元寬的暫存器和資料)。

相關內容