Intel 8086 CPU


一、8086概述

Intel8086擁有四個16位的通用寄存器,也能夠當作八個8位寄存器來存取,以及四個16位索引寄存器(包含了堆棧指標)。資料寄存器通常由指令隱含地使用,針對暫存值需要復雜的寄存器配置。它提供64K8位元的輸出輸入(或32K16位元),以及固定的向量中斷。大部分的指令只能夠存取一個內存位址,所以其中一個操作數必須是一個寄存器。運算結果會儲存在操作數中的一個寄存器。

Intel8086有四個內存區段(segment)寄存器,可以從索引寄存器來設定。區段寄存器可以讓CPU利用特殊的方式存取1MB內存。8086把段地址左移4位然后把它加上偏移地址。大部分的人都認為這是一個很不好的設計,因為這樣的結果是會讓各分段有重疊。盡管這樣對組合語言而言大部分被接受(也甚至有用),可以完全地控制分段,使在編程中使用指針(如C編程語言)變得困難。它導致指針的高效率表示變得困難,且有可能產生兩個指向同一個地方的指針擁有不同的地址。更壞的是,這種方式產生要讓內存擴充到大於1MB的困難。而8086的尋址方式改變讓內存擴充較有效率。

8086處理器的時鍾頻率介於4.77MHz(在原先的IBMPC頻率)和10MHz之間。8086沒有包含浮點指令部分(FPU),但是可以通過外接數學輔助處理器來增強浮點計算能力。Intel8087是標准版本。

二、8086引腳圖及功能

 

⑴AD15~AD0(addressdatabus):地址/數據總線,雙向,三態。

  這是一組采用分時的方法傳送地址或數據的復用引腳。根據不同時鍾周期的要求,決定當前是傳送要訪問的存儲單元或I/O端口的低16位地址,還是傳送16位數據,或是處於高阻狀態。

⑵A19/S6~A16/S3(address/status):地址/狀態信號,輸出,三態。

  這是采用分時的方法傳送地址或狀態的復用引腳。其中A19~A16為20位地址總線的高4位地址,S6~S3是狀態信號。S6表示CPU與總線連接的情況,S5指示當前中斷允許標志IF的狀態。S4,S3的代碼組合用來指明當前正在使用的段寄存器。S4,S3的代碼組合及對應段寄存器的情況。

⑶BHE(低)/S7(bushighenable/status):允許總線高8位數據傳送/狀態信號,輸出,三態。

  為總線高8位數據允許信號,當低電平有效時,表明在高8位數據總線D15~D8上傳送1個字節的數據。S7為設備的狀態信號。

⑷RD/(read):讀信號,輸出,三態,低電平有效。

  信號低電平有效時,表示CPU正在進行讀存儲器或讀I/O端口的操作。

⑸READY(ready):准備就緒信號,輸入,高電平有效。

  READY信號用來實現CPU與存儲器或I/O端口之間的時序匹配。當READY信號高電平有效時,表示CPU要訪問的存儲器或I/O端口已經作好了輸入/輸出數據的准備工作,CPU可以進行讀/寫操作。當READY信號為低電平時,則表示存儲器或I/O端口還未准備就緒,CPU需要插入若干個“TW狀態”進行等待。

⑹INTR(interruptrequest):可屏蔽中斷請求信號,輸入,高電平有效。

  8086CPU在每條指令執行到最后一個時鍾周期時,都要檢測INTR引腳信號。INTR為高電平時,表明有I/O設備向CPU申請中斷,若IF=1,CPU則會響應中斷,停止當前的操作,為申請中斷的I/O設備服務。

⑺TEST/(test):等待測試控制信號,輸入,低電平有效。

  信號用來支持構成多處理器系統,實現8086CPU與協處理器之間同步協調的功能,只有當CPU執行WAIT指令時才使用。

⑻NMI(non-maskableinterrupt):非屏蔽中斷請求信號,輸入,高電平有效。

  當NMI引腳上有一個上升沿有效的觸發信號時,表明CPU內部或I/O設備提出了非屏蔽的中斷請求,CPU會在結束當前所執行的指令后,立即響應中斷請求。

⑼RESET(reset):復位信號,輸入,高電平有效。

  RESET信號有效時,CPU立即結束現行操作,處於復位狀態,初始化所有的內部寄存器。復位后各內部寄存器的狀態,當RESET信號由高電平變為低電平時,CPU從FFFF0H地址開始重新啟動執行程序。

