1.微型處理器的結構:
8086中央處理單元(CPU)是第三代微處理器,是Intel x86系列微處理器中的第一代產品。它是典型的16位微處理器,採用HMOS工藝,芯片內部包含有29000多個晶體管。它具有16位數據線和20位地址線,尋址空間爲1M bytes。8086由單一+5V電源供電,時鐘頻率5~10MHz。從功能上看,8086 CPU分爲執行單元(EU)和總線接口單元(BIU)兩部分。EU和BIU協同工作,形成指令級的流水線。
2.EU與BIU
(1)、BIU的結構和功能
概括地講,EU負責執行指令,BIU負責與存儲器或I/O接口交互數據。CPU通過BIU從存儲器讀取指令或操作數,送往EU執行。再通過BIU將EU執行指令的結果傳送到存貯器或者和I/O端口交換數據。
BIU的功能:
BIU爲EU完成全部的總線操作,根據EU的命令控制數據在CPU和存儲器或I/O接口之間傳送。以存儲器訪問爲例,BIU的操作過程是這樣的,BIU首先將要訪問存儲器的邏輯地址轉換成物理地址,再從(往)物理地址對應的存儲器單元讀取(寫入)數據;如果是讀取指令,BIU從物理地址取到指令後將指令送入指令隊列
BIU的組成:
• 段寄存器(均爲16位)
CS:代碼段寄存器,存放程序段地址;
DS:數據段寄存器,存放數據段地址;
ES:擴展段寄存器,存放輔助數據段地址;
SS:堆棧段寄存器,存放堆棧段地址。
爲什麼要分段??
8086有20位地址線,具有1M空間的尋址能力。但是8086是16位微處理器,其內部寄存器均爲16位,那麼如何用16位寄存器提供的信息來實現1M空間的存儲器尋址呢?爲了解決這個問題,8086採用了將存儲器分段的技術。段地址由段寄存器給出,段寄存器內容左移4位得到20位的地址,就是該存儲器段的起始地址。存儲器每段的最大長度爲64K,(因爲16位寄存器表示的最大量爲64K)因此段內的存儲地址相對於該段起始地址的最大偏移爲64K.
• 指令指針寄存器(16位)
IP寄存器用於存放程序段的偏移量。
• 地址加法器(20位)
地址加法器用於根據邏輯地址計算20位物理地址。
• 6字節的指令隊列
指令隊列可存放多條指令,用於指令預取。
解決8086執行指令的速度要比CPU芯片外部的數據訪問快很多倍的問題;
• 總線控制電路
總線控制電路實現總線的控制邏輯,產生相應的控制信號。
BIU功能的實現:
舉個例子:
CS是代碼段的段寄存器。一條指令的物理地址就是根據代碼段寄存器CS內容和指令指針寄存器IP的內容得到的。具體計算是通過地址加法器進行的,地址加法器將段寄存器的內容左移4位(乘以16),然後再與IP的內容相加。得到指令的物理地址。例如:
設CS=ED00H,IP=0020H,計算物理地址時,先將CS左移4位,即得到ED00 0H,再與IP內容相加,即ED00 0H + 0020H = ED020H,ED020H就是該指令的物理地址。
然後,由總線控制邏輯驅動地址信號和控制信號,讀取ED020H單元的指令。取到指令以後,送入指令隊列的隊尾,備EU執行。EU總是從指令隊列的隊首得到指令。BIU在EU執行指令的同時,不斷從存儲器順序讀取一條或多條指令,陸續將指令隊列添滿。這樣,EU就可以連續執行指令,實現指令級的流水作業。
(2)、EU的結構和功能
執行單元EU從BIU的指令隊列得到指令以後,完成對指令的譯碼、執行並回寫結果。當EU需要操作數時,便申請BIU訪問存儲器並向BIU提供段偏移地址。此外它還具有管理寄存器等功能
EU的組成:
• 通用寄存器(16 bit)
AX:用作累加器;
BX:一般用作基址寄存器;
CX:常常作爲計數器;
DX:多用作輔助累加器
AX、BX、CX和DX都是16位寄存器,可是它們都可以分別作爲2個8位寄存器使用。
• 專用寄存器(16 bit)
BP:基數指針寄存器
SP:堆棧指針寄存器
SI:源變址寄存器
DI:目的變址寄存器
• 標誌寄存器Flag(16 bit)
• 算術邏輯單元ALU
• 執行單元的控制電路
標誌寄存器的作用:
(3)、BIU與EU之間的關係
操作流程:
- BIU中的指令隊列有2個或2個以上字節爲空時,BIU自動啓動總線週期,從存儲單元取出指令。填充指令隊列。直至將指令隊列填滿,BIU才進入空閒狀態。
- EU每執行完一條指令,從BIU指令隊列的隊首取指令。系統初始化後,指令隊列爲空,EU需要等待BIU從內存取指填充指令隊列。
- EU從指令隊列取得指令後,譯碼並執行指令。若該指令需要取操作數或存操作結果,也就是說需要訪問存儲器或者I/O時,EU向BIU發出訪問總線的請求。
- 當BIU接到EU申請總線的請求,若BIU正忙(正在執行取指令的總線週期),則必須等待BIU執行完當前的總線週期,方能響應EU請求;若BIU空閒,則立即執行EU申請總線的請求。
- EU執行轉移、調用和返回指令時,若下一條指令不在指令隊列中,則隊列中的指令被自動清除,BIU根據轉移、調用和返回指令指示的目標地址重新取出指令並填充指令隊列。
形成流水線結構:
在8086中,指令的提取和執行是分別由總線接口部件和執行部件完成的,它們各行其責又相互配合。它們之間形成指令級的流水線,使得8086CPU可以在執行指令的同時進行讀取指令的操作。執行部件從指令隊列中取得指令的過程是數據在CPU內部寄存器之間傳送的過程,所花費的時間遠遠小於總線訪問的時間。一般情況下,EU可以不斷地從指令隊列中取得指令並執行指令,與BIU從對存儲器的訪問並行執行
3.總線週期
時鐘週期或狀態週期:8086CPU內部的邏輯操作以及與外部存儲器和I/O交換數據進行的總線操作全部由CPU的時鐘來定時的。CPU的基本定時單位稱爲時鐘週期或者狀態週期。假設8086的主頻爲10MHz,一個時鐘週期爲100ns。
總線週期:CPU爲了讀取指令或傳送數據,需要通過總線接口部件BIU與存儲器或I/O接口進行信息交互,執行對總線的操作。進行一次數據傳送的總線操作定義爲一個總線週期。
典型的總線週期通常由4個時鐘(狀態)週期T1、T2、T3和T4組成。
T1爲地址週期。CPU通過地址/數據(或地址/狀態)複用總線發出地址信息,指示要尋址的存儲器單元或者I/O的地址。
T2爲緩衝週期。例如,在總線讀週期,CPU在T2撤銷低16位地址信號,使該組信號線浮空,準備接收存儲器或I/O的數據。
T3爲數據週期。數據出現在複用總線的低16位上。
T4總線週期結束。
空閒週期:
系統總線處在空閒狀態,此時,執行空閒週期T1。