微機第3章學習資料_第1頁
微機第3章學習資料_第2頁
微機第3章學習資料_第3頁
微機第3章學習資料_第4頁
微機第3章學習資料_第5頁
已閱讀5頁,還剩226頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章80x86微處理器3.180x86微處理器簡介3.28086/8088微處理器3.38086/8088存儲器和I/O組織3.4從80286到Pentium系列的技術發(fā)展3.180x86微處理器簡介

80x86微處理器是美國Intel公司生產的系列微處理器。本節(jié)簡要介紹Intel公司80x86系列微處理器的發(fā)展過程及其特性。

80x86系列微處理器概況。

“集成度”是指CPU芯片中所包含的晶體管數(shù)。

“主頻”是指芯片所使用的主時鐘頻率,它直接影響計算機的運行速度?!皵?shù)據(jù)總線”是計算機中各個組成部件間進行數(shù)據(jù)傳送時的公共通道,顯然,數(shù)據(jù)總線位數(shù)越多,數(shù)據(jù)交換的速度就越快。

“內數(shù)據(jù)總線寬度”與“外數(shù)據(jù)總線寬度”

“地址總線”是在對存儲器或I/O端口進行訪問時,傳送CPU要訪問的存儲單元或I/O端口的地址信息的總線,其寬度決定了處理器能直接訪問的主存容量大小。如8086有20根地址線,使用這20根地址線上不同地址信息的組合,可直接對220=1M個存儲單元進行訪問;PentiumII有36根地址線,因此它可直接尋址的最大地址范圍為236=64G。

高速緩沖存儲器Cache的使用,大大減少了CPU讀取指令和操作數(shù)所需的時間,使CPU的執(zhí)行速度顯著提高。為了滿足微型計算機對存儲器系統(tǒng)高速度、大容量、低成本的要求,微機系統(tǒng)常采用三級存儲器組織結構,即由高速緩沖存儲器Cache、主存和外存組成。

表3.180x86系列微處理器概況高速緩沖存儲器(Cache)

微處理器CPU

主存儲器(主存)

外存儲器(外存)

圖3.1存儲器三級結構當前正在執(zhí)行的程序或要使用的數(shù)據(jù)必須從外存調入主存后才能被CPU讀取并執(zhí)行,主存容量通常為MB級(理論上可達GB級,如PentiumII可配置的內存最大容量可達236=64G,但事實上,微型計算機內存配置一般都不會達到其理論允許值);當前沒有使用的程序可存入外存,如硬盤、軟盤、光盤等,外存的容量通常很大,可達GB甚至TB級;

高速緩沖存儲器的最大特點是存取速度快,但容量較小,通常為KB級,將當前使用頻率較高的程序和數(shù)據(jù)通過一定的替換機制從主存放入Cache,高速緩沖存儲器的最大特點是存取速度快,但容量較小,通常為KB級,將當前使用頻率較高的程序和數(shù)據(jù)通過一定的替換機制從主存放入Cache.CPU在取指令或讀取操作數(shù)時,同時對Cache和主存進行訪問,如果Cache命中,則終止對主存的訪問,直接從Cache中將指令或數(shù)據(jù)送CPU處理,由于Cache的速度比主存快得多,因此,Cache的使用大大提高了CPU讀取指令或數(shù)據(jù)的速度。

80386及之前的CPU都沒有Cache。與80386配套使用的Intel82385Cache控制器實現(xiàn)CPU之外的Cache管理。80486之后的CPU芯片內部都集成了一至多個Cache。

80x86CPU在發(fā)展過程中,存儲器的管理機制發(fā)生了較大變化。8086/8088CPU對存儲器的管理采用的是分段的實方式;80286CPU除了可在實方式下工作外,還可以在保護方式下工作;而80386CPU之后的處理器則具有三種工作方式:實方式、保護方式和虛擬8086方式。在保護方式下,機器可提供虛擬存儲管理和多任務管理機制。虛擬存儲的實現(xiàn),為用戶提供了一個比實際主存空間大得多的程序地址空間,從而可使用戶程序的大小不受主存空間的限制。多任務管理機制的實現(xiàn),可允許多個用戶或一個用戶的多個任務同時在機器上運行。從80386開始,微處理器除支持實方式和保護方式外,又增加了一種虛擬8086方式。在這種方式下,一臺機器可以同時模擬多個8086處理器的工作。3.28086/8088微處理器

8086是Intel系列的16位微處理器。

8086有16條數(shù)據(jù)總線,可以處理8位或16位數(shù)據(jù)。有20條地址總線,可以直接尋址1M(220)字節(jié)的存儲單元和64K個I/O端口。在8086推出后不久,Intel公司很快推出了8088微處理器,其指令系統(tǒng)與8086完全兼容,CPU內部結構仍為16位,但外部數(shù)據(jù)總線是8位的,這樣設計的目的主要是為了與原有的8位外圍接口芯片兼容。3.2.1

8086/8088內部結構1.總線接口單元BIU2.執(zhí)行單元EU

一.總線接口單元BIU

總線接口單元BIU的功能是負責完成CPU與存儲器或I/O設備之間的數(shù)據(jù)傳送。具體任務是:①指令隊列出現(xiàn)空字節(jié)時,從內存取出后續(xù)指令。BIU取指令時,不影響EU的執(zhí)行,兩者并行工作,提高了CPU的速度②EU需要和內存或外設端口交換數(shù)據(jù)時,由BIU根據(jù)EU給出的地址與內存或外設端口交換數(shù)據(jù)圖3.28086CPU內部結構框圖20位地址加法器

8086/8088CPU在對存儲單元進行訪問以讀取指令或讀/寫操作數(shù)時,必須在地址總線上提供20位的地址信息,以便選中對應的存儲單元。

CPU提供的用來對存儲單元進行訪問的20位地址是由BIU中的地址加法器產生的。存儲器中每個存儲單元的地址可有以下兩種表示方式:

邏輯地址:表示為“16位段地址:16位段內偏移地址”。

物理地址:CPU與存儲器進行數(shù)據(jù)交換時在地址總線上提供的20位地址信息稱為物理地址。由邏輯地址求物理地址的公式為:

物理地址=段地址

10H+段內偏移地址

圖3.3物理地址的形成

指令隊列緩沖器

8086的指令隊列有6個字節(jié),8088的指令隊列有4個字節(jié)。對8086而言,當指令隊列出現(xiàn)2個空字節(jié),對8088而言,指令隊列出現(xiàn)1個空字節(jié)時,BIU就自動執(zhí)行一次取指令周期,將下一條要執(zhí)行的指令從內存單元讀入指令隊列。它們采用“先進先出”原則,按順序存放,并按順序取到EU中去執(zhí)行。指令隊列的引入使得EU和BIU可并行工作,提高了CPU的利用率,加快了整機的運行速度。

二.執(zhí)行單元EU

執(zhí)行單元EU的功能只是負責執(zhí)行指令。執(zhí)行的指令從BIU的指令隊列緩沖器中直接得到,執(zhí)行指令時若需要從存儲器或I/O端口讀取操作數(shù)時,由EU向BIU發(fā)出請求,再由BIU對存儲器或I/O端口進行訪問。

8088CPU內部結構與8086基本相似,所以兩種CPU完全兼容。區(qū)別僅在于總線接口單元BIU的差異:

1.外部數(shù)據(jù)總線位數(shù)不同。

2.指令隊列緩沖器大小不同。

3.部分引腳的功能定義有所區(qū)別。3.2.28086/8088寄存器結構

