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