8086/8088內部結構
從功能上可以分爲總線接口單元BIU和內部執行單元EU。
總線接口單元
負責完成CPU和存儲器以及IO接口之間的數據傳送。
總線接口單元內有4個16位段寄存器,即代碼寄存器CS,數據段寄存器DS,堆棧段寄存器SS和附加數據段寄存器ES,一個16位的指令寄存器IP,一個20位的地址加法器。一個6字節指令隊列緩衝區,一個EU通信的內部寄存器和總線控制電路等。
-
段寄存器
8086CPU地址引腳有20根,能提供20位的地址信息,可以直接對1M個存儲單元進行訪問。當CPU內部可用來提供地址信息的寄存器是16位。所以8086/8088處理器使用段結構的內存管理方法:
將指令代碼和數據代碼分別存儲在代碼段,數據段,堆棧段,附加數據段中,這些段地址分別由段寄存器,CS,SS,DS,DS提供,而代碼或者數據在段內的偏移地址則由有關寄存器和立即數形式的偏移地址給出。
代碼段用來存儲相關的指令代碼,下一條要讀取的=指令在代碼段的偏移地址由指令寄存器IP提供,數據段寄存器用來存放程序當前使用的數據段的段地址。 -
指令指針寄存器
指令指針IP用來存放下一條要讀取的指令在代碼段中的偏移地址。IP在程序中能自動修正加1。從而使其總是指向要執行的下一條指令的代碼段的偏移地址。
- 20位地址加法器
負責產生訪問存儲單元的20位地址
存儲器中的地址兩種表示方式:
邏輯地址:段地址:段內偏移地址
物理地址:CPU與存儲器進行數據交換時在地址總線上提供的20位地址信息。
由邏輯地址求物理地址:
物理地址=段地址×10H+段內偏移地址
- 指令隊列緩衝器
8086指令隊列有六個字節,8088有4個字節。
指令隊列的引入使得EU和BIU可以並行執行。在BIU讀指令的時候,並不影響EU從指令隊列中取指令。
執行單元
執行單元負責BIU獲取的指令。
16位算數邏輯單元(ALU):用於進行算數和邏輯運算。
16爲標誌寄存器FLAGS:用來存放CPU運算結果的狀態特徵和控制標誌。
數據暫存寄存器:協助ALU完成運算,暫存參加運算的數據。
通用寄存器:包括4個16爲數據寄存器,AX,BX,CX,DX和4個16位指針與變址寄存器,SP,BP與SI,DI。
EU控制電路:控制,定時與狀態邏輯電路。接收從BIU取來的指令,經過指令譯碼形成各種控制信號。對EU各個部件形成特定的定時操作。
-
8086和8088的差異:
外部數據總線位數不同:8086爲16位,在一個總線週期可以輸出一個16位數據,而8088外部數據總線爲8位,在一個總線週期只能輸出或輸入8位。
指令隊列緩衝區的大小不同:8086指令隊列可容納6個字節,而8088只能容納4個字節。一些引腳定義有區別。 -
通用寄存器
CPU內部有14個16位寄存器,按照功能可以分爲兩大類:通用寄存器,段寄存器和控制寄存器。
通用寄存器:
4個數據寄存器,兩個變址寄存器。兩個地址指針寄存器和兩個變址寄存器。
數據寄存器:AX,BX,CX,DX
數據寄存器
AX稱爲累加器,用該寄存器存放運算結果可以使指令簡化,提高指令的執行速度。所有IO指令都使用該寄存器與外設端口交換信息。
BX稱爲基址寄存器:在這兩種CPU中有兩種寄存器,BP和BX,BX存放操作數在內存數據段中的偏移地址,BP用來存放操作數在堆棧段內的偏移地址。
CX稱爲計數器:在設計循環程序時使用該寄存器存放循環次數,可使程序指令簡化,有利於提高程序執行效率。
DX稱爲數據寄存器:在寄存器間接尋址的IO指令中存放IO端口地址,在作雙字節乘除法運算時,DX和CX一起存放一個字節長的操作數,其中DX存放高16位數。
地址指針寄存器:SP,BP
SP稱爲堆棧指針寄存器,在使用堆棧操作指令(PUSH或者POP)對堆棧進行操作時,每執行一次進棧或者出棧操作,系統會自動將SP的內容減2或者加2,以使其始終指向棧頂。
BP稱爲基址寄存器,作爲通用寄存器可以存放數據,但更重要的作用時用來存放堆棧段內的偏移地址。
變址寄存器SI和DI
SI稱爲源變址寄存器,DI爲目的變址寄存器,這兩個寄存器通常用在字符串操作時存放操作數的偏移地址,其中SI存放源串在數據段內的偏移地址,DI存放目的串在附加數據段的偏移地址。
段寄存器:
CS稱爲數據段寄存器,用來存放代碼段的段地址
DS稱爲數據段寄存器,用來存放數據段的段地址
SS稱爲堆棧段寄存器,用來存放程序當前使用的堆棧端的段地址
ES稱爲附加數據段寄存器,用來存放程序當前使用的數據附加段的段地址
控制寄存器:
IP稱爲指令指針寄存器。用來存放要執行下一條指令在代碼段的地址。
FLAGS稱爲標記寄存器,他是一個16位寄存器,但只用了9位,這九位包括六個狀態標誌位和3個控制標誌位。
狀態標誌位:
CF進位標誌位,當進行加減運算的時候,若最高位發生進位或者錯位,則CF爲1,否則爲0.主要用於判斷無符號數運算結果超出了計算機所能表示的範圍。
PF標識位,當指令執行結果的低八位中含有偶數個1,PF爲1,否則爲0。
AF 輔助標識位,當執行一條加法或者減法指令時,若結果低字節的低4位向高四位有進位或者有錯位,則AF爲1,否則爲0。
ZF零標誌位,SF符號標誌位。OF溢出標誌位。
控制標誌位:
TF跟蹤標誌位
IF中斷允許標誌位
DF方向標誌位
總線週期的概念:
CPU與存儲器或者IO端口交換數據時需要啓動一個總線週期。
按照數據的傳送方向,總線週期可以分爲讀總線週期,CPU從存儲器或者IO端口讀取數據,和寫總線週期,CPU將數據寫入存儲器或者IO端口。