一.通用寄存器通用寄存器包括四個數(shù)據(jù)寄存器,兩個地址指針寄存器和兩個變址寄存器。

1.數(shù)據(jù)寄存器AX、BX、CX、DX

數(shù)據(jù)寄存器一般用于存放參與運算的操作數(shù)或運算結果。每個數(shù)據(jù)寄存器都是16位的,但又可將高、低8位分別作為兩個獨立的8位寄存器來用。高8位分別記作AH、BH、CH、DH,低8位分別記作AL,BL,CL,DL。其它寄存器都不能如此使用。上述4個寄存器一般用來存放數(shù)據(jù),但它們各自都有自己的特定用途:

AX(Accumulator)稱為累加器。所有的I/O指令和乘除指令都要使用該寄存器。

BX(Base)稱為基址寄存器。BX可以用來存放操作數(shù)在內存中數(shù)據(jù)段內的偏移地址。

CX(Counter)稱為計數(shù)器。在設計循環(huán)程序時使用該寄存器存放循環(huán)次數(shù),可使程序指令簡化,有利于提高程序的運行速度。

DX(Data)稱為數(shù)據(jù)寄存器。在寄存器間接尋址的I/O指令中存放I/O端口地址;在做雙字長乘除法運算時,DX與AX一起存放一個雙字長操作數(shù),其中DX存放高16位數(shù)。

2.地址指針寄存器SP、BPSP(StackPointer)稱為堆棧指針寄存器。其始終存儲棧頂?shù)钠频刂贰?/p>

BP(BasePointer)稱為基址寄存器。作為通用寄存器,它可以用來存放數(shù)據(jù),但更經常更重要的用途是存放操作數(shù)在堆棧段內的偏移地址。

3.變址寄存器SI、DISI(SourceIndex)稱為源變址寄存器。DI(DestinationIndex)稱為目的變址寄存器。這兩個寄存器通常用在字符串操作時存放操作數(shù)的偏移地址,其中SI存放源串在數(shù)據(jù)段內的偏移地址,DI存放目的串在附加數(shù)據(jù)段內的偏移地址。

二.段寄存器為了對1M個存儲單元進行管理,8086/8088對存儲器進行分段管理,即將程序代碼或數(shù)據(jù)分別放在代碼段、數(shù)據(jù)段、堆棧段或附加數(shù)據(jù)段中,每個段最多可達64K個存儲單元。段地址分別放在對應的段寄存器中,代碼或數(shù)據(jù)在段內的偏移地址由有關寄存器或立即數(shù)給出。8086/8088的四個段寄存器分別為:

CS(CodeSegment)稱為代碼段寄存器,用來存儲程序當前使用的代碼段的段地址。CS的內容左移四位再加上指令指針寄存器IP的內容就是下一條要讀取的指令在存儲器中的物理地址。

DS(DataSegment)稱為數(shù)據(jù)段寄存器,用來存放程序當前使用的數(shù)據(jù)段的段地址。DS的內容左移四位再加上按指令中存儲器尋址方式給出的偏移地址即得到對數(shù)據(jù)段指定單元進行讀寫的物理地址。

SS(StackSegment)稱為堆棧段寄存器,用來存放程序當前所使用的堆棧段的段地址。堆棧是存儲器中開辟的按先進后出原則組織的一個特殊存儲區(qū),主要用于調用子程序或執(zhí)行中斷服務程序時保護斷點和現(xiàn)場。

ES(ExtraSegment)稱為附加數(shù)據(jù)段寄存器,用來存放程序當前使用的附加數(shù)據(jù)段的段地址。附加數(shù)據(jù)段用來存放字符串操作時的目的字符串。表3.2

8086/8088段寄存器與提供段內移地址的寄存器之間的默認組合

段寄存器

提供段內偏移地址的寄存器

CS

IP

DS

BX、SI、DI或一個16位數(shù)

SS

SP或BP

ES

DI(用于字符串操作指令)三.控制寄存器

IP(InstructionPointer)稱為指令指針寄存器,用來存放下一條要讀取的指令在代碼段內的偏移地址。

IP在程序運行中能自動加1修正,從而使其始終存放的是下一條要讀取的指令在代碼段的偏移地址。程序員不能直接用賦值指令對IP和CS進行修改。有些指令能使IP和CS的值改變(如跳轉指令)或使其值壓入堆?;驈亩褩V袕棾龌謴驮担ㄈ缱映绦蛘{用指令和返回指令)。

FLAGS稱為標志寄存器,它是一個16位的寄存器,但只用了其中9位,這9位包括6個狀態(tài)標志位,3個控制標志位,如圖3.5所示。圖3.58086/8088的標志寄存器

1.狀態(tài)標志位狀態(tài)標志位用來反映算術和邏輯運算結果的一些特征。下面分別介紹這6個狀態(tài)標志位的功能。

CF(CarryFlag)——進位標志。當進行加減運算時,若最高位發(fā)生進位或借位則CF為1,否則為0。通常用于判斷無符號數(shù)運算結果是否超出了計算機所能表示的無符號數(shù)的范圍。

PF(ParityFlag)——奇偶標志位。當指令執(zhí)行結果的低8位中含有偶數(shù)個1時,PF為1,否則為0。

AF(AuxiliaryFlag)——輔助進位標志位。當執(zhí)行一條加法或減法運算指令時,若結果的低字節(jié)的低4位向高4位有進位或借位,則AF為1,否則為0。

ZF(ZeroFlag)——零標志位。若當前的運算結果為0,則ZF為1,否則為0。

SF(SignFlag)——符號標志位。當運算結果的最高位為1時,SF=1,否則為0。

OF(OverflowFlag)——溢出標志位。當運算結果超出了帶符號數(shù)所能表示的數(shù)值范圍,即溢出時,OF=1,否則為0。用來判斷帶符號數(shù)運算結果是否溢出。例3.1設變量x=11101111B,y=11001000B,X=0101101000001010B,Y=0100110010100011B,請問分別執(zhí)行x+y和X+Y操作后標志寄存器中各狀態(tài)位的狀態(tài)如何?

11101111+)1100100010110111?1自動丟失010110100000101001001100101000111010011010101101CF=0CF=1DF=1狀態(tài)位執(zhí)行x+y后執(zhí)行X+Y后CF最高位D7向前有進位,CF=1最高位D15向前沒有進位,CF=0PF低8位中1的個數(shù)為偶數(shù)(6),PF=1低8位中1的個數(shù)為奇數(shù)(5),PF=0AF低4位向前有進位,AF=1低4位向前沒有進位,AF=0ZF計算結果不為0,ZF=0計算結果不為0,ZF=0SF最高位D7為1,SF=1最高位D15為1,SF=1OFCFDF=0,沒有溢出,OF=0CFDF=1,結果溢出,OF=1

2.控制標志位控制標志位有3個,用來控制CPU的操作,由程序設置或清除。它們是:

TF(TrapFlag)——跟蹤(陷阱)標志位。它是為測試程序的方便而設置的。若將TF置1,8086/8088CPU處于單步工作方式,否則,將正常執(zhí)行程序。

IF(InterruptFlag)——中斷允許標志位。是用來控制可屏蔽中斷的控制標志位。若用STI指令將IF置1,表示允許CPU接受外部從INTR引腳上發(fā)來的可屏蔽中斷請求信號;若用CLI指令將IF清0,則禁止CPU接受可屏蔽中斷請求信號。IF的狀態(tài)對非屏蔽中斷及內部中斷沒有影響。

