天天看點

Intel 80386 CPU

一、80386 概述

80386處理器被廣泛應用在1980年代中期到1990年代中期的IBM PC相容機中。這些PC機稱為「80386電腦」或「386電腦」,有時也簡稱「80386」或「386」。80386的廣泛應用,将PC機從16位時代帶入了32位時代。80386的強大運算能力也使PC機的應用領域得到巨大擴充,商業辦公、科學計算、工程設計、多媒體處理等應用得到迅速發展。它的資料總線和位址總線都是32位,直接尋址的記憶體空間4GB,虛拟位址空間為64TB。晶片上內建了27.5萬個半導體,主頻16-33MHz。它是X86第一個真正的32位CPU,它能提供真正的多任務處理和建立虛拟系統的能力。

二、80386的引腳及功能

Intel 80386 CPU

80386 DX有132根引腳,采用PGA(Pin Grid Array,引腳網格陣列)封裝,采用這種封裝工藝單根引腳所占用的面積較雙列直插時小,是以引腳數目可以多一些,不必再采用引腳複用技術。是以,在80386中資料線和位址線是分開設定的,控制信号和狀态信号也不再複用引腳。其中34 條位址線(A31~A2、BE3~BE0),32 條資料線(D31~D0),3 條中斷線,1條時鐘線,13 條控制線,20 條電源線VCC,21條地線VSS,還有8 條為空。

與8086/8088 相比,需要說明以下幾點:

1)時鐘( CLK2): 80386 的基本定時信号由CLK2 提供。CLK2 的頻率是80386 内部時鐘信号頻率的兩倍,輸入該信号與82384 時鐘信号同步,經80386 内部2 分頻之後得到80386 的工作基準頻率信号。

2)資料總線(D31~D0):為80386 和其他裝置之間提供資料通路,32 位資料總線,雙向三态,一次可傳送8 位、16 位或32 位資料,由輸入信号(BE3~BE0)和BE16确定。在任何寫操作周期(包括暫停周期和停機周期),80386 總是驅動資料總線的所有32 位信号,而不管目前總線的實際寬度。

3)位址總線(A31~A2,BE3~BE0) 。

  • A31~A2:位址總線,輸出三态,和BE3~BE0相結合起到32位位址的作用。80386位址總線包含A2~A31位址線和位元組選通線BE3~BE0。BE3~BE0線的功能與8086和80286系統的A0和BHE非常相似,它們是内部位址信号A0和A1的譯碼。由于80386有一個32位資料總線,是以記憶體可以建立4B寬的存儲體。BE3~BE0信号是用來選通這4B個存儲體。這些單獨選通可以使80386 的記憶體傳送或者接收位元組、字或者雙字。
  • BE3~BE0:位元組選通信号。用于選通在目前的傳送操作要涉及4B資料中的哪幾個位元組。BE0對應于D0~D7,BE1對應于D8~D15,BE2對應于D16~D23,BE3對應于D24~D31。

4)總線周期定義信号(M/IO,W/R,D/C,LOCK,三态,輸出,用來定義正在進行的總線周期類型)。

  • M/IO:存儲器/輸入輸出選擇信号,輸出信号。高電平時通路存儲器,低電平時通路I/O 端口。80386 直接I/O 端口簡單地把8086 和80286 端口結構擴充成32 位端口。32 位I/O 端口可以通過并聯8 位I/O 端口裝置(如8255A)來構成。80386 可以使用所有8 位端口位址的IN 或OUT 指令來編址256 個8 位端口、128 個16 位端口、64 個32 位端口。使用DX 寄存器存放16 位端口位址,80386 可以編址64K 個8 位端口、32K 個16 位端口或8K 個32 位端口。
  • W/R:讀/寫控制輸出信号,高電平時寫入,低電平時讀出。
  • D/C:資料/指令控制信号,輸出。高電平時傳送資料,低電平時傳送指令代碼,D/C訓示總線操作是一個資料讀/寫還是控制字傳輸(如取一個操作碼)。
  • W/R、D/C、M/IO是總線周期定義信号。當80386 驅動ADS(位址狀态)輸出信号有效時,這3個信号被驅動為有效,根據3 個信号的功能可得到總線周期定義,見表3-8。
  • LOCK:總線周期封鎖信号,低電平有效。

