
8086是Intel系列的16位微處理器,它是采用HMOS工藝技術(shù)制造的,內(nèi)部包含約29000個晶體管。
8086有16根數(shù)據(jù)線和20根地址線,因為可用20位地址,所以可尋址的空間達220即1M字節(jié)。
8086工作時,只要一個5V電源和一相時鐘,時鐘頻率為5MHz。后來,Intel公司推出的8086-1型微處理器時鐘頻率高達10MHz,8086-2型微處理器時鐘頻率達8MHz。
幾乎在推出8086微處理器的同時,Intel公司還推出了一種準16位微處理器8088。推出8088的主要目的的是為了與當時已有的一套Intel外圍設(shè)備接口芯片直接兼容。8088的內(nèi)部寄存器、內(nèi)部運算部件以及內(nèi)部操作都是按16位設(shè)計的,但對外的數(shù)據(jù)總線只有8條。

掌握8086微處理器的內(nèi)部結(jié)構(gòu),CPU的引腳功能、總線結(jié)構(gòu)和時序。

§1 概述
§2 8086的內(nèi)部結(jié)構(gòu)
§3 8086寄存器組結(jié)果
§4 8086存儲器組織
§5 8086的引線
§6 8086的時序
§7 8086的總線請求和保持
§8 8088與8086的比較
§練習題
§自測題

2.1 總線接口部件BIU
2.2 執(zhí)行部件
2.3 BIU和EU的動作管理
2.4 8086的寄存器結(jié)構(gòu)
2.5 8086的存儲器接口
2.6 8086的最小組態(tài)和最大組態(tài)
2.7 8086地址/數(shù)據(jù)線的分時復(fù)用特性

1、重點在8086的時序,要好好地理解和掌握;
2、讀懂和理解8086的工作時序;
3、逐步理解各知識點。

寄存器 存儲器 模式 時序

1、《微型計算機技術(shù)及應(yīng)用》,戴梅萼等編著,第二版,清華大學出版社
2、《微型計算機原理》,季維法等編著,第一版,電子科技大學出版社
3、《微型計算機原理—常見題型解析及模擬題》,武自芳主編,西北工業(yè)大學出版社
4、《80X86/80X87匯編語言程序設(shè)計》,洪志全等編著,電子科技大學出版社
§2.1 概述
8086CPU是Intel公司1978年生產(chǎn)的,工作頻率5 ,是一種16位CPU,其內(nèi)部結(jié)構(gòu)為16位,數(shù)據(jù)總線也是16位。它可以處理BCD碼、ASCII碼、字節(jié)、字以及字節(jié)串。與8086CPU配合工作的協(xié)處理器可以有8087(專門為實數(shù)運算而設(shè)計的數(shù)學協(xié)處理器,簡稱NPX)、8089(提高輸入、輸出性能而設(shè)計的I/O協(xié)處理器)。
8086的地址信號線為20根,可以輸出的存儲器地址為:0000,0000,0000,000,0000 ~ 1111,1111,1111,1111,1111 或00000H~FFFFFH,每個地址信號指出一個存儲器單元地址,因此,8086可以尋址1MB存儲器。8086尋址存儲器 時可以使用直接尋址、間接尋址、基址尋址、變址尋址等尋址方式。
80286CPU也是16位CPU(內(nèi)部結(jié)構(gòu)為16位),其地址信號線為24根,可以尋址16MB存儲器。與80286配合工作的 數(shù)學協(xié)處理器是80287或8087。
80386CPU是32位CPU(內(nèi)部結(jié)構(gòu)為32位),其地址信號線為32根,可以尋址4GB存儲器。與80386配合工作的數(shù)學協(xié)處理器是80387或80287。80386及其以后的CPU均支持多用戶、多任務(wù)操作系統(tǒng)。
80486、Pentium、Pentium w/MMX、Pentium Pro、Pentium Ⅱ(包含Celeron和Xeon)均為32位CPU,且內(nèi)部已 包含數(shù)學協(xié)處理器(數(shù)學協(xié)處理器是CPU整體結(jié)構(gòu)的一個單元,稱為浮點處理單元,簡稱FPU)。但CPU每升級一 次,其內(nèi)部均加入了其他一些高級功能,工作頻率也不斷提高,使其運算速度大為提高。
高檔CPU的高級功能一般包括:更大的內(nèi)部緩存(Cache)、超標量流水線、MMX、動態(tài)執(zhí)行微結(jié)構(gòu)等。除了 MMX外,這些功能對于軟件來說均是透明的。因此,從軟件來說,8086與Pentium Ⅱ差異不大。(主要差異:80386開始引入的32位保護模式、Pentium w/MMX開始開始引入的MMX指令)。
§2.2 8086的內(nèi)部結(jié)構(gòu)(編程結(jié)構(gòu))
本節(jié)概述
從編程的角度看,8086的內(nèi)部結(jié)構(gòu)分成兩大部分:總線接口單元BIU和執(zhí)行單元EU。這兩部分是相互直接作用的,但它們也可以各自執(zhí)行獨立的功能而彼此無關(guān),從而可以重疊工作。