DF(DirectionFlag)——方向標志位。若用STD將DF置1,串操作按減地址方式進行,也就是說,從高地址開始,每操作一次地址自動遞減;若用CLD將DF清0,則串操作按增地址方式進行,即每操作一次地址自動遞增。

3.2.48086/8088引腳及其功能

圖3.78086/8088CPU引腳

8086/8088芯片的引腳應包括20根地址線16根(8086)8根(8088)數(shù)據(jù)線控制線、狀態(tài)線、電源線和地線等8086/8088CPU的部分引腳定義了雙重功能。如第33引腳MN/MX上電平的高低代表兩種不同的信號;第31到24引腳在CPU處于兩種不同的工作方式時具有不同的名稱和定義;引腳9到16(8088CPU)及引腳2到16和39(8086CPU)采用了分時復用技術,即在不同的時刻分別傳送地址或數(shù)據(jù)信息等。一.8086CPU引腳

8086CPU引腳按功能可分為三大類:電源線和地線,地址/數(shù)據(jù)引腳以及控制引腳。

1.電源線和地線

2.地址/數(shù)據(jù)(狀態(tài))引腳地址/數(shù)據(jù)分時復用引腳AD15

AD0(AddressData):傳送地址時單向輸出,傳送數(shù)據(jù)時雙向輸入或輸出。地址狀態(tài)分時復用引腳A19/S6

A16/S3(Address/Status):輸出、三態(tài)總線。采用分時輸出,即在T1狀態(tài)作地址線用,T2

T4狀態(tài)輸出狀態(tài)信息。

3.控制引腳

(1)NMI(Non-MaskableInterrupt):非屏蔽中斷請求信號,輸入,上升沿觸發(fā)。此請求不受標志寄存器FLAGS中中斷允許標志位IF狀態(tài)的影響,只要此信號一出現(xiàn),在當前指令執(zhí)行結束后立即進行中斷處理。

(2)INTR(InterruptRequest)

:可屏蔽中斷請求信號,輸入,高電平有效。CPU在每個指令周期的最后一個時鐘周期檢測該信號是否有效,若此信號有效,表明有外設提出了中斷請求,這時若IF=1,則當前指令執(zhí)行完后立即響應中斷;若IF=0,則中斷被屏蔽,外設發(fā)出的中斷請求將不被響應。

(3)CLK(Clock):系統(tǒng)時鐘,輸入。它通常與8284A時鐘發(fā)生器的時鐘輸出端相連。

(4)?RESET:復位信號,輸入,高電平有效。復位信號使處理器馬上結束現(xiàn)行操作,對處理器內部寄存器進行初始化。復位后,內部寄存器的狀態(tài)如表3.4所示。系統(tǒng)正常運行時,RESET保持低電平。表3.4復位后內部寄存器的狀態(tài)

內部寄存器狀態(tài)標志寄存器IPCSDSSSES指令隊列緩沖器其余寄存器0000H0000HFFFFH0000H0000H0000H空0000H

(5)?READY:數(shù)據(jù)“準備好”信號線,輸入。它實際上是所尋址的存儲器或I/O端口發(fā)來的數(shù)據(jù)準備就緒信號,高電平有效。CPU在每個總線周期的T3狀態(tài)對READY引腳采樣,若為高電平,說明數(shù)據(jù)已準備好;若為低電平,說明數(shù)據(jù)還沒有準備好,CPU在T3狀態(tài)之后自動插入一個或幾個等待狀態(tài)TW,直到READY變?yōu)楦唠娖?,才能進入T4狀態(tài),完成數(shù)據(jù)傳送過程,從而結束當前總線周期。

(6)

:等待測試信號,輸入。當CPU執(zhí)行WAIT指令時,每隔5個時鐘周期對引腳進行一次測試。若為高電平,CPU就仍處于空轉狀態(tài)進行等待,直到引腳變?yōu)榈碗娖剑珻PU結束等待狀態(tài),執(zhí)行下一條指令,以使CPU與外部硬件同步。

(7)(Read):讀控制信號,輸出。當=0時,表示將要執(zhí)行一個對存儲器或I/O端口的讀操作。到底是從存儲單元還是從I/O端口讀取數(shù)據(jù),取決于M/(8086)或IO/(8088)信號。

(8)BHE/S7(BusHighEnable/Status):高8位數(shù)據(jù)總線允許/狀態(tài)復用引腳,輸出。BHE在總線周期的T1狀態(tài)時輸出,當該引腳輸出為低電平時,表示當前數(shù)據(jù)總線上高8位數(shù)據(jù)有效。作備用狀態(tài)信號線。

(9)MN/MX(Minimum/Maximummodecontrol):最小/最大方式控制信號,輸入。MN/MX引腳接高電平時,8086/8088CPU工作在最小方式,全部控制信號由CPU提供;MN/MX引腳接低電平時,8086/8088工作在最大方式,CPU發(fā)出的控制信號經8288總線控制器進行變換和組合,從而使總線的控制功能更加完善。

2.8086最小工作方式及引腳24

31的定義當MN/MX接高電平時,系統(tǒng)工作于最小方式,即單處理器方式,它適用于較小規(guī)模的微機系統(tǒng)。8284A為時鐘發(fā)生/驅動器,送給CPU做系統(tǒng)時鐘。8282為8位地址鎖存器。

8286為具有三態(tài)輸出的8位數(shù)據(jù)總線收發(fā)器系統(tǒng)中還有一個等待狀態(tài)產生電路,它向8284A的RDY端提供一個信號圖3.88086最小方式系統(tǒng)結構在最小方式下,第24

31引腳的功能如下:

(1)INTA(InterruptAcknowledge):中斷響應信號,輸出。該信號用于對外設的中斷請求(經INTR引腳送入CPU)作出響應。

(2)?ALE(AddressLatchEnable):地址鎖存允許信號,輸出。它是8086/8088提供給地址鎖存器的控制信號,高電平有效。在任何一個總線周期的T1狀態(tài),ALE均為高電平,以表示當前地址/數(shù)據(jù)復用總線上輸出的是地址信息,ALE由高到低的下降沿把地址裝入地址鎖存器中。

(3)DEN(DataEnable):數(shù)據(jù)允許信號,輸出。當使用數(shù)據(jù)總線收發(fā)器時,該信號為收發(fā)器的OE端提供了一個控制信號,該信號決定是否允許數(shù)據(jù)通過數(shù)據(jù)總線收發(fā)器。DEN為高電平時,收發(fā)器在收或發(fā)兩個方向上都不能傳送數(shù)據(jù),當DEN為低電平時,允許數(shù)據(jù)通過數(shù)據(jù)總線收發(fā)器。

(4)?DT/R(DataTransmit/Receive):引腳27,數(shù)據(jù)發(fā)送/接收信號,輸出。該信號用來控制數(shù)據(jù)的傳送方向。當其為高電平時,8086CPU通過數(shù)據(jù)總線收發(fā)器進行數(shù)據(jù)發(fā)送;當其為低電平時,則進行數(shù)據(jù)接收。在DMA方式,它被浮置為高阻狀態(tài)。

(5)?M/IO(Memory/InputandOutput):引腳28,存儲器I/O端口控制信號,輸出。該信號用來區(qū)分CPU是進行存儲器訪問還是I/O端口訪問。當該信號為高電平時,表示CPU正在和存儲器進行數(shù)據(jù)傳送;如為低電平,表明CPU正在和輸入/輸出設備進行數(shù)據(jù)傳送。在DMA方式,該引腳被浮置為高阻狀態(tài)。