5)總線控制信号(ADS,READY,NA,BE16)。

這組信号用來表示總線周期何時開始,以及資料總線的寬度和總線周期的終結。

  • ADS:位址選通信号,三态輸出,低電平有效。當有效時,表示總線周期中位址信号有效。當有效位址、BE信号和總線周期定義信号均在總線上時,ADS信号将被設定。因為80386 位址總線是不可複用的,是以8086 類型的ALE 信号是不需要的。但是,在某些80386 系統中,ADS信号用于一種稱為位址流水線的模式,将位址傳送到外部鎖存器。位址流水線的原理:如果一個位址保持在外部鎖存器的輸出端,80386 就可以把位址引腳上的“老”位址清除,并在總線周期的前期輸出下一個操作的位址。外部控制晶片通過設定下一個位址信号來通知80386 何時為下一個操作輸出位址。對一個有SRAM 高速緩沖的系統,流水線位址模式通常不是必需的,因為SRAM 高速緩沖已足夠快了,不需要等待狀态。
  • READY:準備就緒,輸入信号,低電平有效。READY有效時表示目前總線周期已完成。信号用來在總線周期中根據低速的記憶體或I/O 裝置接口的需要插入等待狀态。
  • NA:下一個位址請求信号,輸入信号,低電平有效。允許位址流水線操作,當其有效時,表示目前執行中的周期結束之後,下一個總線周期的位址和狀态信号可變為有效。
  • BE16:輸入信号,低電平有效,指定16 位資料總線。BE16輸入端允許80386以16位和/或32位資料總線工作。如果設定了BE16,那麼80386隻将資料傳送到32位資料總線的低16位上。如果設定了BE16并且要從16位寬記憶體中讀一個32位的操作數,那麼80386将自動産生一個第二總線周期來讀第二個字。對于未調整的傳輸,如果設定了BE16,那麼80386 也産生所需數目的總線周期。

6)總線仲裁信号(HOLD,HLDA) :由總線請求主裝置來控制該組信号。

  • HOLD:總線請求信号,輸入信号,高電平有效。
  • HLDA:總線保持響應信号,輸出信号,有效時,CPU 讓出總線。

7)協處理器接口信号(PEREQ,BUSY,ERROR) :控制80386 同80287 或80387 之間的通信。

  • PEREQ:來自協處理器的請求信号,輸入信号,表示80387 要求80386 控制它們與存儲器之間的資訊傳送。PEREQ 信号是由一個像80387 浮點處理器這樣的協處理器輸出的,它通知80386 為協處理器取資料字的第一部分,然後協處理器将接管總線并讀資料字的其餘部分。
  • BUSY:協處理器忙,輸入信号,低電平有效。BUSY信号由協處理器使用。以避免80386 在協處理器結束目前指令之前又繼續下一條指令。
  • ERROR:協處理器錯誤信号,輸入信号,低電平有效。如果協處理器設定了ERROR 信号,80386 将執行類型為16 的異常中斷。

8)中斷信号( INTR,NMI,RESET) :用來引起中斷或中止80386 正在執行的指令流。

  • INTR:可屏蔽中斷請求,輸入信号。80386 響應INTR 請求時,完成兩個連續的中斷響應周期,在整個響應周期,LOCK信号有效。在第二個周期末,D0~D7資料線上送出8位中斷類型碼,以識别中斷源。INTR信号可以由80386的标志寄存器中的IF位屏蔽。
  • NMI:非屏蔽中斷請求,輸入信号。80386對NMI的處理不運作中斷響應周期,而是自動産生一個中斷類型2。
  • RESET:複位信号,輸入信号,當RESET 有效時,将中止80386 正在執行的一切操作,并置于一個已知的複位狀态。複位期間的80386 的有關引腳的狀态見表3-9。

80386有許多VCC 腳,也有許多标為VSS 的地線,這些引腳均被接到PC闆合适的電平上。

三、80386内部結構