⑽CLK(clock):時鍾信號,輸入。

  CLK為CPU提供基本的定時脈沖信號。8086CPU一般使用時鍾發生器8284A來產生時鍾信號,時鍾頻率為5MHz~8MHz,占空比為1:3。

⑾VCC電源輸入引腳。

  8086CPU采用單一+5V電源供電。

⑿GND:接地引腳。

⒀MN/MX/(minimum/maximum):最小/最大模式輸入控制信號。

  引腳用來設置8086CPU的工作模式。當為高電平(接+5V)時,CPU工作在最小模式;當為低電平(接地)時,CPU工作在最大模式。

、8086工作模式

1、最小模式

用於由8086單一微處理器構成的小系統。在這種方式下,由8086CPU直接產生小系統所需要的全部控制信號。器系統特點是:總線控制邏輯直接由8086CPU產生和控制。若有CPU以外的其他模塊想占用總線,則可以向CPU提出請求,在CPU允許並響應的情況下,該模塊才可以獲得總線控制權,使用完后,又將總線控制權還給CPU。

當引腳接高電平時,CPU工作於最小模式。此時,引腳信號24~31的含義及其功能如下。

⑴M/IO/(memoryI/Oselect):存儲器、I/O端口選擇控制信號。

  信號指明當前CPU是選擇訪問存儲器還是訪問I/O端口。為高電平時,訪問存儲器,表示當前要進行CPU與存儲器之間的數據傳送。為低電平時,訪問I/O端口,表示當前要進行CPU與I/O端口之間的數據傳送。

⑵WR/(write):寫信號,輸出,低電平有效。

  信號有效時,表明CPU正在執行寫總線周期,同時由信號決定是對存儲器還是對I/O端口執行寫操作。

⑶INTA/(interruptacknowledge):可屏蔽中斷響應信號,輸出,低電平有效。

  CPU通過信號對外設提出的可屏蔽中斷請求做出響應。為低電平時,表示CPU已經響應外設的中斷請求,即將執行中斷服務程序。

⑷ALE(addresslockenable):地址鎖存允許信號,輸出,高電平有效。

  CPU利用ALE信號可以把AD15~AD0地址/數據、A19/S6~A16/S3地址/狀態線上的地址信息鎖存在地址鎖存器中。

⑸DT/(datatransmitorreceive):數據發送/接收信號,輸出,三態。

  DT/信號用來控制數據傳送的方向。DT/為高電平時,CPU發送數據到存儲器或I/O端口;DT/為低電平時,CPU接收來自存儲器或I/O端口的數據。

⑹DEN/(dataenable):數據允許控制信號,輸出,三態,低電平有效。

  信號用作總線收發器的選通控制信號。當為低電平時,表明CPU進行數據的讀/寫操作。

⑺HOLD(busholdrequest):總線保持請求信號,輸入,高電平有效。

  在DMA數據傳送方式中,由總線控制器8237A發出一個高電平有效的總線請求信號,通過HOLD引腳輸入到CPU,請求CPU讓出總線控制權。

⑻HLDA(holdacknowledge):總線保持響應信號,輸出,高電平有效。

  HLDA是與HOLD配合使用的聯絡信號。在HLDA有效期間,HLDA引腳輸出一個高電平有效的響應信號,同時總線將處於浮空狀態,CPU讓出對總線的控制權,將其交付給申請使用總線的8237A控制器使用,總線使用完后,會使HOLD信號變為低電平,CPU又重新獲得對總線的控制權。

2、最大模式

用於實現多處理機系統,其中,8086CPU被稱為主處理器,其他處理器被稱為協處理器。在這種方式下,8086CPU不直接提供用於存儲器或I/O讀寫的讀寫命令等控制信號,而是將當前要執行的傳送操作類型編碼為3個狀態位輸出,由總線控制器8288對狀態信號進行譯碼產生相應控制信號。最大模式系統的特點是:總線控制邏輯由總線控制器8288產生和控制,即8288將主處理器的狀態和信號轉換成系統總線命令和控制信號。協處理器只是協助主處理器完成某些輔助工作,即被動的接受並執行來自主處理器的命令。和8086配套使用的協處理器有兩個:一個是專用於數值計算的協處理器8087,另一個是專用於輸入輸出操作的協處理器8089。8087通過硬件實現高精度整數浮點數運算。8089有其自身的一套專門用於輸入輸出操作的命令系統,還可帶局部存儲器,可以直接為輸入輸出設備服務。增加協處理器,使得浮點運算和輸入輸出操作不再占用8086時間,從而大大提高了系統的運行效率。