(6)?WR(Write):引腳29,寫信號,輸出。WR有效時,表示CPU當前正在進行存儲器或I/O寫操作,到底是哪一種寫操作,取決于M/IO信號。在DMA方式,該引腳被浮置為高阻狀態(tài)。

(7)?HOLD(Holdrequest):引腳31,總線保持請求信號,輸入。當8086/8088CPU之外的總線主設備要求占用總線時,通過該引腳向CPU發(fā)一個高電平的總線保持請求信號。

(8)?HLDA(HoldAcknowledge):引腳30,總線保持響應信號,輸出。當CPU接收到HOLD信號后,這時如果CPU允許讓出總線,就在當前總線周期完成時,發(fā)出高電平的HLDA信號給以響應。此時,CPU讓出總線使用權,發(fā)出HOLD請求的總線主設備獲得總線的控制權。

3.8086最大工作方式及引腳24

31的定義當MN/MX接低電平時,系統(tǒng)工作于最大方式,即多處理器方式。最大方式是多處理器工作方式,需要協(xié)調主處理器和協(xié)處理器的工作??刂菩盘柌荒苤苯訌?086/8088CPU引腳得到,需要外加8288總線控制器,通過它對CPU發(fā)出的控制信號(S0,S1,S2)進行變換和組合,以得到系統(tǒng)的控制信號。圖3.98086最大方式系統(tǒng)結構在最大方式下,第24

31引腳的功能如下:

(1)?QS1、QS0(InstructionQueueStatus):指令隊列狀態(tài)信號,輸出。QS1、QS0兩個信號電平的不同組合指明了8086/8088內部指令隊列的狀態(tài)表3.6QS1、QS0的代碼組合對應的含義QS1QS0含義00無操作01從指令隊列的第一字節(jié)中取走代碼10隊列為空11除第一字節(jié)外,還取走了后續(xù)字節(jié)中的代碼

(2)?S2、S1、S0(BusCycleStatus):引腳26、27、28,總線周期狀態(tài)信號,輸出。表3.7S2、S1、S0的代碼組合對應的操作

8288產生的控制信號對應操作000

發(fā)中斷響應信號

001

讀I/O端口

010

寫I/O端口01

1

暫停

10

0

取指令

101

讀內存110

寫內存11

1無

無源狀態(tài)MMM

(3)?LOCK(Lock):引腳29,總線封鎖信號,輸出。當LOCK為低電平時,系統(tǒng)中其他總線主設備就不能獲得總線的控制權而占用總線。LOCK信號由指令前綴LOCK產生,LOCK指令后面的一條指令執(zhí)行完后,便撤消了LOCK信號。另外,在DMA期間,LOCK被浮空而處于高阻狀態(tài)。

(4)RQ/GT1、RQ/GT0(Request/Grant):引腳30、31,總線請求信號(輸入)/總線請求允許信號(輸出)。這兩個信號可供8086/8088以外的2個總線主設備向8086/8088發(fā)出使用總線的請求信號RQ(相當于最小方式時的HOLD信號)。而8086/8088在現(xiàn)行總線周期結束后讓出總線,發(fā)出總線請求允許信號GT(相當于最小方式的HLDA信號),此時,外部總線主設備便獲得了總線的控制權。其中RQ/GT0比RQ/GT1的優(yōu)先級高。

8288總線控制器還提供了其他一些控制信號:MRDC(MemoryReadCommand)、MWTC(MemoryWriteCommand)、IORC(I/OReadCommand)、IOWC(I/OWriteCommand)以及INTA等,它們分別是存儲器與I/O的讀寫命令以及中斷響應信號。另外,還有AMWC與AIOWC兩個信號,它們分別表示提前寫內存命令和提前寫I/O命令,其功能分別與MWTC和IOWC一樣,只是它們由8288提前一個時鐘周期發(fā)出信號,這樣,一些較慢的存儲器和外設將得到一個額外的時鐘周期去執(zhí)行寫入操作。

4.8088與8086引腳的區(qū)別

8088與8086絕大多數(shù)引腳的名稱和功能是完全相同的,僅有以下三點不同:

(1)AD15

AD0的定義不同。在8086中都定義為地址/數(shù)據(jù)分時復用引腳;而在8088中,由于只需要8條數(shù)據(jù)線,因此,對應于8086的AD15

AD8這8根引腳在8088中定義為A15

A8,它們在8088中只做地址線用。

(2)引腳34的定義不同。在最大方式下,8088的第34引腳保持高電平,而8086在最大方式下34引腳的定義與最小方式下相同。

(3)引腳28的有效電平高低定義不同。8088和8086的第28引腳的功能是相同的,但有效電平的高低定義不同。8088的第28引腳為IO/M,當該引腳為低電平時,表明8088正在進行存儲器操作;當該引腳為高電平時,表明8088正在進行I/O操作。8086的第28引腳為M/IO,電平與8088正好相反。3.38086/8088存儲器和I/O組織3.3.18086/8088存儲器組織

1.8086/8088存儲空間

8086/8088有20條地址線,可直接對1M個存儲單元進行訪問。每個存儲單元存放一個字節(jié)型數(shù)據(jù),且每個存儲單元都有一個20位的地址,這1M個存儲單元對應的地址為00000H~FFFFFH。一個存儲單元中存放的信息稱為該存儲單元的內容。例,00001H單元的內容為9FH,記為:(00001H)=9FH。圖3.10數(shù)據(jù)在存儲器中的存放若存放的是字型數(shù)據(jù)(16位二進制數(shù)),則將字的低位字節(jié)存放在低地址單元,高位字節(jié)存放在高地址單元。如從地址0011FH開始的兩個連續(xù)單元中存放一個字型數(shù)據(jù),則該數(shù)據(jù)為DF46H,記為:(0011FH)=DF46H。若存放的是雙字型數(shù)據(jù)(32位二進制數(shù)),

如從地址E800AH開始的連續(xù)4個存儲單元中存放了一個雙字型數(shù)據(jù),則該數(shù)據(jù)為66A65E65H,記為:(E800AH)=66A65E65H。

2.存儲器的段結構

8086/8088CPU中有關可用來存放地址的寄存器都是16位的,故只能直接尋址64KB。為了對1M個存儲單元進行管理,8086/8088采用了段結構的存儲器管理方法。

8086/8088將整個存儲器分為許多邏輯段,每個邏輯段的容量小于或等于64KB,允許它們在整個存儲空間中浮動,各個邏輯段之間可以緊密相連,也可以互相重疊。

圖3.11存儲器分段示意圖

3.邏輯地址與物理地址

我們把通過段地址和偏移地址來表示的存儲單元的地址稱為邏輯地址,記為:段地址:偏移地址。

CPU在對存儲單元進行訪問時,必須在20位的地址總線上提供一個20位的地址信息,以便選中所要訪問的存儲單元。我們把CPU對存儲器進行訪問時實際尋址所使用的20位地址稱為物理地址。物理地址是由CPU內部總線接口單元BIU中的地址加法器根據(jù)邏輯地址產生的。由邏輯地址形成20位物理地址的方法為:物理地址=段地址

10H+偏移地址如果當前的(CS)=2000H,

(IP)=1000H,那么,下一條要讀取的指令所在存儲單元的物理地址為:

(CS)

10H+(IP)=2000H