Intel 80386 CPU

上圖可簡化為如下圖:

Intel 80386 CPU
  • 總線接口部件  它通過資料總線、位址總線、控制總線來與外部環境聯系,包括從存儲器中預取指令、讀寫資料,從I/O端口讀寫資料,以及其他的控制功能。資料總線和位址總線都是32位的,由于它們是分開的,是以從存儲器中存儲資料最快也需要兩個時鐘周期内完成。
  • 指令預取部件   IPU:它将存放在存儲器中的指令經BIU取到16位元組長的預取指令隊列中,并向指令譯碼部件輸送指令。
  • 指令譯碼部件   IDU :從IPU中取出指令進行譯碼分析,然後将其放入IDU中的譯碼指令隊列中,供執行部件使用。(容納3條以譯碼的指令)
  •  執行部件  EU: 執行部件EU包含算數邏輯單元ALU,8個32位的通用寄存器,一個64位的多位移位加法器,執行資料處理和運算操作
  • 存儲管理部件(MMU)由分段部件和分頁機構組成,實作了從邏輯位址到實體位址的轉換,既支援段式存儲管理、頁式存儲管理,也支援段頁存儲管理。它存儲器采用段、頁式結構,80386首次将分頁機制引入到80X86結構,每頁大小為4KB。
  • 分段部件  SU: 按指令要求,分段部件SU将指令中的邏輯位址轉換成線性位址。
  • 分頁部件  PU:分頁部件PU将分段部件SU産生的線性位址轉換成實體位址,每頁容量4KB.當系統不使用分頁功能時,線性位址就是實體位址。

四、80386的寄存器

80386的寄存器結構 80386微處理器共有7類34個寄存器,通用寄存器組、段寄存器、指令指針和标志寄存器、系統位址寄存器、控制寄存器、調試寄存器、測試寄存器。

Intel 80386 CPU

(1)通用寄存器組:共有8個32位寄存器,EAX, EBX,ECX,EDX,ESP,EBP,ESI,EDI。它們由8086的16位寄存器擴充而來,它們的低16位與8086使用方法相同。

(2)段寄存器:共有6個16位的段寄存器CS、DS、SS、ES、FS、GS。與這6個段寄存器對應的有6個64位描述符寄存器,它是80X86處理器提供的一種附加的非程式設計的寄存器,用來裝64的段描述符,每當一個段選擇符被裝入段寄存器是,相應的段描述符就由記憶體裝入到對應的非程式設計的CPU寄存器。其中CS、DS、SS、ES與8086的段寄存器完全相同,在實位址方式下,使用方法也與8086相同;在虛位址保護方式下,這些寄存器中的值是“段選擇符”,需要查全局描述符表(GDT)或者局部描述符表(LDT)來獲得段的基位址,再加上偏移位址才能得到線性位址。 FS和GS是新加的附加資料段寄存器,可以由使用者将FS、GS定義為其他資料段。

(3)指令指針和标志寄存器:指令指針寄存器EIP,由8086的IP寄存器擴充而來。标志寄存器EFLAGS包含一組狀态标志、一個控制标志、一組系統标志,圖四定義該寄存器中的标志位。

Intel 80386 CPU

标志寄存器EFLAGS的低12位與8086的标志寄存器FLAGS一樣。IOPL位表示特權标志位,定義目前任務的特權層。NT位表示任務嵌套标志位,當NT位為1時表明目前執行的任務嵌套在另外一個任務中,否則NT位為0。RF位表示重新啟動标志位,與調試寄存器一起用于斷點和單步操作,RF位為1時表明下一條指令的調試故障将被忽略,不産生中斷異常;RF位位0時表示調試故障被接受并産生中斷異常。由于調測失敗後強迫程式恢複執行;在每條指令成功執行後,RF自動複位。VM位表示虛拟模式标志位,VM位為1時表明80386工作在保護虛拟位址方式。前4個定義從80286開始,後面的2個定義從80386開始存在。另外的三個标志是Pentium以後的CPU才有的。VIF(Virtual interrupt flag)表示虛拟中斷标志。當VIF=1時,可以使用虛拟中斷,當VIF=0時不能使用虛拟中斷。該标志要和下面的VIP和CR4中的VME配合使用。VIP(Virtual interrupt pending flag)表示虛拟中斷挂起标志。當VIP=1時,VIF有效,VIP=0時VIF無效。ID(Identification flag)表示鑒别标志。該标志用來隻是Pentium CPU是否支援CPUID的指令。

