2.7“段地址×16+偏移地址=物理地址”的本質含義

 注意,這裏討論的是8086CPU段地址和偏移地址的本質含義,而不是爲了解決具體的問題,而在本質含義之上引申出來的更高級的邏輯意義

 

 不管以多少種不同的邏輯意義去看待段地址×16+偏移地址=物理地址”的尋址模式,一定要清楚地知道它的本質含義,這樣才能更靈活地利用它來分析解決問題。

 

 如果,只拘泥於某一種引申出來的邏輯含義,而模糊本質含義的話,將從意識上限制對這種尋址功能的靈活應用。

 

    “段地址×16+偏移地址=物理地址”的本質含義:CPU在訪問內存時,用一個基礎地址(段地址×16)和一個相對於基礎地址的偏移地址相加,給出內存單元的物理地址。


 更一般地說,8086CPU的這種尋址功能是“基礎地址+偏移地址=物理地址”尋址模式的一種具體實現方案。8086CPU中,段地址×16可看做是基礎地址

 

 下面,我們用兩個與CPU無關的例子來做進一步的比喻說明。

 

 第一個比喻說明“基礎地址+偏移地址=物理地址”的思想

 

 比如說,學校、體育館,圖書館同在一條筆直的單行路上(參考下圖),學校位於路的起點(從路的起點到學校距離是0米)。

 

學校、體育館、圖書館的位置關係

 

    你要去圖書館,問我那裏的地址,我可以用兩種方式告訴你圖書館的地址:

    (1)從學校走2826m到圖書館。這2826m可以認爲是圖書館的物理地址。

    (2)從學校走2000m到體育館。從體育館再走826m到圖書館。第一個距離2000m,相對於起點的基礎地址。第二個距離826m,是相對於基礎地址的偏移地址(以基礎地址爲點的地址)。

 

 第一種方式是直接給出物理地址2826m,而第二種方式是用基礎地址和偏移地址相加來得到物理地址的。

 

 第二個比喻進一步說明“段地址×16+偏移地址=物理地址”的思想。

 

 我們爲上面的例子加一些限制條件,比如,只能通過紙條來互相通信。你問我圖書館的地址,我只能將它寫在紙上告訴你。顯然,我必須有一張可以容納4位數據的紙條,才能寫下2826這個數據。

可以寫下4位數據的紙條

2

8

2

6

 

 可不巧的是,我沒有能容納4位數據的紙條,僅有兩張可以容納3位數據的紙條。這樣我只能以這種方式來告訴你2826這個數據。

 

兩張可以寫下3位數據的紙條

2

0

0

 

8

2

6

 

 在第一張紙上寫上200(段地址),在第二張紙上寫上826(偏移地址)。假設我們事先對這種情況又有過相關的約定:你得到這兩張紙後,做這樣的運算:200(段地址)×10+826(偏移地址)=2826(物理地址)。

 

    8086CPU就是這樣,一個只能提供兩張3位數據紙條的CPU。

 

    問:簡述段地址和偏移地址。

 答:從X地走到Y地,從Y地,走到Z地。X到Y地,也就是段地址。從Y地到Z,也就是偏移地址。兩者相加,也就是實際距離。

 

    問:爲什麼只拘泥於某一種引申出來的邏輯含義,而模糊本質含義的話,將從意識上限制對這種尋址功能的靈活應用?

    答:學東西,不要學的太死了。一件事物,有很多答案。

 

    問:爲什麼要有段地址和偏移地址?

    答:

    Intel 8088時代,計算機的地址總線是20位的,即可以尋址能力可以達到1M字節,但是它的ALU和寄存器都只有16位,也就是表示數的能力只能達64k,再大就逾鍋了。

 

 那怎麼辦呢?INTEL想了一個辦法,讓兩個寄存器對來表示一個物理地址,比如說DS:BX,前者叫段寄存器,後者叫偏址寄存器。

 

 由於這兩個寄存器都是16位,直接相加還是不能匹配20位的地址線的訪問能力,因此,INTEL公司變通了一下,人爲地將這個組合尋址設計成:在它們組合時,讓段寄存器左移四位(假設DS是1234H,左移4位就變成了12340H,至於它內部怎麼實現我們不用管它。

 

 注意,對於16進制的數來說,乘以16就相當於在原數後面補個0,因爲它是逢16進1啊;與10進制數乘10就是後面補0同樣道理。)然後與偏址寄存器相加,這樣得到的地址最大可以到0FFFFFH。這樣行了。


 現在都32位機了,甚至64位了,所以上面的尋址方法在保護模式下不再用了。

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