10H+1000H=21000H如果某操作數(shù)在數(shù)據(jù)段內的偏移地址為8000H,(DS)=2A0FH則該操作數(shù)所在存儲單元的物理地址

(DS)

10H+8000H=2A0FH

10H+8000H=320F0H用戶編寫的程序(包括指令代碼和數(shù)據(jù))被分別存儲在代碼段、數(shù)據(jù)段、堆棧段和附加數(shù)據(jù)段中,這些段的段地址分別存儲在段寄存器CS、DS、SS和ES中,而指令或數(shù)據(jù)在段內的偏移地址可由對應的地址寄存器或指令給出。

表3.8存儲器操作時段地址和段內偏移地址的來源

存儲器操作類型

段地址

偏移地址

正常來源

其他來源取指令

CS

IP

存取操作數(shù)

DSCS、ES、SS

有效地址EA通過BP尋址存取操作數(shù)

SS

CS、ES、SS

有效地址EA堆棧操作

SS

BP、SP

源字符串

DS

CS、ES、SS

SI

目的字符串

ES無

DI

4.堆棧操作堆棧是在存儲器中開辟的一個特定區(qū)域。堆棧在存儲器中所處的段稱為堆棧段,和其他邏輯段一樣,它可在1MB的存儲空間中浮動,其容量可達64KB。開辟堆棧的主要目的:

(1)存放指令操作數(shù)(變量)。對操作數(shù)進行訪問時,段地址自然由堆棧段寄存器SS來提供,操作數(shù)在該段內的偏移地址由基址寄存器BP來提供。

(2)保護斷點和現(xiàn)場。此為堆棧的主要功能。什么是保護斷點?保護斷點的操作由系統(tǒng)自動完成,不需要程序員干預。什么是保護現(xiàn)場?保護現(xiàn)場的工作要求程序員在編寫子程序或中斷服務程序時使用進棧指令PUSH和出棧指令POP完成。在執(zhí)行進棧和出棧操作時,段地址由堆棧段寄存器SS提供,段內偏移地址由堆棧指針寄存器SP提供,SP始終指向棧頂,當堆棧空時,SP指向棧底。設在存儲器中開辟了100H個存儲單元的堆棧段,當前(SS)=2000H,堆棧空時(SP)=0100H,即此時SP指向棧底。由于PUSH和POP指令要求操作數(shù)為字型數(shù)據(jù),因此,每進行一次進棧操作,SP值減2,每進行一次出棧操作,SP值加2。在進棧和出棧操作過程中,SP始終指向棧頂。圖3.12進棧與出棧操作示意圖

5.8086/8088存儲器結構

圖3.138086存儲器高低位庫的連接表3.98086存儲器高低位庫選擇

A0

對應操作

0

0

同時訪問兩個存儲體,讀/寫一個字的信息

0

1

只訪問奇地址存儲體,讀/寫高字節(jié)的信息

1

0

只訪問偶地址存儲體,讀/寫低字節(jié)的信息

1

1

無操作圖3.14從8086存儲器的偶數(shù)和奇數(shù)地址讀字節(jié)和字讀偶地址單元中的字節(jié);(b)讀奇地址單元中的字節(jié);(c)讀偶地址單元中的字;(d)讀奇地址單元中的字在8088系統(tǒng)中,可直接尋址的存儲空間同樣也是1MB,但其存儲器的結構與8086有所不同,它的1?MB存儲空間同屬于一個單一的存儲體,即存儲體為1M

8位。3.3.28086/8088的I/O組織

8086/8088系統(tǒng)和外部設備之間是通過I/O接口電路來聯(lián)系的。每個I/O接口都有一個或幾個端口。在微機系統(tǒng)中每個端口分配一個地址號,稱為端口地址。一個端口通常為I/O接口電路內部的一個寄存器或一組寄存器。

8086/8088CPU用地址總線的低16位作為對I/O端口的尋址線,所以8086/8088系統(tǒng)可訪問的I/O端口有65536(64K)個。兩個8位端口可以組成一個16位的端口。一個8位的I/O設備既可以連接在數(shù)據(jù)總線的高8位上,也可以連接到數(shù)據(jù)總線的低8位上。一般為了使數(shù)據(jù)/地址總線的負載平衡,希望接在數(shù)據(jù)/地址總線高8位和低8位的設備數(shù)目最好相等。

8086CPU對I/O設備的讀/寫操作與對存儲器的讀/寫操作類似。當CPU與偶地址的I/O設備實現(xiàn)16位數(shù)據(jù)的存取操作時,可在一個總線周期內完成;當CPU與奇地址的I/O設備實現(xiàn)16位數(shù)據(jù)的存取操作時,要占用兩個總線周期才能完成。需要說明的是,8086/8088CPU的I/O指令可以用16位的有效地址A15

A0來尋址0000

FFFFH共64K個端口,但IBMPC系統(tǒng)中只使用了A9

A010位地址來作為I/O端口的尋址信號,因此,其I/O端口的地址僅為000

3FFH共1K個。

3.2.3

總線周期的概念8086/8088CPU在與存儲器或I/O端口交換數(shù)據(jù)時需要啟動一個總線周期。按照數(shù)據(jù)的傳送方向來分,總線周期可分為“讀”總線周期(CPU從存儲器或I/O端口讀取數(shù)據(jù))和“寫”總線周期(CPU將數(shù)據(jù)寫入存儲器或I/O端口)。

8086/8088CPU基本的總線周期由4個時鐘周期組成,時鐘周期是CPU的基本時間計量單位,由CPU主頻決定。一個時鐘周期又稱為一個T狀態(tài),因此基本總線周期用T1、T2、T3、T4表示。圖3.68086/8088基本總線周期3.3.38086微處理器時序

1.總線讀操作時序當8086CPU進行存儲器或I/O端口讀操作時,總線進入讀周期?;镜淖x周期由4個時鐘周期組成:T1、T2、T3和T4。CPU在T3到T4之間從總線上接收數(shù)據(jù)。當所選中的存儲器和外設的存取速度較慢時,則將在T3和T4之間插入1個或幾個等待周期TW。圖3.15是8086最小方式下的總線讀操作時序圖。下面對圖中表示的讀操作時序進行說明。

讀周期的時序

8086

(1)?T1狀態(tài):為了從存儲器或I/O端口讀出數(shù)據(jù),首先要用M/IO信號指出CPU是要從內存還是從I/O端口讀,所以M/IO信號在T1狀態(tài)成為有效(見圖3.15①)。M/IO信號的有效電平一直保持到整個總線周期的結束,即T4狀態(tài)。為指出CPU要讀取的存儲單元或I/O端口的地址,8086的20位地址信號通過多路復用總線A19/S6~A16/S3和AD15~AD0輸出,送到存儲器或I/O端口(見圖3.15②)。地址信息必須被鎖存起來,這樣才能在總線周期的其他狀態(tài)往這些引腳上傳輸數(shù)據(jù)和狀態(tài)信息。為了實現(xiàn)對地址的鎖存,CPU便在T1狀態(tài)從ALe引腳上輸出一個正脈沖作為地址鎖存信號(見圖3.15③)。在ALE的下降沿到來之前,M/IO信號、地址信號均已有效。鎖存器8282正是用ALE的下降沿對地址進行鎖存的。

