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