實位址模式(實模式)

2021-09-26 02:48:51 字數 827 閱讀 9577

實位址模式是指定址採用和8086相同的16位段和偏移量,最大定址空間1mb,定址時將段暫存器的值左移4位加上偏移位址,得到1mb空間內的位址。它是cpu啟動的時候的模式,這時候就相當於乙個速度超快的8086。

8086處理器的定址目標是1m(2^20)大的記憶體空間,於是它的位址匯流排擴充套件到了20位。但是,乙個問題擺在了intel設計人員面前,雖然位址匯流排寬度是20位的,但是cpu中「算術邏輯運算單元(alu)」的寬度,即資料匯流排卻只有16位,也就是可直接加以運算的指標長度是16位的。如何填補這個空隙呢?可能的解決方案有多種,例如,可以像一些8位cpu中那樣,增設一些20位的指令專用於位址運算和操作,但是那樣又會造成cpu記憶體結構的不均勻。又例如,當時的pdp-11小型機也是16位的,但是其記憶體管理單元(mmu)可以將16位的位址對映到24位的位址空間。受此啟發,intel設計了一種在當時看來不失為巧妙的方法,即分段的方法。

為了支援分段,intel在8086 cpu中設定了四個段暫存器:cs、ds、ss和es,分別用於可執行**段、資料段、堆疊段及其他段。每個段暫存器都是16位的,對應於位址匯流排中的高16位。每條「訪內」指令中的內部位址也都是16位的,但是在送上位址匯流排之前,cpu內部自動地把它與某個段暫存器中的內容相加。因為段暫存器中的內容對應於20位位址匯流排中的高16位(也就是把段暫存器左移4位),所以相加時實際上是記憶體匯流排中的高12位與段暫存器中的16位相加,而低4位保留不變,這樣就形成乙個20位的實際位址,也就實現了從16位記憶體位址到20位實際位址的轉換,或者叫「對映」。

實位址模式與保護模式下的中斷與異常處理

在中斷和異常的處理過程中,很重要的一件事是如何識別中斷源,獲取中斷服務子程式的入口位址。在80486 cpu系統中,因為cpu的工作模式不同而獲取中斷向量的方式有所不同,本節討論cpu工作在實位址模式下是如何獲取中斷向量而轉入中斷處理的。在實位址模式下,80486 cpu的中斷響應是根據中斷源提供的...

如何在wince中將虛位址轉為實位址

在wince開發中,尤其是驅動程式開發中,有時候我們需要得到某個buffer的真實實體地址,用於些暫存器,但是通常我們只有它在當前段中的虛位址。這就對程式的操作造成了麻煩。下面就是將虛位址轉為實位址的方法。dword pagesize userkinfo kinx pagesize userkinf...

linux中虛位址和實位址的轉換

virt to phys 虛擬位址轉換成實際位址 phys to virt 實際位址轉換成虛擬位址 最近用ioremap 和 phys to virt 做實體地址於虛擬位址的轉換發現 addr unsigned int volatile ioremap 0x56000088,12 printk ke...