物理地址是外部連接使用的、唯一的,它是“與地址總線相對應”;而邏輯地址是內部和編程使用的、并不唯一。
在內存中的實際地址就是所謂的“物理地址”,而邏輯地址就是邏輯段管理內存而形成的。 例如,你在進行C語言指針編程中,可以讀取指針變量本身值(&操作),實際上這個值就是邏輯地址,它是相對于你當前進程數據段的地址(偏移地址),不和絕對物理地址相干。只有在Intel實模式下,邏輯地址才和物理地址相等(因為實模式沒有分段或分頁機制,Cpu不進行自動地址轉換),邏輯地址也就是在Intel
保護模式下程序執行代碼段限長內的偏移地址(假定代碼段、數據段如果完全一樣)。8086體系的CPU一開始是20根地址線, 尋址寄存器是16位,
16位的寄存器可以訪問64K的地址空間, 如果程序要想訪問大于64K的內存, 就要把內存分段, 每段64K, 用段地址+偏移量的方法來訪問
。386CPU出來之后, 采用了32條地址線, 地址寄存器也擴為32位,
這樣就可以不用分段了, 直接用一個地址寄存器來線性訪問4G的內存了. 這就叫平面模式.
將邏輯地址中的段地址左移4位,加上偏移地址就得到20位物理地址。這里左移的4位是二進制位;如果用十六進制表達地址就是左移一位。左移4位還可以表達為乘以16,即:段地址×16+偏移地址。
同一個物理地址可以對應多個邏輯地址形式。所以物理地址轉換為邏輯地址,需要明確段基地址或偏移地址,然后同上原則確定另一個地址。
邏輯地址 1460H : 0100H 或1380H :
0900H
物理地址
14700H
于是,對于主存14700H單元,我們可以描述為在1460H(或1380H)段的0100H(或0900H)單元,或者說主存1460H :
0100H(或1380H : 0900H)單元。
存儲單元的地址可以用段基值和段內偏移量來表示,段基值確定它所在的段居于整個存儲空間的位置,偏移量確定它在段內的位置,這種地址表示方式稱為邏輯地址。
8086對外連接使用一個20位的線性地址唯一確定一個存儲單元,也就是說:對于每個存儲器單元都有的一個唯一的20位地址,我們稱為該單元的物理地址或絕對地址。
8086在內部結構中和程序設計時采用邏輯段管理內存,就形成了邏輯地址。它的表達形式為“段基地址
: 偏移地址”。