本節(jié)內(nèi)容
1.執(zhí)行單元EU
2.總線接口單元BIU
3.總線接口單元和執(zhí)行單元的動作管理
4.8086總線周期的概念
§2.2.1 執(zhí)行單元EU(Excution Unit)
這部分負責指令的執(zhí)行。它包含有四個16位的數(shù)據(jù)寄存器(AX、BX、CX、DX,每個16位寄存器,均可作為兩個8位寄存器使用)和四個16位的指示器(SP、BP)、變址寄存器(SI、DI),以及執(zhí)行算術(shù)運算和邏輯運算的算術(shù)邏輯單元ALU,狀態(tài)標志寄存器等。
執(zhí)行單元沒有連接到系統(tǒng)總線上,對于系統(tǒng)總線來說,它是外界的。執(zhí)行單元EU從總線接口單元BIU的"指令隊列緩沖器"獲得指令,同樣,當指令要求訪問存儲器或I/O接口電路時,EU向BIU發(fā)出請求,由BIU通過總線獲得存儲數(shù)據(jù)。
§2.2.2 總線接口單元BIU(Bus Interface Unit)
BIU負責與存儲器和I/O接口,即8086CPU與存儲器或I/O接口電路信息傳送都是通過BIU進行的。例如,當BIU從內(nèi)存的指令部分取出指令,送至指令流隊列中排隊,在執(zhí)行指令時所需的操作數(shù),也由BIU從內(nèi)部的指定區(qū)域取出,傳送給EU部分去執(zhí)行。
按照EU的性能,在CPU和存儲器或I/O接口之間傳數(shù)時,EU提供的訪問存儲器的地址是16位的,而8086訪問1MB存儲器空間卻需要20位地址,為了形成20位地址,就必須借助與在BIU中的四個16位的段寄存器(CS,DS,SS,ES)。而偏移量則由指令指示器IP(16位的指針寄存器)提供。
8086總線接口部件由下列各部分組成:
4個段地址寄存器,即:
CS-16位的代碼段寄存器,
DS-16位的數(shù)據(jù)段寄存器,
ES—16位的擴展段寄存器,
SS—16位的堆棧段寄存器;
16位的指令指針寄存器IP;
20位的地址加法器;
6字節(jié)的指令隊列。
使8086CPU的處理速度得到提高的重要原因是取指令和執(zhí)行指令部分是分開的(即兩者在執(zhí)行時間上可以重跌,如圖2-2所示)