BHE信號也通過BHE/S7引腳送出(見圖3.15④),它用來表示高8位數(shù)據(jù)總線上的信息可以使用。此外,當系統(tǒng)中接有數(shù)據(jù)總線收發(fā)器時,要用到DT/R和DEN作為控制信號。前者作為對數(shù)據(jù)傳輸方向的控制,后者實現(xiàn)數(shù)據(jù)的選通。為此,在T1狀態(tài)DT/R輸出低電平,表示本總線周期為讀周期,即讓數(shù)據(jù)總線收發(fā)器接收數(shù)據(jù)(見圖3.15⑤)。

(2)?T2狀態(tài):地址信號消失(見圖3.15⑦),AD15~AD0進入高阻狀態(tài),為讀入數(shù)據(jù)做準備;而A19/S6~A16/S3和BHE/S7輸出狀態(tài)信息S7~S3(見圖3.15⑥和⑧)。此時,DEN信號變?yōu)榈碗娖?見圖3.15⑩),從而在系統(tǒng)中接有總線收發(fā)器時,獲得數(shù)據(jù)允許信號。

CPU在RD引腳上輸出讀有效信號(見圖3.15⑨),送到系統(tǒng)中所有存儲器和I/O接口芯片,但是,只有被地址信號選中的存儲單元或I/O端口,才會被RD信號從中讀出數(shù)據(jù),從而將數(shù)據(jù)送到系統(tǒng)數(shù)據(jù)總線上。

(3)?T3狀態(tài):在T3狀態(tài)前沿(下降沿處),CPU對引腳READY進行采樣,如果READY信號為高,則CPU在T3狀態(tài)后沿(上升沿處)通過AD15~AD0獲取數(shù)據(jù);如果READY信號為低,將插入等待狀態(tài)Tw,直到READY信號變?yōu)楦唠娖健?/p>

(4)Tw狀態(tài):當系統(tǒng)中所用的存儲器或外設的工作速度較慢,從而不能用最基本的總線周期完成讀操作時,系統(tǒng)中就要用一個電路來產生READY信號。低電平的READY信號必須在T3狀態(tài)啟動之前向CPU發(fā)出,則CPU將會在T3狀態(tài)和T4狀態(tài)之間插入若干個等待狀態(tài)Tw,直到READY信號變高。在最后一個等待狀態(tài)Tw的后沿(上升沿)處,CPU通過AD15~AD0獲取數(shù)據(jù)。

(5)?T4狀態(tài):CPU使RD信號變?yōu)楦唠娖?,于是,存儲器模塊上的總線驅動器又處于高阻狀態(tài),從而讓出總線。

2.總線寫操作時序總線寫操作就是指CPU向存儲器或I/O端口寫入數(shù)據(jù)。圖3.16是8086在最小模式下的總線寫操作時序圖??偩€寫操作時序與總線讀操作時序基本相同,但也存在以下不同之處:

(1)對存儲器或I/O端口操作的選通信號不同??偩€讀操作中,選通信號是RD,而總線寫操作中是WR。

(2)在T4狀態(tài)中,AD15~AD0上地址信號消失后,AD15~AD0的狀態(tài)不同??偩€讀操作中,此時AD15~AD0進入高阻狀態(tài),并在隨后的狀態(tài)中保持為輸入方向;而在總線寫操作中,此時CPU立即通過AD15~AD0輸出數(shù)據(jù),并一直保持到T4狀態(tài)中。

3.中斷響應操作時序當8086CPU的INTR引腳上有一有效電平(高電平),且標志寄存器IF=1時,則8086CPU在執(zhí)行完當前的指令后響應中斷,在響應中斷時CPU執(zhí)行兩個中斷響應周期。圖3.17是8086在最小模式下的中斷響應操作時序圖。

寫周期的時序

8086圖3.17中斷響應周期的時序

CPU的中斷響應周期包括兩個總線周期,在每個總線周期中都從INTA端輸出一個負脈沖,其寬度是從T2狀態(tài)開始持續(xù)到T4狀態(tài)的開始。第一個總線周期的INTA負脈沖,用來通知中斷源,CPU準備響應中斷,中斷源應準備好中斷類型號。在第二個總線周期的INTA負脈沖期間,外設接口(一般經中斷控制器)應立即把中斷源的中斷類型號送到數(shù)據(jù)線的低8位AD7~AD0上。而在這兩個總線周期的其余時間,AD7~AD0總線是浮空高阻態(tài)。CPU讀取到中斷類型號后,就可以在中斷向量表中找到該外設的中斷服務程序入口,轉入中斷服務。

3.4從80286到Pentium系列的技術發(fā)展3.4.180x86寄存器組

寄存器在計算機中起著非常重要的作用,每個寄存器相當于運算器中的一個存儲單元,但由于寄存器位于CPU內部,對它們進行訪問時不需要啟動一個總線周期,因此其存取速度要比存儲器快得多。寄存器用來存放計算過程中所需要的或所得到的各種信息,包括操作數(shù)地址、操作數(shù)以及運算的中間結果等。寄存器可分為程序可見寄存器和程序不可見寄存器兩大類。所謂程序可見寄存器,是指在匯編語言程序設計中可以通過指令來訪問的寄存器。

程序不可見寄存器是指一般用戶程序中不能訪問而由系統(tǒng)所使用的寄存器。從“8086/8088寄存器結構”中可以看出,8086/8088CPU中程序可見寄存器可分為三類:通用寄存器、段寄存器和控制寄存器。80286之后的CPU中寄存器同樣也分為上述三類,只不過有關寄存器的功能和位數(shù)有所擴充而已。1.通用寄存器對于80386及其后續(xù)機型,是32位的通用寄存器,包括EAX、EBX、ECX、EDX、ESP、EBP、ESI和EDI。EAX、EBX、ECX和EDX可作為32位寄存器來用,其低16位既可作為一個16位寄存器來用,也可作為兩個8位寄存器來用;ESP、EBP、ESI和EDI可作為32位寄存器來用,其低16位也可用做一個16位寄存器。注意的是,這些寄存器以字節(jié)或字的形式被訪問時,不被訪問的其他部分不受影響。如訪問AH時,EAX的高16位和低8位不受影響。圖3.1580x86CPU內部程序可見寄存器組此外,在8086/8088以及80286進行存儲器尋址時,8個通用寄存器中只有地址指針寄存器(SP和BP)、變址寄存器(SI和DI)以及基址寄存器BX這5個寄存器可以用來存放操作數(shù)在存儲器段內的偏移地址。在80386及其后續(xù)機型中,所有這8個32位通用寄存器既可以存放數(shù)據(jù),也可以存放地址,也就是說,這些寄存器都可以用來提供操作數(shù)在段內的偏移地址。對于這8個通用寄存器的專用特性,80386及其后續(xù)機型的32位通用寄存器的專用特性與8086/8088以及80286的16位通用寄存器的專用特性是相同的,如ECX的計數(shù)特性,ESI和EDI分別作為字符串操作指令中源串和目的串的地址寄存器等。

2.控制寄存器

8086/8088和80286的控制寄存器包括指令寄存器IP和FLAGS兩個16位寄存器。80286中的這兩個寄存器與前面介紹的8086/8088中相同,只不過80286中的標志寄存器FLAGS比8086/8088中的FLAGS多定義了兩個標志。

80386及其后續(xù)機型也有兩個32位專用寄存器EIP和EFLAGS。它們的作用與相應的16位寄存器相同。標志寄存器FLAGS各位的定義如圖所示,其中增加了新定義位。圖3.1680x86標志寄存器

