8086存儲器分段

存儲器分段的原因:
我們都知道8086/8088 CPU有20根地址線,這樣可以直接尋址的物理地址空間爲1M字節(存儲單元以字節爲單位),範圍是00000H至FFFFFH。但8086/8088 CPU的寄存器都是16位,那麼在傳輸地址時顯然一次只能傳輸16位有效地址,也就是隻足夠訪問64K字節地址空間。爲了實現尋址1M字節物理空間,8086/8088引入了分段的概念。
存儲器分段的兩個條件:
1. 邏輯段的開始地址必須是16的倍數,因爲段寄存器長爲16位;
2. 邏輯段的最大長度爲64K,因爲指針寄存器長爲16位。
邏輯地址與物理地址的形成
段地址是指邏輯段在1MB內存中的起始地址,只是利用了其值的最低4位二進制固定爲0的特性,將這4位暫時捨去,而僅保存其前16位並存放在16位的段寄存器中。
偏移地址是指某存儲單元與本段段地址之間的距離,也叫偏移量。由於限定每段不超過64KB,所以偏移地址值最大不超過FFFFH。(偏移地址在編程中也常被稱爲“有效地址”(EA))
段地址和偏移地址的表示都是無符號的16位二進制數,一般用4位十六進制數。
邏輯地址是用戶在程序中採用的地址
物理地址是存儲單元的實際地址,是CPU和內存儲器進行數據交換時所使用的地址。
對於任何一個存儲單元來說,可以唯一地被包含在一個邏輯段中,也可以被包含在多個相互重疊的邏輯段中,也就是說,同一個物理地址可以對應多個邏輯地址,只要能得到它所在段的段地址和段內偏移地址,就可以對它進行訪問。訪問時,只需將邏輯地址轉換爲對應的物理地址即可。轉換方法爲:
物理地址 = 段地址 * 16 + 偏移地址
其中,段地址 * 16的操作常常通過將16位段寄存器的內容(二進制形式)左移4位,末位補4個0來實現(這也就是前面講到的將暫時捨去的4個0補回來)。
例: 假設段地址 = 1000H,偏移地址 = 2345H,
那麼物理地址 = 1000H * 16 + 2345H
=1000H * 10H + 2345H
= 12345H

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章