于是在一條指令的執(zhí)行過程中,就可取出下一條(或多條)指令,送到指令流隊列中排隊。BIU具有這種預(yù)取指令的功能,就減少了CPU為取指令所需要的等待時間,提高了CPU的利用率,提高了整個運算速度。
在多數(shù)情況下,指令對列機構(gòu)中至少保持一個字節(jié)指令流,EU才不需要等待指令。指令隊列中的指令,就是存放在同現(xiàn)行執(zhí)行指令相連接,而地址又比它高的那些存儲單元的指令。就是說,只要按順序執(zhí)行,在指令隊列中的指令就是緊跟其后的指令。若EU執(zhí)行轉(zhuǎn)移指令時,則BIU清除指令隊列機構(gòu),從新地址取指令,并立即送給EU,然后再從新單元開始,重新填滿隊列機構(gòu)。此外,當EU請求存儲器或I/O接口讀或?qū)憯?shù)據(jù)的時候,BIU就不取指令。
8086CPU采用取指令和執(zhí)行指令這種重迭操作技術(shù)稱為指令的流水線結(jié)構(gòu),它不但提高CPU利用率和整機運行速度,而且降低了對與它相配的存儲器的存取速度的要求。
對總線接口部件,作下面兩點說明:
?、?086的指令隊列為6個字節(jié),8088的指令隊列為4個字節(jié)。不管是8086還是8088都會在執(zhí)行指令的同時,從內(nèi)存中取下面1條指令,取來的指令就放在指令隊列中。這樣,一般情況下,8086/8088執(zhí)行完一條指令就可以立即執(zhí)行下一條指令,而不象以往的計算機那樣,輪番那地進行取指令和執(zhí)行指令的操作,從而提高了CPU的效率。
②地址加法器用來產(chǎn)生20位地址。上面已經(jīng)提到,8086可用20位地址尋址1M字節(jié)的內(nèi)存空間,但8086內(nèi)部所有的寄存器都是16位的,所以需要由一個附加的機構(gòu)來根據(jù)16位寄存器提供的信息計算出20位的物理地址,這個機構(gòu)就是20位的地址加法器。
比如,一條指令的物理地址就是根據(jù)代碼段寄存器IP的內(nèi)容得到的。具體計算時,要將段寄存器的內(nèi)容左移四位,然后再與IP的內(nèi)容相加。假設(shè)CS=FE00H,IP=0200H,此時指令的物理地址為FE200H.
§2.2.3 總線接口單元和執(zhí)行單元的動作管理
總線接口單元和執(zhí)行單元并不是同步工作,但是,兩者的動作管理仍然是有原則的,體現(xiàn)在下面幾個方面:
?、倜慨?086的指令隊列中有2個空字節(jié),或者8088的指令隊列中有一個空字節(jié)時,總線接口部件就會自動把指令取到指令隊列中。
②每當執(zhí)行部件準備執(zhí)行一條指令時,它會從總線揭開部件的指令隊列前部取出指令的代碼,然后用幾個時鐘周期去執(zhí)行指令。在執(zhí)行指令的過程中,如果必須訪問存儲器或者輸入/輸出設(shè)備,那么,執(zhí)行部件就會請求總線接口部件進入總線周期去訪問內(nèi)存或者輸入/輸出端口的操作;如果此時總線接口部件正好處于空閑狀態(tài),那么,會立即響應(yīng)執(zhí)行部件的總線請求。但有時會遇到這樣的情況,執(zhí)行部件請求總線部件訪問總線時,總線接口部件正在將某個指令字節(jié)取到指令隊列中,此時,總線接口部件將首先完成這個指令的總線周期,然后再去響應(yīng)執(zhí)行部件發(fā)出的訪問總線的請求。
③當指令隊列已滿,而且執(zhí)行部件對總線接口部件又沒有總線訪問請求時,總線接口部件便進入空閑狀態(tài)。
?、茉趫?zhí)行轉(zhuǎn)移指令、調(diào)用指令和返回指令時,下面要執(zhí)行的指令就不是在程序中緊接著排列的那條指令了,而總線接口部件往指令隊列裝入指令時,總是按順序進行的,這樣,指令隊列中已經(jīng)裝入了的字節(jié)就沒有用了。遇到這種情況,指令隊列中的原有內(nèi)容被自動清除,總線接口部件會接著往指令隊列中裝入另一個程序段中的指令。
為了更深入了解8086和8088的工作特點,我們來比較一下8086/8088系統(tǒng)與傳統(tǒng)的計算機在工作方式上有什么不同。
傳統(tǒng)的計算機都是按照下面這樣的步驟來工作的:
?、購闹噶钪羔標傅膬?nèi)存單元中取一條指令送到指令寄存器。
?、趯χ噶钸M行譯碼,而指令指針進行增值,以指向下一條指令。
?、蹐?zhí)行指令。如果所執(zhí)行的是轉(zhuǎn)移指令、調(diào)用指令或者返回指令,則重新設(shè)置指令指針的值,以指向下一條要執(zhí)行的指令。
可見,傳統(tǒng)的計算機在執(zhí)行指令時,總是相繼地進行提取指令和執(zhí)行指令的動作,也就是說,指令的提取和執(zhí)行是串行進行的。
相比之下,在8086/8088中,指令的提取和執(zhí)行是分別由總線接口部件和執(zhí)行部件完成的,總線控制邏輯和指令執(zhí)行邏輯之間既相互獨立又相互配合。正是這種互相配合但又非同步的工作方式,使得8086/8088可以在執(zhí)行指令的同時進行提取指令操作。在8086或8088 CPU中,執(zhí)行部件可以不停地執(zhí)行實現(xiàn)已經(jīng)進入指令隊列中的指令。只有當遇到轉(zhuǎn)移指令、調(diào)用指令或返回指令時,或者當某一條執(zhí)行過程中,需要訪問內(nèi)存的次數(shù)過于頻繁,以至于總線接口部件沒有空閑從內(nèi)存將指令提取到指令隊列中時,才需要執(zhí)行部件等待總線接口部件提取指令。而這種情況相對來說是較少發(fā)生的。
8086/8088 CPU中,總線接口部件和執(zhí)行部件的這種工作方式,有力地提高了工作效率,這也正是8086/8088成功的原因之一,并被用在更高檔CPU的設(shè)計中。
§2.2.4 8086的總線周期的概念
為了取得指令或傳送數(shù)據(jù),就需要CPU的總線接口部件執(zhí)行一個總線周期。為了便于敘述后面的內(nèi)容,在此,先對總線周期的概念作一個介紹,在講完8086的基本配置一后,再詳細地講解總線操作。
在8086/8088中,一個最基本的總線周期由4個時鐘周期組成,時鐘周期是CPU的基本時間計量單位,它由計算機主頻決定。比如,8086的主頻為50MHz,1個時鐘周期就是200ns;8086-1的主頻為10MHz,一個時鐘周期為100ns。在1個最基本的總線周期中,習慣上將4個時鐘周期分別稱為4個狀態(tài),即T1狀態(tài)、T2狀態(tài)、T3狀態(tài)、T4狀態(tài)。
?、僭赥1狀態(tài),CPU往多路復(fù)用總線上發(fā)出地址信息,以指出要尋址的存儲單元或外設(shè)端口的地址。
?、谠赥2狀態(tài),CPU從總線上撤消地址,而使總線的低16位浮置成高阻狀態(tài),為傳輸數(shù)據(jù)作準備??偩€的最高4位(A19~A16)用來輸出本周期狀態(tài)信息。這些狀態(tài)信息用來表示中斷允許狀態(tài)、當前正在使用的短寄存器名等。
?、墼赥3狀態(tài),多路總線的高4位繼續(xù)提供狀態(tài)信息,而多路總線的低16位(8088則為低8位)上出現(xiàn)由CPU寫出的數(shù)據(jù)或者CPU從存儲器或端口讀入的數(shù)據(jù)。
?、茉谟行┣闆r下。外設(shè)或存儲器速度較慢,不能及時地配合CPU傳送數(shù)據(jù)。這時,外設(shè)或者存儲器會通過“READY”信號線在T3狀態(tài)啟動之前向CPU發(fā)一個“數(shù)據(jù)未準備好”信號,于是CPU會在T3之后插入1個或多個附加的時鐘周期TW。TW也叫等待狀態(tài),在TW狀態(tài),總線上的信號情況和T3狀態(tài)的信息情況一樣。當指定的存儲器或外設(shè)完成數(shù)據(jù)傳送時,便在“READY”線上發(fā)出“準備好”信號,CPU接收到這一信號,會自動脫離TW狀態(tài)而進入T4狀態(tài)。
?、?在T4狀態(tài),總線周期結(jié)束。
需要指出,只有在CPU和內(nèi)存或I/O接口之間傳輸數(shù)據(jù),以及填充指令隊列,CPU才執(zhí)行總線周期。可見,如果在1個總線周期之后,不立即執(zhí)行下一個總線周期,那么,系統(tǒng)總線就處在空閑狀態(tài),此時,執(zhí)行空閑周期。
在空閑周期中,可以包含1個時鐘周期或多個時鐘周期。這期間,在高4位上,CPU仍然驅(qū)動前一個總線周期的狀態(tài)信息,而且,如果前一個總線周期為寫周期,那么,CPU會在總線低16位上繼續(xù)驅(qū)動數(shù)據(jù)信息;如果前一個總線周期為讀周期沒,則在空閑周期中,總線低16位處于高阻狀態(tài)。
圖表示了一個典型的總線周期序列。