3.段寄存器與8086/8088CPU相同,80286CPU中也有4個段寄存器CS、DS、SS和ES。在80386及其以后的80x86CPU中,除上述4個段寄存器外,又增加了2個段寄存器FS和GS,它們也是附加的數(shù)據(jù)段寄存器。除非專門指定,一般情況下,各段在存儲器中的分配是由操作系統(tǒng)負責的。在80x86中,段寄存器和與其對應存放偏移地址的寄存器之間有一種默認的組合關系,這種默認關系,80286與8086/8088相同,80386及其后續(xù)CPU中段寄存器與提供段內偏移地址的寄存器之間的默認組合如表所示。表3.1080386及其后續(xù)CPU中段寄存器與提供段內偏移地址?的寄存器之間的默認組合段寄存器

提供段內偏移地址的寄存器CS

EIP

DSEAX、EBX、ECX、EDX、ESI、EDI或一個8位/32位數(shù)

SS

ESP或EBP

ES

EDI(用于字符串操作指令)

FS

無默認

GS無默認3.4.280x86存儲器管理存儲器管理是由微處理器的存儲器管理部件MMU提供的對系統(tǒng)存儲器資源進行管理的機制,其目的是方便程序對存儲器的應用。從應用角度出發(fā),學習80x86系列微處理器的存儲器管理機制。從8086/8088到Pentium,80x86系列微處理器的存儲器管理機制有了較大變化。8086/8088只有一種存儲器管理方式,即實地址方式(簡稱實方式);80286CPU具有兩種工作方式,即實方式和保護虛地址方式(簡稱保護方式);80386及其以后的CPU有三種工作方式,即實方式、保護方式和虛擬8086方式。

1.實地址方式(簡稱實方式)

實方式是80x86系列CPU共有的存儲器管理模式,而8086/8088CPU只能工作在此方式下

8086/8088CPU通過對存儲器分段來實現(xiàn)對1M個存儲器單元的直接訪問。

BIU單元的地址加法器,根據(jù)指令中給出的段地址和段內偏移地址,計算得到一個20位的物理地址,該20位的物理地址加載到20位的地址總線上,即可實現(xiàn)對8086/8088系統(tǒng)1M個存儲單元的訪問。

80286、80386、80486以及Pentium的地址總線位數(shù)分別增加為24、32、32、36,但在實方式下,它們都只能使用低20位地址線,它們所能尋址的存儲空間與8086/8088一樣,也只有1MB。在實方式下,CPU把從指令中得到的邏輯地址(段地址:段內偏移地址)轉換為20位物理地址。不管CPU的實際地址引腳有多少根,在此方式下工作時,只能用其低20根地址線對1M個存儲單元進行訪問。

2.保護虛擬地址方式(簡稱保護方式)

在實方式下,80286及其后續(xù)CPU只相當于一個快速的8086,沒有真正發(fā)揮這些高性能CPU的作用。而這些CPU的特點是能可靠地支持多用戶系統(tǒng),即使是單用戶,也可支持多任務操作,這就要求用新的存儲器管理機制——保護方式對存儲器系統(tǒng)進行管理。

1)虛擬存儲器的概念虛擬存儲器(VirtualMemory)是一種存儲器管理技術。它提供比物理存儲器大得多的存儲空間,使程序設計人員在編寫程序時,以編寫并運行比實際配置的物理存儲器空間大得多的用戶程序。虛擬存儲器由存儲器管理機制以及一個大容量的快速硬盤存儲器(內存)或光盤支持。在程序運行時,只把虛擬地址空間的一小部分映射到主存儲器中,其余暫不使用部分則仍存儲在硬盤上。當訪問主存儲器的范圍發(fā)生變化時,再把虛擬存儲器的對應部分從磁盤調入內存,而對主存中目前不再使用的部分,可根據(jù)一定的替換策略將其從主存儲器送回到硬盤。虛擬存儲器系統(tǒng)是通過CPU內的存儲器管理部件MMU,進行虛擬地址和實地址自動變換而實現(xiàn)的,對每個編程者是透明的,變址空間很大。

2)虛擬存儲器的基本結構按照主存(或內存)與外存(輔助存儲器)之間信息交換時信息傳送單位的不同,虛擬存儲器可分為段式虛擬存儲器、頁式虛擬存儲器和段頁式虛擬存儲器三種。

(1)段式虛擬存儲器。按照程序的邏輯結構分段,段作為獨立的邏輯單位可被其他程序段調用,這樣就形成段間連接,產生規(guī)模較大的程序。一般用段表來指明各段在主存中的位置。段表是由操作系統(tǒng)產生并存儲在主存中的一個可再定位段。圖3.17給出了段式虛擬存儲器地址變換的原理。為了把虛擬地址(段號:段內偏移地址)變換為實存地址,需要一個段表。裝入位(1已裝入內存,0該段不在內存);長度指示:段的長度可大可小(其長度因程序而異)。在訪問某段時,如果段內偏移地址值超過段的長度,則發(fā)生地址越界中斷。圖3.17段式虛擬存儲器地址變換

(2)頁式虛擬存儲器。頁式管理系統(tǒng)的基本信息傳送單位是定長的頁。主存的物理空間被劃分為等長的固定區(qū)域,稱為頁面。頁面的起點和終點地址是固定的。惟一可能造成浪費的是程序最后一頁的零頭的頁內空間,它比段式管理系統(tǒng)的段外空間浪費要小得多。頁式管理的缺點正好和段式管理系統(tǒng)相反,由于頁不是邏輯上獨立的實體,因而處理、保護和共享都不如段式方便。在頁式虛擬存儲系統(tǒng)中,把虛擬空間分成頁,稱為邏輯頁;主存空間也分成同樣大小的頁,稱為物理頁。虛擬地址由邏輯頁號和頁內行地址組成;實存地址由物理頁號和頁內行地址組成。由于兩者的頁面大小是相同的,因而頁內行地址是相等的。虛擬地址到實存地址的轉換是通過由操作系統(tǒng)建立并存儲在主存中的頁表實現(xiàn)的。在頁表中,對應每一個虛存邏輯頁號有一個該邏輯頁所在的主存頁面地址(物理頁號),用它作為實存地址的高字段,與虛存地址的頁內行地址相拼接就形成了實存地址。圖3.18頁式虛擬存儲器地址變換

(3)段頁式虛擬存儲器。為了克服段式和頁式存儲器管理系統(tǒng)各自的缺點,可以采用分段和分頁相結合的段頁式管理系統(tǒng)。程序按模塊分段,段內再分頁,交換信息時以頁為單位進行信息傳送,用段表和頁表進行兩級存儲器定位管理。如圖3.19所示,目前微型計算機中廣泛使用的是分段和分頁的存儲器管理機制。它們都使用了由操作系統(tǒng)產生并駐留于內存中的各種表格,這些表格規(guī)定了各自的轉換函數(shù),從而實現(xiàn)從虛擬地址到實存地址之間的轉換。這些表格只允許操作系統(tǒng)進行訪問,應用程序不能對其進行修改。這樣,操作系統(tǒng)為每一個任務維護一套各自不同的轉換表格,其結果使每一任務有不同的虛擬地址空間,并使各任務彼此隔離開來,以便完成多任務分時操作。圖3.19虛擬地址—物理地址轉換對于80286而言,只有段式存儲器管理方式,而80386及其后續(xù)機型采用段式和頁式存儲器管理方式,即首先使用段機制,把虛擬地址轉換為一個中間地址空間的地址,這個中間地址空間稱為線性地址空間,其地址稱為線性地址。然后再用分頁機制把線性地址轉換為物理地址。下面就簡要介紹80x86的段式和頁式存儲器管理機制。