當引腳接低電平時,CPU工作於最大模式。此時,引腳信號24~31的含義及其功能如下。

⑴S2,S1,S0(statussignals):總線周期狀態信號,輸出,低電平有效。

⑵RQ/,GT/(request/grant):總線請求允許信號輸入/總線請求允許輸出信號,雙向,低電平有效。

  該信號用以取代最小模式時的HOLD/HLDA兩個信號的功能,是特意為多處理器系統而設計的。當系統中某一部件要求獲得總線控制權時,就通過此信號線向8086CPU發出總線請求信號,若CPU響應總線請求,就通過同一引腳發回響應信號,允許總線請求,表明8086CPU已放棄對總線的控制權,將總線控制權交給提出總線請求的部件使用。RQ/GT0優先級高於RQ/GT1。

⑶LOCK/(lock)總線封鎖信號,輸出,低電平有效。

  信號有效時,表示此時8086CPU不允許其他總線部件占用總線。

⑷QS1,QS0(queuestatus):指令隊列狀態信號,輸出。

  QS1和QS0信號的組合可以指示總線接口部件BIU中指令隊列的狀態,以便其他處理器監視、跟蹤指令隊列的狀態。

四、8086結構

總線接口單元(BIUbusinterfaceunit)

 

總線接口部件由下列各部分組成

⑴4個段地址寄存器:

  CS(codesegment)——16位的代碼段寄存器;

  DS(datasegment)——16位的數據段寄存器;

  ES(extrasegment)——16位的擴展段寄存器;

  SS(stacksegment)——16位的堆棧段寄存器;

⑵16位的指令指針寄存器IP;

⑶20位的地址加法器;

⑷6字節的指令隊列緩沖器。

執行單元

執行部件由下列幾個部分組成:

⑴8個通用寄存器:即AX、BX、CX、DX,BP,SP,SI,DI;

       其中,4個數據寄存器:AX、BX、CX、DX;

  2個地址指針寄存器:BP(basepointer),SP(stackpointer);

  2個變址寄存器:SI(sourceindex),DI(destinationindex)[2];

⑵標志寄存器FR(flagsregister);

⑶算術邏輯單元ALU(arithmeticlogicunit)。

  EU負責全部指令的執行,同時向BIU輸出數據(操作結果),並對寄存器和標志寄存器進行管理。在ALU中進行16位運算,數據傳送和處理均在EU控制下執行。

 

五、8086系統組成

8086是一種微處理器,再加上必須的支持芯片,如時鍾發生器,地址鎖存器,總線驅動器,存儲器和I/O接口等,才能構成一台完整的微型計算機。根據外部設備的數量和系統復雜程度,8086可以選用兩種系統構成模式,最小模式和最大模式。最小模式是單CPU系統,在這種系統中,8086的MN/MX引腳接高電平,系統全部的控制信號都直接由CPU提供。最大模式是多CPU系統,此時MN/MX引腳接低電平,必須通過8288總線控制器對CPU的狀態信息進行譯碼才能產生系統必須的控制信號。

最小模式系統構成如圖所示。這時8086的MN/MX引腳接至VCC,它直接產生存儲器和I/O端口的讀寫命令,如IO/M,RD,WR,INTA,直接產生地址鎖定信號ALE,控制數據收發器的控制信號DT/R,DEN.

 

1.地址鎖存

8086的AD15~~AD0是地址/數據復用線,即CPU與存儲器進行信息交換時,首先在T1狀態,先由CPU送出訪問存儲單元的地址信息到AD15~~AD0上,隨后又用在些線來傳送數據所以在數據送上總線以前,必須先將地址鎖存起來。可用8282或74LS373鎖存8086的單向地址AD15~~AD0.圖7-9中使用三片8282,這是因為8282只具有8位鎖存功能,而8086具有20位地址和一根BHE信號。若系統存儲器容量較小,使用不到20位地址信息,也可只用2片8282.圖中OE端接地,使鎖存器永遠處於允許輸出狀態。引腳STB接8086的ALE輸出。在總線周期T1狀態,ALE上出現正脈沖,它的下降沿將8282輸入端的地址信息存入鎖存器,並由輸出端送入地址總線。