(4) 系統位址寄存器和系統段寄存器:系統位址寄存器有全局描述符表寄存器GDTR、中斷描述符表寄存器IDTR。系統段寄存器有局部描述符表寄存器LDTR和任務寄存器TR。這些寄存器儲存相應的描述符表的位址。

(5) 控制寄存器:4個32位的控制寄存器CR0,CR1,CR2,CR3,它們儲存全局性的機器狀态,其基本定義如圖五。從Pentium開始,又增加了一個CR4。下面來簡單介紹控制寄存器中的位。

Intel 80386 CPU

1)CR0的低16位包含了與80286的MSW一緻的位定義,保持了和80286的相容,同時也相容了從80286開始的兩條指令LMSW/SMSW。指令LMSW和SMSW分别用于裝入和儲存機器狀态字資訊,可以通過MOV指令對CR0進行讀寫操作。CR0中各位含義如下:

PE(Protection Enable)保護模式允許位,用來啟動CPU進入虛位址保護方式。PE=0表示CPU工作在實位址方式;PE=1表示CPU工作在虛位址保護方式。

MP(Monitor Coprocessor)監控協處理器,MP=1表示協處理器在工作;MP=0表示協處理器未工作。 

EM(Emulation)協處理器仿真,當MP=0,EM=1時,表示正在使用軟體仿真協處理器工作。 

TS(Task Switched)任務轉換,每當進行任務轉換時,TS=1;任務轉換完畢,TS=0。TS=1時不允許協處理器工作。  

ET(Extension Type)處理器擴充類型,反映了所擴充的協處理器的類型,ET=0為80287,ET=1為80387。 

PG(Paging)頁式管理機制使能,PG=1時頁式管理機制工作,否則不工作。

NE(Numeric Error)數值異常中斷控制,NE=1時,如果運作協處理器指令發生故障,則用異常中斷處理,NE=0時,則用外部中斷處理。 

WP(Write Protect)寫保護,當WP=1時,對隻讀頁面進行寫操作會産生頁故障。

AM(Alignment Mask)對齊标志,AM=1時,允許對齊檢查,AM=0時不允許,關于對齊,在EFLAGS的AC标志時介紹過,在80486以後的CPU中,CPU進行對齊檢查需要滿足三個條件,AC=1、AM=1并且目前特權級為3。 

NW(Not Write-through)和CD(Cache Disable),這兩個标志都是用來控制CPU内部的CACHE的,當NW=0且CD=0時,CACHE使能,其它的組合比較複雜。

前4個定義從80286開始,接着的2個定義從80386開始存在, 後面4個是從80486開始定義的。

2)CR1寄存器用來保留給Intel微處理器将來開發使用;CR2寄存器包含一個32位的線性位址,指向發生最後一次也故障的位址,隻有在PG=1時,CR2才有效,當頁故障處理程式被激活時,壓入頁故障處理程式堆棧中的錯誤碼提供頁故障的狀态資訊;CR3寄存器中包含頁實體目錄表的實體基位址,由于每4KB為一頁,80386中的頁目錄表總在頁的整數邊界上,CR3的低13位總是為0,隻有當CR0中的PG=1時,CR3的頁目錄基位址才有效。

(6) 調試寄存器:共8個排錯寄存器DR0~DR7。DR0~DR3可以分别設定4個斷點的線性位址,DR4~DR5保留未用,DR6是斷點狀态寄存器,DR7是斷點控制寄存器(包括斷點類型、斷點長度,斷點開放/禁止)。

(7) 測試寄存器:2個32位的測試寄存器TR6和TR7,用于控制轉換後援緩沖器中的RAM測試,其中TR6為指令測試寄存器,TR7為測試資料寄存器。