3)存儲器段式管理機制不論是實方式還是保護方式,程序都只與邏輯地址打交道。CPU根據(jù)邏輯地址,通過不同的方式形成物理地址,以便到存儲器中找出對應的存儲單元。在實方式下,邏輯地址和物理地址之間有著直接的數(shù)學關系,可以很容易地將邏輯地址轉換為等價的物理地址。

在保護方式下,邏輯地址可表示為:

段選擇器:偏移地址。邏輯地址和物理地址之間不存在直接的數(shù)學關系,保護方式的邏輯地址被稱為虛擬地址。虛擬地址中的偏移地址與實方式一樣,都是根據(jù)指令中操作數(shù)的尋址方式確定的(對8086偏移地址為16位,80386及其以后的CPU可為16位或32位)。

段選擇器也與實方式一樣為16位的段寄存器值(對80286,保護方式和實方式一樣,可使用段寄存器CS、DS、SS、ES來存儲段選擇器;對80386及其以后的CPU,還要額外加上兩個段寄存器FS和GS)

但段選擇器只能間接地提供段的基地址。在實方式下,段基地址=段寄存器的內容乘以10H,但在保護方式下,則需要根據(jù)段選擇器的值到內存中的段表中間接地查找該段的段基址,然后將該段基址與虛擬地址中的偏移地址相加得到物理地址。

(1)段選擇器。在保護方式下,段選擇器是一個指向由操作系統(tǒng)定義的段表中一個段描述符的指針,段選擇器被操作系統(tǒng)裝入有關的段寄存器中。

段選擇器→段表→當前段的段描述符→該段的段基址然后由查表間接得到的段基址和指令中提供的操作數(shù)在段內的偏移地址求出該操作數(shù)在主存中的物理地址。段選擇器格式如圖。其中低兩位規(guī)定了選擇器的請求特權級別RPL(RequestPrivilegeLevel)。RPL的設置是為了防止低特權級程序訪問受高特權級程序保護的數(shù)據(jù)。圖3.20段選擇器格式

TI(TableIndicator)位為表格指示器。當TI=0時,該選擇器指向的段是系統(tǒng)的全局地址空間的一部分;當TI=1時,該選擇器指向的段是一個特定程序或任何局部地址空間的一部分。

全局地址空間用來存放運行在系統(tǒng)上的所有任務使用的數(shù)據(jù)和代碼段,如操作系統(tǒng)服務程序及通用庫等。在一個系統(tǒng)中只有一個全局地址空間,只要選擇器中的TI=0,便會指向這一空間,也即在系統(tǒng)上運行的所有任務將共享同一個全局地址空間。

局部地址空間用來存放一個任務將獨自占有的特定程序和數(shù)據(jù),因此,系統(tǒng)中每個任務都有其對應的局部地址空間。高13位為索引號,用來指向全局地址空間或局部地址空間中的一個段表中的一項(即一個段描述符),索引號即為該段的段描述符在段描述符表中的偏移地址,段描述符表在主存中的基地址由描述符表寄存器提供。段描述符表有全局段描述符表和局部段描述符表兩種。段表中的每一個段描述符用來存儲一個段的有關信息(如段在主存中的基地址、段的大小等),因此,段選擇器的高14位用來確定存儲器中的一個段,在保護方式下,可實現(xiàn)對16384(214)個段的管理。對于80286來說,段內偏移地址為16位,每個段最大為64KB,故可提供的虛擬存儲空間為1GB(214

216=230)。對80386及其后續(xù)機型來說,段內偏移地址為32位,每個段最大為4GB,故可提供的虛擬存儲空間為64TB(246)。

(2)段描述符表。在保護方式下,段描述符表分為系統(tǒng)的全局段描述符表GDT(GlobalDescriptorTable)和局部段描述符表LDT(LocalDescriptorTable)兩種。這些段描述符表是存儲在主存中的數(shù)據(jù)結構,利用它們可以實現(xiàn)將虛擬地址轉換為線性地址。所謂線性地址是一個無符號數(shù),它指出在處理器的線性地址空間中所要訪問的存儲單元的地址,該地址由段基址(段起始地址)加該存儲單元相對于段基址的偏移量形成。對于80286微處理器,其線性地址與存儲器操作數(shù)的物理地址相同(因為80286只有段式存儲器管理機制)。對于80386及其以后的微處理器,若分頁有效,則線性地址還要經過分頁機構才能轉換成物理地址;若分頁無效,則線性地址即為物理地址。系統(tǒng)的GDT和LDT均是長度不定的數(shù)據(jù)結構,它們最少包含一個,最多包含8192(213)個獨立的項,每一項有8個字節(jié)長,稱為一個段描述符。段描述符表最多可包含64KB(213

8=216)。圖3.21給出段選擇器與段描述符表之間的關系。系統(tǒng)中的GDT只有一個,它被所有任務使用,而每個任務都有一個LDT。GDT中的第一個描述符不用,稱為空描述符。圖3.21段選擇器與段描述符表之間的對應關系

(3)段描述符。段描述符構成了GDT或LDT中的一項,8個字節(jié)長。段描述符描述了處理器對段進行訪問時所需要的信息,主要包括線性存儲器空間中段的基地址和段限量,以及有關段的狀態(tài)和控制信息。段描述符在存儲器中的一個段和一個任務之間形成了一個鏈。不論是全局地址空間還是局部地址空間中的一個段,如果沒有段描述符,則系統(tǒng)就無法對它進行訪問。

(4)描述符表寄存器。描述符表寄存器屬于系統(tǒng)地址寄存器。80286及其后續(xù)CPU的硬件中有一組用來存放描述表在物理存儲器中基地址和段限量的寄存器。全局描述表寄存器GDTR對80286為40位,對80386及其后續(xù)CPU為48位,其中段基地址分別為24位和32位,段限量均為16位。GDT基地址指出系統(tǒng)的全局描述符表在存儲器中的起始地址16位段限量表明GDT表長最多為64KB。對于GDTR的讀和寫必須在系統(tǒng)中分別用指令LGDT和SGDT來進行。圖3.23全局和局部描述表寄存器與描述符表的對應關系局部描述符表寄存器LDTR對80286來說為56位,對80386及其后續(xù)CPU來說為64位。其中LDT選擇器均為16位,LDT基地址和LDT限部分實際上屬于高速緩存寄存器。局部描述符表LDT是對正在進行的任務而言的,每個任務有一個LDT,它們存儲在存儲器的一個獨立的段里。每個LDT處于存儲器的什么位置,是由GDT中的LDT描述符確定的,而該LDT描述符在GDT中的尋址又由LDTR中的16位LDT選擇器確定。

(5)段寄存器。在保護方式下,每個段寄存器都有一個16位的可見部分(簡稱段選擇器)和一個程序無法訪問的不可見部分(稱為段描述符高速緩沖存儲器寄存器,簡稱段描述符高速緩存寄存器)。

段寄存器中的16位段選擇器→段表找到段描述符→該段在存儲器中的基地址→段基址加上指令中給出的操作數(shù)在段內的偏移地址,即可得到要訪問的操作數(shù)在內存中的物理地址。對存儲器尋址方式的操作數(shù)進行訪問時,需要對存儲器進行兩次訪問,查找段表找段描述符,傳送操作數(shù),這樣將大大降低尋址存儲器操作數(shù)的速度。為了解決這一問題,80286及其后續(xù)CPU中設置了程序不可見的段描述符高速緩存寄存器來存儲段描述符。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論