2.雙向數據總線驅動器

CPU可以直接將數據發送到數據總線上。而無需鎖存。為了增加總線負載能力,CPU數據總線一般要加上驅動器,且要求雙向驅動器,一般采用8位雙向驅動器8286或74LS245.由於8086數據總線是16位的,所以要用2片8286.8286的Ai引腳接CPU的ADi,其Di引腳接到系統數據總線D1上,並將8086的DT/R接8286的T引腳,當DT/R為高電平時,數據從CPU發送到數據總線上.DT/R為低電平時,CPU從數據總線上接收數據.8286的OE腳接8086的DEN腳。當8086的DEN為低電平時,才允許數據輸入或輸出。

3.時鍾發生器/驅動器

8086所需時鍾脈沖CLK由8284提供.8284輸出時鍾CLK的頻率,取決X1,X2跨接石英晶體的頻率。除此以外,8284還向8086提供定時和寬度符合要求的RESET復位信號及符合要求的READY信號。

4.存儲器部件

8086能直接尋址1MB存儲空間。這個存儲空間分為兩個512KB存儲體。一個存儲體由奇地址單元組成,用於存儲16數據的高字節,另一個存儲體由偶地址單元組成,用於存儲16位數據低字節。前者稱為奇地址存儲器,后者稱為偶地址存儲體。偶地址存儲體的8位數據總線接CPU的數據總線D7~~D0,而奇地址存儲體8位數據線接數據總線D15~~D8.地址線A19~~A1同時接到兩個存儲體,而A0作為偶地址選中信號即A0=0時,選中偶存儲體.BHE作為奇地址片選信號,BHE=0時選中奇存儲體。所以兩個存儲體可以同時讀出或寫入,也可單獨選中一個存儲體。

5.I/O端口

一個完整的微機系統必須有I/O設備.I/O設備都有端口地址號.CPU通過地址總線發出端口地址,經過端口地址譯碼器輸出,送到端口的片選引腳而選定指定的端口.8086根據執行命令是訪問存儲器指令還是輸入輸出指令,來使M/IO控制信號是高電平或是低電平,以區分地址總線上的地址是訪問存儲器還是訪問外設.

六、8086的內存管理

8086CPU有20為地址線,那么它能尋址的范圍220B=1048576B=1024KB=1MB。但是在CPU內部的總線是十六位的,它是如何管理1M的空間的呢?秘密在BIU區域存在一個地址加法器,地址線經過這個加法器之后從16位變成了20位。那么這個過程是如何實現的呢?
CPU內部的數據總線和段寄存器都是16位的,用它們做地址寄存器只能尋址64KB單元,但是8086的實際物理地址有1MB,如何解決這個問題呢?采用分段技術。什么是分段技術?將1MB的內存空間分成若干段,每一段的第一個地址稱為段首址,並且用段首址來表示這一段的內存地址。段首址必須要能被16整除,為什么呢?這樣的話,段首址就可以用16位來保存,低4位全部為零,高16位可放在段寄存器中。
介紹幾個概念:
邏輯地址:邏輯地址是一對,包括段首址和偏移地址,如代碼段表示為CS:IP。
偏移地址:相對於段首址的偏移量,放在 IP 寄存器里面。
物理地址:實際的內存地址,用20bit表示。
段首址用段寄存器來表示,包括CS(代碼段)、DS(數據段)、SS(堆棧段)和ES(附加段)。偏移地址用 IP 來表示。如上圖所示。
舉個例子:如果一個內存地址(物理地址)為:2304AH,段首址為2304H。那么邏輯地址為:2304H:000AH。這一段內存的實際長度可以用偏移量表示,大小為0000H ~ FFFFH,也就是64KB。

那么邏輯地址是如何變成物理地址呢?這也就是前言中提到的問題。公式如下:
物理地址 = 對應寄存器 * 10H + 段內偏移量

還是剛剛那個例子,2304H * 10H = 23040H
23040H + 0000AH = 2304AH
結論

地址加法器就是進行這樣一個運算:物理地址 = 對應寄存器 * 10H + 段內偏移量
對應寄存器指的是:CS、DS、SS、ES 寄存器里面的值,段內偏移量指的是IP寄存器里面的值。如此16的CPU可以尋址1MB的內存空間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM