《微型計(jì)算機(jī)原理及應(yīng)用》課件第2章_第1頁
《微型計(jì)算機(jī)原理及應(yīng)用》課件第2章_第2頁
《微型計(jì)算機(jī)原理及應(yīng)用》課件第2章_第3頁
《微型計(jì)算機(jī)原理及應(yīng)用》課件第2章_第4頁
《微型計(jì)算機(jī)原理及應(yīng)用》課件第2章_第5頁
已閱讀5頁,還剩169頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第2章微處理器結(jié)構(gòu)及基本原理2.1微處理器的結(jié)構(gòu)及工作原理2.28086微處理器的功能結(jié)構(gòu)2.380X86微處理器的功能結(jié)構(gòu)2.4Pentium級微處理器的功能結(jié)構(gòu)本章小結(jié)

●掌握微處理器的結(jié)構(gòu)

●掌握微處理器的工作原理

●了解Pentium級微處理器的功能結(jié)構(gòu)。

●了解CPU的主要性能指標(biāo)。本章學(xué)習(xí)目標(biāo)

2.1.1微處理器的基本結(jié)構(gòu)

微處理器(CPU)是微機(jī)的核心芯片,是整個(gè)系統(tǒng)的運(yùn)算和指揮控制中心。不同型號的微機(jī),其性能的差別首先在于CPU性能的不同。而CPU的性能又與它的內(nèi)部結(jié)構(gòu)有關(guān),每種CPU都有其特有的指令系統(tǒng)。但無論哪種CPU,其內(nèi)部基本結(jié)構(gòu)總是相近的,都有運(yùn)算器、控制器和寄存器組三大主要部件。2.1微處理器的結(jié)構(gòu)及工作原理

(1)運(yùn)算器又稱為算術(shù)邏輯單元(ALU,ArithmeticandLogicUnit),它是以加法器為基礎(chǔ),輔之以移位寄存器及相應(yīng)控制邏輯組合而成的電路,在控制信號的作用下,可完成加、減、乘、除四則運(yùn)算(包括浮點(diǎn)運(yùn)算)和各種邏輯運(yùn)算。

(2)控制器一般由指令寄存器、指令譯碼器、時(shí)序和控制邏輯電路組成??刂破魇钦麄€(gè)CPU的指揮控制中心,對協(xié)調(diào)整個(gè)微機(jī)有序工作極為重要。它從存儲(chǔ)器中依次取出程序的各條指令,并根據(jù)指令的要求,向微機(jī)的各個(gè)部件發(fā)出相應(yīng)的控制信號,使各部件協(xié)調(diào)工作,從而實(shí)現(xiàn)對整個(gè)微機(jī)系統(tǒng)的控制。

(3)寄存器組實(shí)質(zhì)上是CPU內(nèi)部的若干個(gè)高速存儲(chǔ)單元,在匯編語言中通常按名字來訪問它們。寄存器可分為專用寄存器和通用寄存器。專用寄存器的作用是固定的,如堆棧指針、程序計(jì)數(shù)器、標(biāo)志寄存器、地址寄存器等;而通用寄存器則可由程序員規(guī)定其用途。通用寄存器的數(shù)目因CPU的不同而異,8086/8088CPU中有8個(gè)16位的通用寄存器。寄存器的作用是用來存放運(yùn)算、處理的中間結(jié)果,避免對存儲(chǔ)器的頻繁訪問,從而縮短指令的長度和指令的執(zhí)行時(shí)間。微處理器中還有一些不能直接為程序員所用的寄存器,如累加鎖存器、暫存器和指令寄存器等,它們僅受內(nèi)部定時(shí)和控制邏輯的控制。2.1.2微處理器的基本工作原理

微處理器正是利用指令來實(shí)現(xiàn)對計(jì)算機(jī)運(yùn)行的控制的。指令也是一組二進(jìn)制數(shù),它們不是用來計(jì)算的,而是專門用來控制計(jì)算機(jī)自動(dòng)執(zhí)行的。這些特殊的二進(jìn)制數(shù)經(jīng)過一種叫做指令譯碼器的特殊電路,就產(chǎn)生了各種各樣的控制信號去控制計(jì)算機(jī)各部分協(xié)調(diào)工作。其工作過程原理如圖2.1所示。首先將指令的地址放到地址總線上,把存儲(chǔ)器相應(yīng)地址中存放的指令從數(shù)據(jù)總線中取出,并經(jīng)譯碼器對指令進(jìn)行譯碼。地址總線為單向總線,從內(nèi)存中讀取地址的操作是通過數(shù)據(jù)總線來完成的。如果需要,則將指令所需操作數(shù)的地址和數(shù)據(jù)取出,這些地址和數(shù)據(jù)可以存在存儲(chǔ)器中,也可以存在寄存器中。經(jīng)控制器產(chǎn)生的控制信號控制計(jì)算機(jī)執(zhí)行指令所規(guī)定的操作,在執(zhí)行下一條指令之前要檢查有無其他控制信號,如中斷請求信號等,并作出響應(yīng),且提供表示狀態(tài)信息的標(biāo)志信號、控制信號和定時(shí)信號(這些信號供給整個(gè)系統(tǒng)使用)。

圖2.1計(jì)算機(jī)的工作原理計(jì)算機(jī)在工作時(shí)總是先取出指令,然后對指令進(jìn)行譯碼(也可稱為分析指令),最后完成指令要求的操作。一條指令執(zhí)行結(jié)束后再取下一條指令。重復(fù)上面的過程,從而達(dá)到自動(dòng)執(zhí)行的目的。這種方式稱為順序控制方式,在微型計(jì)算機(jī)和小型計(jì)算機(jī)中大多采用這種方式,而在大型計(jì)算機(jī)和中型計(jì)算機(jī)中則采用更復(fù)雜的控制方式。指令包含的兩個(gè)基本部分是操作碼和操作數(shù)。操作碼指出要計(jì)算機(jī)進(jìn)行何種操作,計(jì)算機(jī)根據(jù)操作碼產(chǎn)生相應(yīng)的操作控制信息;操作數(shù)用來指定參與此操作的數(shù)據(jù)或操作數(shù)的地址,存放操作結(jié)果的地址或下一條指令的地址等。操作數(shù)所給出的地址,可以是存儲(chǔ)器的地址,也可以是運(yùn)算器中寄存器的編號,還可以是外部設(shè)備的地址。

8086/8088微機(jī)指微機(jī)的中央處理器采用的是8086/8088CPU。8086/8088屬于第三代微處理器,8088是準(zhǔn)16位微處理器,即其內(nèi)部數(shù)據(jù)總線是16位,而CPU與外部進(jìn)行數(shù)據(jù)交換用的數(shù)據(jù)總線寬度是8位;8086是16位微處理器,CPU與外部進(jìn)行數(shù)據(jù)交換用的數(shù)據(jù)總線寬度是16位。8086/8088CPU的內(nèi)部由兩個(gè)獨(dú)立的工作部件構(gòu)成,分別是總線接口部件BIU(BusInterfaceUnit)和執(zhí)行部件EU(ExecutionUnit),兩者并行操作,提高了CPU的運(yùn)行效率。8086CPU的內(nèi)部結(jié)構(gòu)如圖2.2所示。2.28086微處理器的功能結(jié)構(gòu)

圖2.28086CPU的內(nèi)部結(jié)構(gòu)總線接口部件(BIU)包括數(shù)據(jù)寄存器、算術(shù)邏輯運(yùn)算單元ALU和控制器,主要用來完成從存儲(chǔ)器中取指令并送至指令隊(duì)列;在指令執(zhí)行時(shí)從指定的存儲(chǔ)器單元或I/O接口中取操作數(shù),并將數(shù)據(jù)傳送給執(zhí)行部件;或者把執(zhí)行部件的操作結(jié)果傳送到指定的存儲(chǔ)器單元或I/O接口中。

執(zhí)行部件(EU)從總線接口部件的指令隊(duì)列中取得指令,并在ALU上執(zhí)行指令;然后將處理的結(jié)果送回總線接口部件,由總線接口部件存儲(chǔ)處理。2.2.1總線接口部件

總線接口部件(BIU)也叫總線接口單元,是8086與存儲(chǔ)器和數(shù)據(jù)總線的接口,它提供了16位雙向數(shù)據(jù)總線和20位地址總線,并負(fù)責(zé)完成所有外部總線的操作。BIU主要由地址加法器、專用寄存器組、指令隊(duì)列緩沖器以及總線控制電路等4個(gè)部件組成。其具體功能有取指令、指令排隊(duì)、讀操作數(shù)和寫操作數(shù)、地址形成及總線控制。BIU中的地址加法器將來自于段寄存器的16位地址左移4位后與來自于IP寄存器或指令執(zhí)行部件(EU)提供的16位偏移地址相加(通常將“段首地址:偏移地址”稱為邏輯地址),形成一個(gè)20位的實(shí)際地址(又稱為物理地址),以對1MB的存儲(chǔ)空間進(jìn)行尋址。具體講:當(dāng)CPU執(zhí)行指令時(shí),BIU根據(jù)指令的尋址方式通過地址加法器形成指令在存儲(chǔ)器中的物理地址,然后訪問該物理地址所對應(yīng)的存儲(chǔ)單元,從中取出指令代碼送到指令隊(duì)列緩沖器中等待執(zhí)行。指令隊(duì)列一共6個(gè)字節(jié)(8088的指令隊(duì)列為4個(gè)字節(jié)),一旦指令隊(duì)列中空出2個(gè)字節(jié)(8088中為一個(gè)字節(jié)),BIU將自動(dòng)進(jìn)入讀指令操作以填滿指令隊(duì)列。遇到轉(zhuǎn)移類指令時(shí),BIU將指令隊(duì)列中的已有指令作廢,重新從新的目標(biāo)地址中取指令送到指令隊(duì)列中。當(dāng)EU需要讀寫數(shù)據(jù)時(shí),BIU將根據(jù)EU送來的操作數(shù)地址形成操作數(shù)的物理地址,從中讀取操作數(shù)或者將指令的執(zhí)行結(jié)果傳送到該物理地址所指定的內(nèi)存單元或外設(shè)接口中。BIU的總線控制電路將CPU的內(nèi)部總線與外部總線相連,是CPU與外部交換數(shù)據(jù)的通路。對于8086而言,BIU的總線控制電路包括16條數(shù)據(jù)總線、20條地址總線和若干條控制總線;而8088的總線控制電路與外部交換數(shù)據(jù)的總線寬度是8位,總線控制電路與通用寄存器組之間的數(shù)據(jù)總線寬度也是8位。但8088EU內(nèi)部總線仍是16位,這也是將8088稱為準(zhǔn)16位微處理器的原因。2.2.2執(zhí)行部件

執(zhí)行部件(EU,也叫指令執(zhí)行單元)主要由算術(shù)邏輯運(yùn)算單元(ALU)、標(biāo)志寄存器(FR)、通用寄存器組和EU控制器等4個(gè)部件組成。其主要功能是完成指令譯碼和執(zhí)行指令的工作。一般情況下指令順序執(zhí)行,EU可不斷地從BIU指令隊(duì)列緩沖器中取得執(zhí)行的指令,連續(xù)執(zhí)行指令,而省去了訪問存儲(chǔ)器取指令所需的時(shí)間。如果指令執(zhí)行過程中需要訪問存儲(chǔ)器存取數(shù)據(jù)時(shí),只需將要訪問的地址送給BIU,等待操作數(shù)到來后再繼續(xù)執(zhí)行。遇到轉(zhuǎn)移類指令時(shí),則將指令隊(duì)列中的后續(xù)指令作廢,等待BIU根據(jù)轉(zhuǎn)移地址重新從存儲(chǔ)器中取出新的指令代碼進(jìn)入指令隊(duì)列緩沖器后,EU才能繼續(xù)執(zhí)行指令。這種情況下,EU和BIU的并行操作會(huì)受到一定的影響,但只要轉(zhuǎn)移類指令出現(xiàn)的頻率不是很高,兩者的并行操作仍然能取得較好的效果。EU中的算術(shù)邏輯運(yùn)算部件ALU可完成16位或8位二進(jìn)制數(shù)的運(yùn)算,運(yùn)算結(jié)果一方面通過內(nèi)部總線送到通用寄存器組或BIU的內(nèi)部寄存器中以等待寫到存儲(chǔ)器中;另一方面影響狀態(tài)標(biāo)志寄存器FR的狀態(tài)標(biāo)志位。16位暫存器用于暫時(shí)存放參加運(yùn)算的操作數(shù)。EU控制器則負(fù)責(zé)從BIU的指令隊(duì)列緩沖器中取指令、分析指令(即對指令譯碼),然后根據(jù)譯碼結(jié)果向EU內(nèi)部各部件發(fā)出控制命令,以完成指令的功能。2.2.38086CPU的引腳功能

CPU的功能越強(qiáng),需要的引腳就越多,但由于受當(dāng)時(shí)集成電路制造工藝的限制,芯片的引腳不可能做得很多,為了解決功能強(qiáng)和引腳少的矛盾,8086/8088CPU采用了引腳復(fù)用技術(shù),使部分引腳具有雙重功能。

8086/8088CPU采用雙列直插式的封裝形式,有40條引腳,如圖2.3所示。為了適應(yīng)不同的應(yīng)用環(huán)境,8086/8088CPU有兩種工作方式:最大方式(MX)和最小方式(MN),這由引腳33(MN/ )加以控制。最小方式適用于單微處理器組成的小系統(tǒng),在這種系統(tǒng)中,所有的總線控制信號都直接由8086/8088產(chǎn)生;最大方式適用于多微處理器組成的大系統(tǒng),它包含兩個(gè)或多個(gè)微處理器,其中一個(gè)就是8086/8088,稱為主處理器,其他的處理器則稱為協(xié)處理器。

CPU的許多引腳在設(shè)計(jì)時(shí)都采用了三態(tài)門邏輯輸出電路,即輸出信號除了邏輯狀態(tài)1和邏輯狀態(tài)0以外,還有第三種狀態(tài)——高阻狀態(tài)(也叫懸空狀態(tài)),當(dāng)輸出為高阻狀態(tài)時(shí),表示芯片已放棄了對引腳的控制,該引腳所連接的設(shè)備就可以接管對它的控制了。

圖2.38086/8088CPU引腳

1.地址/數(shù)據(jù)總線AD15~AD0

這是分時(shí)復(fù)用的存儲(chǔ)器或I/O端口地址和數(shù)據(jù)總線,雙向工作,三態(tài)。它們在總線周期的T1狀態(tài)作為地址線,輸出要訪問的存儲(chǔ)器或I/O端口的地址;在總線周期的T2、T3狀態(tài)作為數(shù)據(jù)線,傳輸數(shù)據(jù)。

2.地址/狀態(tài)總線A19/S6~A16/S3

這是地址/狀態(tài)復(fù)用引腳,僅作輸出,三態(tài)。這些引腳在總線周期的T1狀態(tài)用來輸出地址的最高4位,而在總線周期的T2、T3、TW和T4狀態(tài)時(shí)用來輸出狀態(tài)信息。當(dāng)S6為0時(shí),表示8086/8088CPU當(dāng)前與總線連接。S5表明中斷允許標(biāo)志的當(dāng)前設(shè)置,為1,表示當(dāng)前允許可屏蔽中斷請求;為0,則禁止一切可屏蔽中斷請求。狀態(tài)信號中的S4和S3用來指示當(dāng)前使用的段寄存器,具體規(guī)定如表2.1所示。

表2.1當(dāng)前使用的段寄存器的指示

3.控制總線

(1) /S7(BusHighEnable/Status):高8位數(shù)據(jù)總線允許/狀態(tài)復(fù)用引腳,輸出,三態(tài)。在總線周期的T1狀態(tài),8086在 /S7引腳輸出信號, /S7

=

0表示高8位數(shù)據(jù)線D15~D8上的數(shù)據(jù)有效;在T2、T3、TW和T4狀態(tài), /S7引腳輸出狀態(tài)信號S7,在8086設(shè)計(jì)中,S7為備用信號,其內(nèi)容不固定。

通過 信號和A0的組合就可以告訴連接在總線上的存儲(chǔ)器,當(dāng)前的數(shù)據(jù)在總線上將以何種形式出現(xiàn)。表2.2歸納了4種讀/寫格式。

表2.2BHE和A0信號的意義從表2.2中可以看出,在8086系統(tǒng)中,如果要讀/寫從奇地址單元開始的一個(gè)字,需要用兩個(gè)總線周期。

(2)

(Read):讀信號,輸出,三態(tài)。 信號指出將要執(zhí)行一個(gè)對存儲(chǔ)器或I/O端口的讀操作,低電平有效。在一個(gè)執(zhí)行讀操作的總線周期中, 信號在T2、T3和TW狀態(tài)均為低電平。

(3)

READY:等待狀態(tài)控制,輸入,高電平有效,表示數(shù)據(jù)傳送已結(jié)束的信號。8086CPU與存儲(chǔ)器或I/O相配時(shí),當(dāng)CPU發(fā)出讀/寫操作,因后者速度慢,來不及響應(yīng)時(shí),CPU通常在T3之后,檢測READY引腳上的信號。如果READY為0,則自動(dòng)插入一個(gè)等待時(shí)鐘周期,然后再檢測READY的狀態(tài),如果還是0,則再插入等待周期,直到READY為1時(shí)為止;當(dāng)READY=1時(shí),即是通知CPU數(shù)據(jù)傳輸完成,結(jié)束等待而進(jìn)入T4狀態(tài)。

(4) :等待測試,輸入,低電平有效。當(dāng)CPU在執(zhí)行WAIT指令時(shí),每隔5個(gè)時(shí)鐘周期對 的輸入進(jìn)行一次測試。 =1時(shí),CPU進(jìn)入等待,重復(fù)執(zhí)行WAIT指令;直到 =0,再繼續(xù)執(zhí)行WAIT后的下一條指令,等待期間允許外部中斷。

(5)

INTR(InterruptRequest):屏蔽中斷請求信號,輸入,高電平有效。CPU在執(zhí)行每條指令的最后一個(gè)時(shí)鐘周期時(shí),會(huì)對INTR引腳的信號進(jìn)行采樣。若CPU的中斷允許標(biāo)志為1,且又接收到INTR信號,則CPU會(huì)在執(zhí)行完當(dāng)前指令后,響應(yīng)中斷請求,執(zhí)行一個(gè)中斷處理子程序。

(6)

NMI(Non-MaskableInterrupt):非屏蔽中斷請求信號,輸入。NMI不受中斷允許標(biāo)志IF的影響,也不能用軟件進(jìn)行屏蔽。每當(dāng)NMI端輸入一個(gè)正沿觸發(fā)信號時(shí),CPU會(huì)在執(zhí)行完當(dāng)前指令后,執(zhí)行對應(yīng)的不可屏蔽中斷處理程序。

(7)

RESET:復(fù)位信號,輸入,高電平有效。RESET將使8086CPU立即結(jié)束當(dāng)前操作。CPU內(nèi)部進(jìn)入復(fù)位工作。CPU要求復(fù)位信號至少要保持4個(gè)時(shí)鐘周期的高電平,才能結(jié)束正在進(jìn)行的操作。當(dāng)RESET信號變?yōu)榈碗娖綍r(shí),CPU就開始執(zhí)行再啟動(dòng)過程。復(fù)位時(shí)CPU內(nèi)部各寄存器的狀態(tài)如表2.3所示。

表2.3復(fù)位時(shí)CPU中寄存器狀態(tài)

(8)

CLK(Clock):系統(tǒng)時(shí)鐘,輸入。8086/8088要求時(shí)鐘信號的占空比為33%,即1/3周期為高電平,2/3周期為低電平,即時(shí)鐘信號的低、高之比采用2∶1時(shí)為最佳狀態(tài)。

(9)

MN/ :最小/最大方式信號,輸入。當(dāng)MN/

+5V電壓時(shí),CPU工作于最小方式;當(dāng)MN/ 接地時(shí),CPU工作于最大方式。

4.電源線VCC和地線GND

電源線VCC(40腳)接入的電壓為

+5V;1腳、20腳為地線GND,均應(yīng)接地。2.2.48086寄存器組

寄存器是CPU內(nèi)部的高速存儲(chǔ)單元,不同的CPU配有不同數(shù)量、不同長度的一組寄存器。有些寄存器不面向用戶,稱為“透明”寄存器,對它們的工作,用戶不需要了解;有些寄存器面向用戶,供編程序用,這些寄存器在程序中頻繁使用,被稱為可編程寄存器。由于訪問寄存器比訪問存儲(chǔ)器快捷和方便,所以各種寄存器常用來存放臨時(shí)的數(shù)據(jù)或地址,具有數(shù)據(jù)準(zhǔn)備、數(shù)據(jù)調(diào)度和數(shù)據(jù)緩沖等作用。從指令角度看,一般在含有兩個(gè)操作數(shù)的指令中,必有一個(gè)為寄存器操作數(shù),這樣可以縮短指令長度和指令的執(zhí)行時(shí)間。從應(yīng)用角度看,可以將寄存器分成以下三類。

(1)通用寄存器:在CPU中數(shù)量最多。它們既可以存放數(shù)據(jù),又可以存放地址,使用頻度非常高,是調(diào)度數(shù)據(jù)的主要手段。其中,累加器的尋址手段最多,功能最強(qiáng),使用最頻繁。

(2)地址寄存器:主要用來存放地址,用于存儲(chǔ)器的尋址操作,因而也稱為地址指針或?qū)S眉拇嫫?,如堆棧指針、指令指針等。地址寄存器的功能比較單一,在訪問內(nèi)存時(shí),可以通過它形成各種尋址方式。

(3)標(biāo)志寄存器:用來保護(hù)程序的運(yùn)行狀態(tài),也稱為程序狀態(tài)字寄存器(PSW)。在標(biāo)志寄存器中,有些標(biāo)志位反映運(yùn)算過程中發(fā)生的情況,如運(yùn)算中有無進(jìn)位或借位、有符號數(shù)運(yùn)算有無溢出等;有些標(biāo)志位反映運(yùn)算結(jié)果的數(shù)字特征,如結(jié)果的最高位是否為1、結(jié)果是否為0等。

在8086/8088微處理器中設(shè)置一些寄存器,這些寄存器可用來暫存參加運(yùn)算的操作數(shù)和運(yùn)算過程中的中間結(jié)果。8086/8088CPU內(nèi)部共有14個(gè)16位寄存器,這些寄存器按功能可分為通用寄存器(8個(gè))、段寄存器(4個(gè))和控制寄存器(2個(gè))三大類,如圖2.4所示。

圖2.48086/8088CPU內(nèi)部寄存器

1.通用寄存器

通用寄存器包括數(shù)據(jù)寄存器以及地址指針和變址寄存器。

1)數(shù)據(jù)寄存器

數(shù)據(jù)寄存器包括AX、BX、CX、DX這4個(gè)16位寄存器,通常用來保存算術(shù)和邏輯運(yùn)算的操作數(shù)、中間結(jié)果和地址。每一個(gè)數(shù)據(jù)寄存器都既可以作為16位寄存器使用,也可以將高字節(jié)和低字節(jié)分開作為兩個(gè)8位寄存器使用。AX、BX、CX、DX分別可拆成AH、AL、BH、BL、CH、CL、DH、DL,其中AH、BH、CH、DH為高8位,AL、BL、CL、DL為低8位。這種靈活的使用方法給編程帶來了極大的方便,既可以處理16位數(shù)據(jù),也能處理8位數(shù)據(jù)。

(1)

AX(Accumulator)稱為累加器,常用于存放算術(shù)邏輯運(yùn)算中的操作數(shù)。另外,所有的I/O指令都使用累加器與外設(shè)接口傳送信息。

(2)

BX(Base)稱為基址寄存器,常用來存放訪問內(nèi)存時(shí)的基地址。

(3)

CX(Count)稱為計(jì)數(shù)寄存器,在循環(huán)和串操作指令中用作計(jì)數(shù)器。

(4)

DX(Data)稱為數(shù)據(jù)寄存器,在寄存器間接尋址的I/O指令中存放I/O接口的地址。

另外,在作雙字長乘除法運(yùn)算時(shí),DX與AX合起來存放一個(gè)雙字長數(shù)(32位),其中DX存放高16位,AX存放低16位。

2)地址指針和變址寄存器

地址指針和變址寄存器包括SP、BP、SI、DI這4個(gè)16位寄存器,主要用來存放或指示操作數(shù)的偏移地址。

(1)

SP(StackPointer)稱為堆棧指針寄存器,用來存放當(dāng)前堆棧段中棧頂?shù)钠频刂?,永遠(yuǎn)指向堆棧的棧頂。

(2)

BP(BasePointer)稱為基址指針寄存器,是堆棧操作時(shí)的基址寄存器。

SP和BP總是與SS堆棧段一起使用的。這兩個(gè)寄存器在使用時(shí),若不特別指明某段,則默認(rèn)為堆棧段。所不同的是,SP僅用于堆棧操作,并且SP始終指向棧頂,故稱為堆棧指針。而BP則作為基址指針,它可以指向堆棧段的任意單元。如間接尋址中,BP可用來存放堆棧段中的某一個(gè)數(shù)據(jù)區(qū)的“基址”偏移量。

(3)

SI和DI稱為變址寄存器,它們通常與DS聯(lián)用,為程序訪問當(dāng)前數(shù)據(jù)段提供操作數(shù)的段內(nèi)偏移地址。SI和DI除了作為一般的變址寄存器外,在串操作指令中的使用也有明確規(guī)定:SI用來存放源操作數(shù)的偏移地址,稱為源變址寄存器;DI用來存放目的操作數(shù)的偏移地址,稱為目的變址寄存器。二者不能混用。由于串操作指令規(guī)定源數(shù)據(jù)串必須位于當(dāng)前數(shù)據(jù)段DS中,目的數(shù)據(jù)串必須位于附加數(shù)據(jù)段ES中,因此SI和DI中的內(nèi)容分別是當(dāng)前數(shù)據(jù)段和當(dāng)前附加段中某一存儲(chǔ)單元的偏移地址。所以,通常在串操作中,SI和DI必須與DS、ES聯(lián)用。

2.段寄存器

8086/8088CPU可尋址1MB的內(nèi)存空間。直接尋址時(shí)需要20位地址碼,而所有的內(nèi)部寄存器都是16位的,用它們作為地址寄存器只能直接尋址64KB空間。因此,

8086/8088CPU中采用了存儲(chǔ)空間的分段存儲(chǔ)技術(shù)來解決這一矛盾。

在8086/8088可尋址的1MB的內(nèi)存空間中,用戶可以使用4種分工不同的邏輯段,即代碼段、數(shù)據(jù)段、附加段和堆棧段。各段的位置可由用戶指派,它們可以彼此分離,也可以首尾相連,還可以重疊或部分重疊。4個(gè)邏輯段的段地址分別存放在代碼段寄存器CS、數(shù)據(jù)段寄存器DS、附加段寄存器ES和堆棧段寄存器SS4個(gè)段寄存器中。

(1)代碼段CS(CodeSegment):該段用來存放程序和常數(shù)。系統(tǒng)在取指令時(shí)將尋址代碼段,其段地址和偏移地址分別由段寄存器CS和指令指針I(yè)P給出。此外,代碼段可用來存放數(shù)據(jù),如某些固定的表格數(shù)據(jù)等,采用多種尋址方法和段跨越前綴“CS:”就可訪問到這些數(shù)據(jù)。

(2)數(shù)據(jù)段DS(DataSegment):該段用于數(shù)據(jù)(即變量)的保存。用戶在尋址該段內(nèi)的數(shù)據(jù)時(shí),可以默認(rèn)段的說明(即默認(rèn)DS:),其偏移地址(即有效地址EA)可通過直接尋址、間接尋址、基址尋址、變址尋址以及基址加變址尋址等多種尋址方法形成。

(3)附加段ES(ExtraSegment):該段也用于數(shù)據(jù)(即變量)的保存。用戶在訪問該段內(nèi)的數(shù)據(jù)時(shí),其偏移地址(即有效地址EA)同樣可通過多種尋址方法來形成,但在偏移地址前一般要加上段前綴(ES:)。例外的是串操作,此時(shí)系統(tǒng)默認(rèn)源操作數(shù)和目的操作數(shù)分別位于數(shù)據(jù)段和附加段。

(4)堆棧段SS(StackSegment):該段用來安排“堆?!薄K^“堆?!?,是指這樣一段指定的內(nèi)存區(qū)域:其存取原則是“先進(jìn)后出”(FILO,F(xiàn)irstInLastOut)或“后進(jìn)先出”(LIFO,LastInFirstOut)。

在計(jì)算機(jī)的各種應(yīng)用中,堆棧是一種非常有用的數(shù)據(jù)結(jié)構(gòu),它為保護(hù)數(shù)據(jù)、調(diào)度數(shù)據(jù)提供了重要的手段。

3.控制寄存器

(1)

IP(InstructionPointer)稱為指令指針,是一個(gè)16位的寄存器,用來存放預(yù)取指令的偏移地址。CPU取指令時(shí)總是以CS為段基址,以IP為段內(nèi)偏移地址。當(dāng)CPU從CS段中偏移地址為IP的內(nèi)存地址中取出指令代碼的一個(gè)字節(jié)后,IP自動(dòng)加1,指向指令代碼的下一個(gè)字節(jié)。用戶程序不能直接訪問IP。

(2)

FLAGS也稱為標(biāo)志寄存器(FR)或程序狀態(tài)字(PSW),它是一個(gè)16位的寄存器,僅定義了9位,其中6位用作狀態(tài)標(biāo)志,3位用作控制標(biāo)志,如圖2.5所示。

圖2.58086狀態(tài)標(biāo)志寄存器狀態(tài)標(biāo)志位用來反映EU執(zhí)行算術(shù)或邏輯運(yùn)算的結(jié)果特征,6個(gè)狀態(tài)位如下:

①進(jìn)位標(biāo)志CF:當(dāng)加法運(yùn)算有進(jìn)位,減法運(yùn)算有借位時(shí),CF=1,否則CF=0。

②輔助進(jìn)位標(biāo)志AF:在字節(jié)操作時(shí),低4位向高4位有進(jìn)位(加法)或有借位(減法),或在字操作時(shí),低字節(jié)向高字節(jié)有進(jìn)位(加法)或有借位(減法)時(shí),AF=1,否則AF=0。

③奇偶校驗(yàn)標(biāo)志PF:當(dāng)運(yùn)算結(jié)果低8位“1”的個(gè)數(shù)為偶數(shù)時(shí),PF=1,否則PF=0。

④零標(biāo)志ZF:當(dāng)運(yùn)算結(jié)果為0時(shí),ZF=1,否則ZF=0。

⑤溢出標(biāo)志OF:當(dāng)運(yùn)算結(jié)果超出機(jī)器的表示范圍時(shí),OF=1,否則OF=0。

⑥符號標(biāo)志SF:在進(jìn)行有符號數(shù)的算術(shù)運(yùn)算時(shí),當(dāng)運(yùn)算結(jié)果為負(fù)時(shí),SF=1,否則SF=0??刂茦?biāo)志位用來控制CPU的操作,3個(gè)標(biāo)志位如下:

①陷阱標(biāo)志TF(TrapFlag):TF是為了調(diào)試程序方便而設(shè)置的。若TF=1,則8086CPU處于單步工作方式,每執(zhí)行完一條指令就自動(dòng)產(chǎn)生一個(gè)內(nèi)部中斷,轉(zhuǎn)去執(zhí)行一個(gè)中斷服務(wù)程序;當(dāng)TF=0時(shí),8086CPU正常執(zhí)行程序。

②中斷允許標(biāo)志IF(InterruptEnableFlag):它是控制可屏蔽中斷的標(biāo)志。若IF=1,則表示允許CPU接受從INTR引腳上發(fā)來的可屏蔽中斷請求信號;若IF=0,則禁止CPU接受可屏蔽中斷請求信號。

③方向標(biāo)志DF(DirectionFlag):DF用于控制字符串操作指令的步進(jìn)方向。當(dāng)DF=1時(shí),字符串操作指令按遞減的順序從高地址到低地址的方向?qū)ψ址M(jìn)行處理;當(dāng)DF=0時(shí),字符串操作指令按遞增的順序從低地址到高地址的方向?qū)ψ址M(jìn)行處理。

對于狀態(tài)標(biāo)志,CPU在進(jìn)行算術(shù)邏輯運(yùn)算時(shí),根據(jù)操作結(jié)果自動(dòng)將狀態(tài)標(biāo)志位置位(等于1)或復(fù)位(等于0);而對于控制標(biāo)志,可事先用指令設(shè)置,在程序執(zhí)行時(shí)檢測這些標(biāo)志,用以控制程序的轉(zhuǎn)向。2.2.58086基本時(shí)序

計(jì)算機(jī)系統(tǒng)為了完成自身的功能,需要執(zhí)行各種操作,這些操作與時(shí)鐘同步,按時(shí)序一步一步地執(zhí)行,這就構(gòu)成了CPU的操作時(shí)序。

下面介紹幾個(gè)關(guān)于時(shí)序的基本概念:時(shí)鐘周期、總線周期和指令周期。

時(shí)鐘周期是時(shí)鐘脈沖產(chǎn)生的,時(shí)鐘周期又叫T周期;微處理器訪問存儲(chǔ)器或外設(shè)都要通過總線,完成一次總線操作所需的時(shí)間稱為總線周期,它由幾個(gè)T周期組成;指令周期是執(zhí)行一條指令所需的時(shí)間,它由一個(gè)至幾個(gè)總線周期組成。

歸納起來,8086的主要操作有如下幾種:①系統(tǒng)的復(fù)位和啟動(dòng)操作;②總線操作;③暫停操作;④中斷操作;⑤總線保持或總線請求/允許操作。

1.系統(tǒng)的復(fù)位和啟動(dòng)操作

8086/8088的復(fù)位和啟動(dòng)操作是通過RESET引腳觸發(fā)執(zhí)行的。要求復(fù)位信號RESET至少維持4個(gè)時(shí)鐘周期的高電平,當(dāng)該信號一旦進(jìn)入高電平,8086/8088CPU就會(huì)結(jié)束現(xiàn)行操作,保持在復(fù)位狀態(tài),直到RESET變?yōu)榈碗娖綖橹埂?/p>

在復(fù)位狀態(tài)時(shí),CPU內(nèi)部各寄存器的內(nèi)容見表2.3。

從表2.3中可以看出,在復(fù)位的時(shí)候,代碼段寄存器CS和指令指針I(yè)P分別初始化為FFFFH和0000H,即在復(fù)位之后8086/8088微處理器是從存儲(chǔ)器的0FFFF0H處開始執(zhí)行指令的。

RESET變?yōu)楦唠娖胶?,再過一個(gè)時(shí)鐘周期,所有三態(tài)輸出線被設(shè)置成高阻狀態(tài),并一直保持,直到RESET回到低電平。

2.8086CPU最小方式時(shí)總線時(shí)序

8086/8088CPU與存儲(chǔ)器及I/O端口交換數(shù)據(jù)需要執(zhí)行一個(gè)總線周期。它可以分為兩部分,即讀總線周期和寫總線周期。前者是CPU從存儲(chǔ)器或I/O端口讀取數(shù)據(jù),后者是CPU將數(shù)據(jù)寫入存儲(chǔ)器或I/O端口。

1)讀總線周期時(shí)序

一個(gè)最基本的讀總線周期包含4個(gè)狀態(tài),即T1、T2、T3和T4。在存儲(chǔ)器和外設(shè)速度較慢時(shí),要在T3之后插入一個(gè)或幾個(gè)等待狀態(tài)TW。如圖2.6所示為8086CPU最小方式時(shí)讀總線周期時(shí)序圖。圖中畫了4個(gè)T狀態(tài),即一個(gè)總線周期,且每個(gè)T狀態(tài)都是一個(gè)占空度約33%的時(shí)鐘周期,全部時(shí)序圖都以這個(gè)時(shí)鐘作為基準(zhǔn)。

圖2.68086CPU最小方式時(shí)讀總線周期時(shí)序在讀總線周期內(nèi),8086CPU可以完成取指令碼或者讀存儲(chǔ)器或I/O端口數(shù)據(jù)的操作。在T1狀態(tài)期間,CPU輸出20位地址信號、 信號和ALE信號。ALE的下降沿、地址A0~A19及 已在CPU的局部總線上穩(wěn)定可用,ALE的下降沿將地址信息和 信號鎖存在8282地址鎖存器中。對8086CPU, 和A0共同用來指出讀取數(shù)據(jù)總線的高字節(jié)、低字節(jié),或同時(shí)讀取數(shù)據(jù)總線的高、低字節(jié)。在T1~T4期間,M/ 信號指出是讀存儲(chǔ)操作還是讀I/O端口操作,DT/ 始終為低電平,用來控制8286的傳送方向。在T2狀態(tài),地址信號消失,AD15~AD0處于高阻狀態(tài),為讀入數(shù)據(jù)做準(zhǔn)備; /S7、A19/S6~A16/S3輸出狀態(tài)信息S7~S3;同時(shí)

和信號變?yōu)橛行?低電平)。 用來指出被尋址的單元或端口,將數(shù)據(jù)送入數(shù)據(jù)總線; 使8286處于允許數(shù)據(jù)傳送狀態(tài),如果存儲(chǔ)器或I/O端口可立即完成數(shù)據(jù)傳送,即能在T3期間將數(shù)據(jù)放到總線上,CPU便不用進(jìn)入等待狀態(tài)(此時(shí)READY信號為高電平)。CPU在T4狀態(tài)開始時(shí)從AD15~AD0(8088是從AD7~AD0)讀入數(shù)據(jù),在此期間 和 信號處于無效狀態(tài),此時(shí),被尋址單元或端口終止數(shù)據(jù)輸出。

2)寫總線周期時(shí)序

如圖2.7所示為8086CPU最小方式時(shí)寫總線周期時(shí)序圖。

對于寫總線周期來說,在AD15~AD0上不存在輸出地址方式與輸入數(shù)據(jù)方式轉(zhuǎn)換的過渡時(shí)間。撤銷地址信號后,立即可把數(shù)據(jù)送上AD15~AD0,但必須給出寫信號 代替

。因此, 在T2狀態(tài)變成有效(低電平),此時(shí)DT/ 為高電平, 為低電平,8286處于正向傳送。如果存儲(chǔ)器或I/O端口可以完成數(shù)據(jù)寫入而不需要等待狀態(tài),CPU將在T4狀態(tài)前使 信號無效,同時(shí)撤銷輸出的數(shù)據(jù)信號。無論是讀總線周期,還是寫總線周期,在T4狀態(tài)時(shí) 均為無效,即收發(fā)器8286被關(guān)閉。在讀/寫總線周期中,若使用的存儲(chǔ)器或外設(shè)的工作速度不能滿足上述基本時(shí)序的要求,可利用電路產(chǎn)生READY信號,經(jīng)8286同步后送到CPU的READY線上,讓CPU在T3和T4之間插入一個(gè)或幾個(gè)等待(TW)狀態(tài),解決CPU與存儲(chǔ)器或外設(shè)之間的時(shí)間配合問題。8086在T3狀態(tài)一開始時(shí)測試READY線,若READY為高電平,則在T3狀態(tài)后即進(jìn)入T4狀態(tài);若READY為低電平,則在T3狀態(tài)后會(huì)插入一個(gè)TW狀態(tài);而在每一個(gè)TW狀態(tài)的開始,CPU都會(huì)測試READY線,只有當(dāng)它為高電平時(shí),才在當(dāng)前TW狀態(tài)結(jié)束后進(jìn)入T4狀態(tài)。

圖2.78086CPU最小方式時(shí)寫總線周期時(shí)序

3)中斷響應(yīng)周期時(shí)序

當(dāng)CPU檢測出外部中斷源通過INTR引腳向CPU發(fā)出中斷請求信號后,如果標(biāo)志寄存器的中斷允許標(biāo)志位IF=1,則CPU在當(dāng)前指令執(zhí)行完以后,進(jìn)入中斷響應(yīng)過程。通過執(zhí)行兩個(gè)連續(xù)的中斷響應(yīng)周期,CPU轉(zhuǎn)去執(zhí)行中斷服務(wù)程序。中斷響應(yīng)周期時(shí)序如圖2.8所示。

在中斷響應(yīng)周期的兩個(gè)總線周期中各從INTA端輸出一個(gè)負(fù)脈沖,每個(gè)脈沖從T2持續(xù)到T4狀態(tài)。在收到第二個(gè)脈沖后,接受中斷響應(yīng)的接口把中斷類型碼放到AD7~AD0上,而在這兩個(gè)總線周期的其余時(shí)間里,AD7~AD0處于浮空。CPU讀入中斷類型碼后,就可以在中斷向量表中找到該外設(shè)的服務(wù)程序入口地址,轉(zhuǎn)為中斷服務(wù)。

圖2.8中斷響應(yīng)周期時(shí)序

4)總線請求與總線響應(yīng)時(shí)序

如圖2.9所示為8086CPU最小方式時(shí)總線請求與響應(yīng)周期時(shí)序圖。8086CPU在每個(gè)時(shí)鐘周期的上升沿檢測HOLD引腳,如果在T4之前或T1期間識別出有效的HOLD信號(高電平),則后續(xù)總線周期的控制權(quán)將被授予提出請求的主控設(shè)備(如DMAC),直到該主設(shè)備撤銷保持請求(HOLD回到低電平)時(shí)為止。此時(shí)HLDA引腳輸出高電平作為響應(yīng),使CPU所有三態(tài)輸出引腳處于高阻狀態(tài)。發(fā)出HOLD請求信號的主控設(shè)備在接收到HLDA(高電平)響應(yīng)信號之后開始控制總線。

圖2.98086CPU最小方式時(shí)總線請求與響應(yīng)周期時(shí)序

3.8086CPU最大方式時(shí)總線時(shí)序

1)讀總線周期與寫總線周期時(shí)序

圖2.10和圖2.11所示為8086CPU最大方式時(shí)讀總線周期時(shí)序與寫總線周期時(shí)序圖。需要說明的是,8088不用 ,數(shù)據(jù)只在AD7~AD0上傳送。圖2.10和圖2.11中A19/S6~A16/S3、AD15~AD0及 /S7的信號波形與最小方式相同。狀態(tài)位、、在總線周期開始之前設(shè)定,保持有效狀態(tài)到T3,其余時(shí)間為無效(高電平)狀態(tài)。

圖2.108086CPU最大方式讀總線周期時(shí)序

圖2.118086CPU最大方式寫總線周期時(shí)序最大方式與最小方式的不同之處有3點(diǎn):

(1)用于8282鎖存器及8286收發(fā)器的控制信號、讀寫控制信號和 在最大方式系統(tǒng)中均由8288總線控制器根據(jù)CPU輸出的3個(gè)狀態(tài)位 、 、 的狀態(tài)產(chǎn)生。

(2)最小方式系統(tǒng)下的M/ 、 和 信號由存儲(chǔ)器讀命令 、I/O讀命令 、存儲(chǔ)器寫命令

、先行存儲(chǔ)寫命令 、I/O寫命令 和先行I/O寫命令 代替。

(3)

8288輸出的數(shù)據(jù)允許信號 的極性與最小方式下CPU產(chǎn)生的 相反,使用時(shí)經(jīng)反相加到8286的OE端。在檢測到、、變?yōu)橛行顟B(tài)時(shí),8288總線控制器便在T1期間輸出ALE信號,并在DT/引腳上輸出與讀寫操作對應(yīng)的信號(讀為低電平,寫為高電平)。T2期間 變?yōu)楦唠娖剑?jīng)反相后,控制8286允許數(shù)據(jù)通過,同時(shí)對存儲(chǔ)器或I/O端口讀操作產(chǎn)生 或 信號,這兩個(gè)信號將保持到T4狀態(tài)。對于存儲(chǔ)器或I/O端口寫操作,則從T2到T4狀態(tài)輸出 或 信號,從T3到T4狀態(tài)輸出 或

信號。在最大方式系統(tǒng)中,若在T3狀態(tài)開始時(shí)READY信號為低電平,則在T3和T4之間插入等待狀態(tài)TW。8088CPU最大方式系統(tǒng)除了不使用 ,并且A15~A8只輸出地址,AD7~AD0為地址/數(shù)據(jù)復(fù)用線以外,其他與8086CPU相同。

2)中斷響應(yīng)周期時(shí)序

在最大方式時(shí), 由8288輸出。在中斷響應(yīng)周期中除了從第一個(gè)總線周期的T2到第二個(gè)總線周期的T2 在引腳上輸出低電平信號外,其他均與最小方式時(shí)的中斷響應(yīng)周期時(shí)序一致。

3)總線請求和總線響應(yīng)時(shí)序

總線請求和允許的過程是:另一總線主控設(shè)備輸送一個(gè)低電平給8086,表示總線請求,相當(dāng)于最小方式下的總線請求信號HOLD;在CPU的下一個(gè)T4或T1期間,CPU輸出一個(gè)低電平給請求總線的設(shè)備,作為總線響應(yīng)信號,它相當(dāng)于最小方式下總線響應(yīng)信號HLDA。當(dāng)總線請求再輸出一個(gè)低電平給CPU時(shí),表示總線請求結(jié)束,主控設(shè)備釋放總線。最大方式的總線請求和響應(yīng)的控制方法與最小方式有所不同,它是通過信號

或 實(shí)現(xiàn)控制的。8086CPU最大方式時(shí)總線請求和總線響應(yīng)周期時(shí)序如圖2.12所示。

圖2.128086CPU最大方式時(shí)總線請求和總線響應(yīng)周期時(shí)序總線請求和總線響應(yīng)的過程可分為三個(gè)階段:請求、授予和釋放。對于8086/8088CPU的控制總線,這時(shí)的 通常為高電平。當(dāng)8087或8089(或二者同時(shí))需要訪問總線時(shí),8087或8089就在一個(gè)時(shí)鐘狀態(tài)期間使 處于低電平,作為向8086/8088CPU發(fā)出的請求信號。CPU在每個(gè)時(shí)鐘的上升沿檢測 信號,當(dāng)處于以下條件時(shí)會(huì)檢測出請求信號:

①若CPU為8086,則當(dāng)前一次總線傳送不是對奇地址單元讀或?qū)懸粋€(gè)字的低位字節(jié);若為8088,則不管是奇地址還是偶地址,都必須完成一個(gè)字的第二個(gè)字節(jié)的傳送。

②當(dāng)前一個(gè)總線周期不是第一個(gè)中斷響應(yīng)周期。

③不再執(zhí)行帶LOCK前綴的指令。

8086/8088CPU立即在其后的T4或T1的下降沿在同一引腳上發(fā)出授予信號,向8087或8089表示已使所有三態(tài)輸出的引腳處于高阻狀態(tài),允許8087或8089使用總線。之后8087或8089開始對總線進(jìn)行存取。完成存取操作后,再通過同一條

引腳向CPU發(fā)出低電平信號,釋放信號,將總線控制權(quán)交還CPU。CPU在檢測到釋放信號后,又開始控制總線的操作。CPU、8087及8089都各有兩條 引腳,其中

具有比更高的優(yōu)先級。2.2.68086存儲(chǔ)器組織

存儲(chǔ)器用來存儲(chǔ)數(shù)據(jù)和程序,是計(jì)算機(jī)必不可少的重要部件。因此,在計(jì)算機(jī)中存儲(chǔ)單元是如何劃分的,以及如何確定單元地址等是讀者必須要弄清楚的問題。

1.存儲(chǔ)器的標(biāo)準(zhǔn)結(jié)構(gòu)

8086CPU有20根地址線,無論在最小方式還是在最大方式下都可以尋址1MB的存儲(chǔ)空間。存儲(chǔ)器按字節(jié)編址,從00000H至FFFFFH,每個(gè)字節(jié)用惟一的地址表示。若存放的數(shù)是字節(jié)形式,則存儲(chǔ)器將按順序排列存放;當(dāng)存放的數(shù)為一個(gè)字時(shí),將字的高位字節(jié)放在高地址中,將低位字節(jié)放在低地址中,高低地址連續(xù)。對于存放的字,其低位字節(jié)可以在奇數(shù)地址中(即從奇地址開始)存放,這種方式稱為非規(guī)則存放,這樣存放的字稱為非規(guī)則字,CPU需要兩次訪問存儲(chǔ)器才能存取該字;也可以在偶數(shù)地址中(即從偶地址開始)存放,這種方式是規(guī)則存放,這樣存放的字稱為規(guī)則字,CPU一次便可對該字所在的兩個(gè)存儲(chǔ)單元進(jìn)行存取。為了加快程序的運(yùn)行速度,編程時(shí)應(yīng)注意用規(guī)則字。

8088系統(tǒng)由于其外部數(shù)據(jù)總線只有8位,CPU每次訪問存儲(chǔ)器只讀寫一個(gè)字節(jié),如果要讀寫一個(gè)字,則CPU需要訪問兩次存儲(chǔ)器,所以8088系統(tǒng)無需考慮規(guī)則字和非規(guī)則字。

2.存儲(chǔ)器的分段

由于在8086系統(tǒng)中,需要用20位物理地址訪問1MB的存儲(chǔ)空間,但8086的內(nèi)部結(jié)構(gòu)以及內(nèi)部數(shù)據(jù)的直接處理能力和寄存器都只有16位,故只能直接提供16位地址,尋址64KB存儲(chǔ)空間。為了能夠?qū)ぶ?MB空間,

8086CPU中引入了存儲(chǔ)器地址空間分段的概念。即將1MB字節(jié)的存儲(chǔ)器空間分成若干邏輯段,每個(gè)段最長為64KB,段內(nèi)地址是連續(xù)的,這樣,一旦所訪問的段被確定后,就可采用16位尋址方法在段內(nèi)找到要訪問的存儲(chǔ)單元。邏輯段之間可以是連續(xù)的,也可以是分開的或重疊的。段的首地址必須能被16整除,即每段首地址的低4位必須為0,高16位就是段基地址值。段內(nèi)任一存儲(chǔ)單元與它所在段的段基地址值之間的距離稱為偏移量或偏移地址。段基地址值存放在段寄存器CS、SS、DS、ES中,程序可以從4個(gè)段寄存器給出的邏輯段中存取代碼和數(shù)據(jù)。

3.物理地址和邏輯地址

物理地址(PhysicalAddress)又叫實(shí)際地址,是CPU和存儲(chǔ)器進(jìn)行數(shù)據(jù)交換時(shí)使用的地址。對8086來說,是用20位二進(jìn)制數(shù)或5位十六進(jìn)制數(shù)表示的代碼。物理地址是惟一能代表存儲(chǔ)空間每個(gè)字節(jié)單元的地址。任何一個(gè)存儲(chǔ)單元可以被惟一地包含在一個(gè)邏輯段內(nèi),也可被包含在多個(gè)重疊的邏輯段中。段內(nèi)存儲(chǔ)單元的地址可以用相對于段基地址值的偏移量來表示,即用16位二進(jìn)制無符號數(shù)表示。因此,只要已知一個(gè)存儲(chǔ)單元的段基地址值和它的偏移量,也就知道了其物理地址,計(jì)算方法如下:物理地址(20位)

=

段基地址值

×

10H

+

偏移地址

“段基地址值×10H”就是將段基地址值(二進(jìn)制形式)左移4位。8086CPU訪問存儲(chǔ)器時(shí),對物理地址的計(jì)算是在總線接口單元中由地址加法器完成的,其產(chǎn)生過程如圖2.13所示。段基地址值又簡稱為段基值。

邏輯地址由兩部分組成:段基值和偏移量,它們都是用無符號的16位二進(jìn)制數(shù)或4位十六進(jìn)制數(shù)表示的。邏輯地址的一般表示形式為“段基值:偏移量”。

圖2.13物理地址的生成

4.堆棧

堆棧(Stack)是為保護(hù)數(shù)據(jù)和調(diào)度數(shù)據(jù)而開辟的特殊數(shù)據(jù)區(qū)域。堆棧的一端是固定的(棧底),另一端是浮動(dòng)的(棧頂)。正常的堆棧操作,其信息的存取在浮動(dòng)的一端進(jìn)行。堆棧中的數(shù)據(jù)嚴(yán)格按照“先進(jìn)后出(FILO,F(xiàn)irstInLastOut)”的原則進(jìn)行存取操作,即數(shù)據(jù)是由棧頂壓入和彈出的。由堆棧段寄存器SS提供段基值,堆棧指針寄存器SP提供偏移地址。每當(dāng)壓入或彈出數(shù)據(jù)時(shí),SP的內(nèi)容會(huì)自動(dòng)修改,它始終指向堆棧的頂部。計(jì)算物理地址的公式是

物理地址(PA)

=

(SS)

×

10H

+

(SP)

當(dāng)需要對堆棧段中的某個(gè)單元的數(shù)據(jù)進(jìn)行操作時(shí),還可使用BP寄存器通過各種尋址方式得到有效地址EA作為偏移地址,這樣得到的物理地址是

物理地址(PA)

=

(SS)

×

10H

+

EA

Intel公司在推出16位微處理器8086之后,相繼推出了80286、80386、80486以及Pentium系列微處理器,由于具有向上兼容性,使得80286之后的微處理器盡管在結(jié)構(gòu)和功能上與8086相比發(fā)生了很大的變化,但其基本概念、結(jié)構(gòu)乃至指令系統(tǒng)仍然是8086的延續(xù)和擴(kuò)展。本章是在前面已學(xué)習(xí)了8086微處理器的基礎(chǔ)上,從發(fā)展的角度,介紹了80286及以后各系列微處理器的體系結(jié)構(gòu)、寄存器、工作方式,并較為詳細(xì)地?cái)⑹鲈谔摂M存儲(chǔ)管理中,虛擬地址轉(zhuǎn)換為物理地址的整個(gè)過程。2.380X86微處理器的功能結(jié)構(gòu)2.3.180286微處理器

80286是Intel公司繼8086之后,于1982年1月推出的一種高性能微處理器芯片,在IBMPC/AT中得以推廣應(yīng)用。80286芯片上共集成了13.5萬只晶體管,采用68個(gè)引腳的4列直插式封裝,地址線和數(shù)據(jù)線不再分時(shí)復(fù)用,分別設(shè)置16條獨(dú)立的數(shù)據(jù)線和24條獨(dú)立的地址線。80286具有8086的全部功能,8086CPU的匯編語言程序可不加修改地在80286上運(yùn)行。與8086相比,80286微處理器主要有以下4個(gè)顯著的改進(jìn):

(1)由于地址線的增加,使其內(nèi)存容量提高。8086有20條地址線,只能尋址1MB的內(nèi)存空間,而80286增加到24條地址線,可尋址16MB(224B)內(nèi)存。

(2)時(shí)鐘頻率提高,使得處理速度加快。80286的時(shí)鐘頻率最高可達(dá)20MHz,并將8086的2級流水線體系結(jié)構(gòu)增加到4級。

(3)可同時(shí)運(yùn)行多個(gè)任務(wù)。通過多任務(wù)硬件機(jī)構(gòu)使處理器在各種任務(wù)之間快速而方便地切換。

(4)

80286增加了一種工作方式。8086只有實(shí)地址方式(簡稱實(shí)方式),而80286有實(shí)地址方式和保護(hù)虛擬地址方式(簡稱保護(hù)方式)。在實(shí)方式下,80286和8086一樣在1MB內(nèi)存空間執(zhí)行程序,只是速度提高了,相當(dāng)于一個(gè)快速的8086。而在保護(hù)方式下,80286提供24位地址線訪問物理地址空間,并首次應(yīng)用了“虛擬存儲(chǔ)器”和“虛擬內(nèi)存”的概念。所謂“虛擬存儲(chǔ)器”,就是系統(tǒng)中有一個(gè)速度較快容量較小的內(nèi)存,還有一個(gè)速度較慢但容量很大的外存,通過存儲(chǔ)器管理機(jī)制,利用外存來模擬內(nèi)存,這樣從程序員角度看,系統(tǒng)中似乎有一個(gè)容量非常大的、速度也相當(dāng)快的主存儲(chǔ)器,但它并不是真正的物理內(nèi)存,故稱為虛擬存儲(chǔ)器。80286可模擬1GB(230B)的虛擬內(nèi)存。

1.80286的功能結(jié)構(gòu)

80286微處理器內(nèi)部結(jié)構(gòu)如圖2.14所示,其中有4個(gè)獨(dú)立的可并行操作的功能部件,包括總線接口部件(BIU,BusInterfaceUnit)、指令部件(IU,InstructionUnit)、地址部件(AU,AddressUnit)和執(zhí)行部件(EU,ExecuteUnit)。與8086相比多了兩個(gè)主要部件,即將8086中的BIU分成BIU和IU,而將AU從EU中分離出來。實(shí)質(zhì)上是增強(qiáng)了這些部件的并行操作能力,加快了微處理器的運(yùn)行速度。

圖2.1480286微處理器內(nèi)部結(jié)構(gòu)

1)總線接口部件(BIU)

BIU負(fù)責(zé)處理CPU和系統(tǒng)總線之間的所有通信和數(shù)據(jù)傳輸。當(dāng)數(shù)據(jù)存取請求與預(yù)取指令請求同時(shí)發(fā)生時(shí),BIU將優(yōu)先處理數(shù)據(jù)存取操作。BIU包括地址鎖存和驅(qū)動(dòng)器、預(yù)取器、協(xié)處理器擴(kuò)展接口、總線控制器、數(shù)據(jù)收發(fā)器和6B的預(yù)取隊(duì)列。地址鎖存和驅(qū)動(dòng)器用來鎖存和驅(qū)動(dòng)24位的地址線;預(yù)取器負(fù)責(zé)從存儲(chǔ)器中取指令代碼并存放到6B的指令隊(duì)列中,只要預(yù)取隊(duì)列中至少有兩個(gè)字節(jié)為空時(shí),便開始預(yù)取操作;協(xié)處理器擴(kuò)展接口負(fù)責(zé)80286與80287浮點(diǎn)運(yùn)算協(xié)處理器的接口;總線控制器將有關(guān)的外部控制信號送到8288外部總線控制器以組合產(chǎn)生存儲(chǔ)器或I/O的讀寫控制信號;數(shù)據(jù)收發(fā)器可以根據(jù)指令要求負(fù)責(zé)控制數(shù)據(jù)的傳輸方向;6B的預(yù)取隊(duì)列用來存放由預(yù)取器送來的未譯碼的指令。

2)指令部件(IU)

IU包括指令譯碼器和已譯碼指令隊(duì)列,負(fù)責(zé)從預(yù)取隊(duì)列中取代碼并送入譯碼器中。譯碼器將每個(gè)指令字節(jié)譯碼變成69位的內(nèi)部碼形式,然后存入已譯碼指令隊(duì)列中。已譯碼指令隊(duì)列可存放3條被譯碼指令的內(nèi)部碼,共占69×3位,可以立即執(zhí)行。

3)執(zhí)行部件(EU)

EU負(fù)責(zé)指令的執(zhí)行,即從指令部件IU中取出已譯碼的指令并直接執(zhí)行。它包括算術(shù)邏輯部件(ALU)及標(biāo)志寄存器、通用寄存器陣列和控制電路等??刂齐娐方邮找炎g碼的指令中的69位內(nèi)部碼,根據(jù)指令的要求產(chǎn)生執(zhí)行指令所需的控制電位序列后送入其他部件,以便完成指令執(zhí)行并以操作結(jié)果影響標(biāo)志位;ALU及標(biāo)志寄存器用來進(jìn)行算術(shù)與邏輯運(yùn)算,并保存控制和狀態(tài)標(biāo)志;通用寄存器陣列用來暫存操作數(shù)和運(yùn)算結(jié)果。

4)地址部件(AU)

AU負(fù)責(zé)物理地址的生成。它包括物理地址發(fā)生器、段寄存器、段描述符高速緩沖寄存器等。

當(dāng)80286CPU運(yùn)行在實(shí)方式下時(shí),其物理地址的形成與8086一樣。而當(dāng)80286CPU運(yùn)行在保護(hù)方式下時(shí),段地址并不直接存放在4個(gè)段寄存器中,而存放在所謂的段描述符中,通過描述符提供24位的段基值,再與16位的偏移地址相加得到實(shí)際的物理地址。段描述符高速緩沖寄存器用來加速地址的轉(zhuǎn)換,并在性能不受影響的情況下檢查是否違反了保護(hù)條件,還可以實(shí)現(xiàn)任務(wù)的隔離和代碼段與數(shù)據(jù)段重定位。上述4個(gè)獨(dú)立部件的并行工作過程如下:只要6B指令隊(duì)列中至少有兩個(gè)空時(shí),BU便根據(jù)AU提供的要訪問的地址開始預(yù)取操作,以填充指令隊(duì)列;IU從BU中取出預(yù)取的指令并譯碼后存入已譯碼的指令隊(duì)列;EU不斷地從IU中取出已譯碼指令進(jìn)行執(zhí)行,若在執(zhí)行指令的過程中要傳送數(shù)據(jù),EU會(huì)發(fā)送尋址信息給AU;AU計(jì)算出物理地址送給BU,由BU與存儲(chǔ)器或I/O進(jìn)行數(shù)據(jù)傳送。這4個(gè)部件即相互配合又相互獨(dú)立,構(gòu)成一個(gè)4級流水線體系結(jié)構(gòu),大大提高了工作效率。

2.80286的內(nèi)部寄存器

80286內(nèi)部的通用寄存器(包括4個(gè)數(shù)據(jù)寄存器和4個(gè)基址變址寄存器)、4個(gè)段寄存器和指令指針寄存器與8086的完全相同。不同之處在于標(biāo)志寄存器新增了兩個(gè)標(biāo)志(占3位)以及增加了1個(gè)機(jī)器狀態(tài)字(MSW)。下面分別介紹在8086基礎(chǔ)上新增的標(biāo)志位和MSW。

1)標(biāo)志寄存器

80286標(biāo)志寄存器(FLAGS)除了8086中的9個(gè)標(biāo)志(低12位)以外,增加的兩個(gè)標(biāo)志NT和IOPL主要用于保護(hù)方式下,如圖2.15所示。

圖2.1580286標(biāo)志寄存器(FLAGS)格式

(1)

NT:嵌套標(biāo)志,此標(biāo)志作為狀態(tài)標(biāo)志用于指出當(dāng)前執(zhí)行的任務(wù)是否嵌套于另一個(gè)任務(wù)中。NT=1,表示當(dāng)前執(zhí)行的任務(wù)嵌套于另一個(gè)任務(wù)中,從而指示CPU執(zhí)行完該任務(wù)后,要返回到原來的任務(wù)中去;NT=0,表示沒有任務(wù)嵌套。

(2)

IOPL:I/O特權(quán)標(biāo)志,此標(biāo)志作為控制標(biāo)志用于指示指定的I/O操作處于特權(quán)級的哪一級。IOPL占兩位,可表示4個(gè)特權(quán)級,其中0級最高,3級最低。0級一般為操作系統(tǒng)的核心程序使用。只有當(dāng)現(xiàn)行任務(wù)的特權(quán)級高于或等于此時(shí)IOPL級別時(shí),CPU對此設(shè)備的I/O操作才可以執(zhí)行。

2)機(jī)器狀態(tài)字

機(jī)器狀態(tài)字(MSW)含有控制或指示整個(gè)系統(tǒng)(不是單個(gè)任務(wù))的條件標(biāo)志,如圖2.16所示。圖2.1680286機(jī)器狀態(tài)字MSW格式

(1)

PE:保護(hù)允許。PE=1允許保護(hù),除了RESET外,保護(hù)方式不能被撤銷;PE=0禁止保護(hù),只能通過硬件復(fù)位,但80386以后的微處理器可以通過指令來設(shè)置。

(2)

MP:協(xié)處理器監(jiān)控允許。當(dāng)MP=1時(shí),可用WAIT指令來判斷80287的存在性,此時(shí)若產(chǎn)生類型號為7的異常,則表示協(xié)處理器不存在;當(dāng)MP=0時(shí),禁止監(jiān)控。

(3)

EM:模擬協(xié)處理器允許。當(dāng)EM=1時(shí),使用ESC指令,將引起協(xié)處理器不存在異常,可用該中斷處理程序進(jìn)行仿真操作,模擬協(xié)處理器工作;當(dāng)EM=0時(shí),禁止模擬,協(xié)處理器指令只能在實(shí)際協(xié)處理器80287中執(zhí)行。

(4)

TS:任務(wù)切換。在任務(wù)切換時(shí),系統(tǒng)硬件總使TS=1,此時(shí)微處理器在執(zhí)行一條協(xié)處理器指令時(shí)會(huì)產(chǎn)生協(xié)處理器不存在異常中斷。

雖然80286有上述的改進(jìn)和特點(diǎn),但這些改進(jìn)只有在保護(hù)方式下才能運(yùn)行。在DOS環(huán)境下,80286只能工作在實(shí)方式,而多任務(wù)的切換、虛擬存儲(chǔ)器的管理和多種特權(quán)級的保護(hù)只有在保護(hù)方式下才能運(yùn)行。這樣,在大多數(shù)場合,80286僅是一個(gè)快速的8086微處理器。之后,Intel公司在1985年又推出了性價(jià)比更高的32位80386微處理器,很快便取代了80286,在其結(jié)構(gòu)中采用的流水線技術(shù)、虛擬存儲(chǔ)器概念及多任務(wù)切換的理念在80386中也得到了進(jìn)一步的發(fā)揮和完善。2.3.280386微處理器

1985年10月,Intel公司推出了與8086、80286兼容的高性能32位微處理器80386。80386針對多用戶和多任務(wù)的應(yīng)用而設(shè)計(jì),是具有片內(nèi)集成的存儲(chǔ)管理部件和保護(hù)機(jī)構(gòu)的全32位微處理器。該芯片上共集成了27.5萬只晶體管,具有132個(gè)引腳,并以網(wǎng)格陣列方式封裝,采用32位地址線和32位數(shù)據(jù)線,內(nèi)部寄存器也擴(kuò)充至32位。最初的時(shí)鐘頻率為16MHz,不久后Intel公司又推出25MHz、33MHz等。在16MHz主頻下,CPU的運(yùn)算速度可達(dá)3~4MIPs(每秒百萬條指令),其速度可與10年前的大型機(jī)相比。80386是在16位微處理器基礎(chǔ)上發(fā)展而來的,在Intel8086、80286系統(tǒng)上運(yùn)行的目標(biāo)程序可在80386系統(tǒng)上運(yùn)行。與80286相比,80386微處理器主要有以下改進(jìn):

(1)由于地址線的增加,使它的尋址能力增強(qiáng)。80286可尋址16MB(224B)內(nèi)存,80386提高到4GB(232B)。

(2)時(shí)鐘頻率提高,使得處理速度加快。

(3)增強(qiáng)了存儲(chǔ)器管理部件的功能。80386可模擬64TB內(nèi)存(246B)。另外,80386可進(jìn)行段式以及段頁式存儲(chǔ)管理,而80286只能采用段式存儲(chǔ)管理。

(4)80386增加V86(虛擬8086)工作方式,在80286的基礎(chǔ)上進(jìn)一步改進(jìn)了多任務(wù)處理技術(shù),使得多個(gè)DOS程序可同時(shí)運(yùn)行。即80386可模擬多個(gè)8086微處理器來執(zhí)行多任務(wù)的功能。

(5)將80286的4級流水線體系結(jié)構(gòu)增加到6級,并首次引入指令流水線的設(shè)計(jì)思想。

1.80386的功能結(jié)構(gòu)

80386微處理器的內(nèi)部功能結(jié)構(gòu)如圖2.17所示。與80286的4個(gè)獨(dú)立部件相比,80386增加到6個(gè),即總線接口部件(BIU)、指令預(yù)取部件(IPU,InstructionPrefetchUnit)、指令譯碼部件(IDU,InstructionDecodeUnit)、執(zhí)行部件EU、分段部件(SU,SegmentUnit)和分頁部件(PU,PagingUnit)。這6個(gè)部件可以并行地工作,構(gòu)成一個(gè)6級流水線體系結(jié)構(gòu)。

圖2.1780386微處理器內(nèi)部結(jié)構(gòu)

1)總線接口部件

總線接口部件(BIU)負(fù)責(zé)CPU與外部總線的數(shù)據(jù)交換。80386在80286的基礎(chǔ)上將指令預(yù)取部件分離出去,并增加了總線請求判優(yōu)器。當(dāng)指令預(yù)取部件要從存儲(chǔ)器中取指令、執(zhí)行部件要存取操作數(shù)或輸出偏移地址并由分頁部件形成物理地址時(shí),甚至這多個(gè)總線請求同時(shí)發(fā)生時(shí),為使程序的執(zhí)行不被延誤,BIU經(jīng)總線請求判優(yōu)器,優(yōu)先數(shù)據(jù)傳輸請求。只有當(dāng)不執(zhí)行數(shù)據(jù)傳輸操作時(shí),BIU才可滿足預(yù)取代碼的請求。

2)指令預(yù)取部件

指令預(yù)取部件(IPU)使指令代碼預(yù)取功能得以獨(dú)立,它由一個(gè)16B長的指令預(yù)取隊(duì)列和預(yù)取器組成。預(yù)取器用來通過分頁部件PU生成的物理地址向BIU發(fā)出指令預(yù)取請求,如此時(shí)BIU處于空閑狀態(tài),則會(huì)響應(yīng)此請求,并從存儲(chǔ)器中取指令,以填充預(yù)取指令隊(duì)列。預(yù)取器保持預(yù)取隊(duì)列總是滿的。

3)指令譯碼部件

指令譯碼部件(IDU)包括譯碼器和能容納3條已譯碼指令的指令隊(duì)列兩部分。只要已譯碼指令隊(duì)列有剩余空間,而且預(yù)取隊(duì)列中有指令字節(jié),指令譯碼部件便以一個(gè)時(shí)鐘周期譯碼一個(gè)指令字節(jié)的速度進(jìn)行譯碼。指令譯碼部件為指令的執(zhí)行做好準(zhǔn)備。

4)執(zhí)行部件

執(zhí)行部件(EU)負(fù)責(zé)從已譯碼指令隊(duì)列中取出指令編碼,執(zhí)行各種數(shù)據(jù)處理和運(yùn)算。它由控制邏輯部件、數(shù)據(jù)處理部件和保護(hù)測試部件組成??刂七壿嫴考峁┝藘蓷l指令重疊執(zhí)行的控制回路,即可將一條訪問存儲(chǔ)器的指令和前一條指令的執(zhí)行重疊起來,使兩條指令并行執(zhí)行,這就是所謂的“指令流水線技術(shù)”,這項(xiàng)技術(shù)在后續(xù)的CPU中得以更大的發(fā)展,更進(jìn)一步加快了CPU的運(yùn)行速度;保護(hù)測試部件用來監(jiān)視存儲(chǔ)器的訪問操作是否超越了程序的分段規(guī)則;數(shù)據(jù)處理部件包括算術(shù)邏輯部件(ALU)、8個(gè)32位的通用寄存器、1個(gè)64位的桶形移位器和乘法器,主要用于在控制部件控制下執(zhí)行數(shù)據(jù)操作和處理。

5)分段部件

分段部件(SU)管理面向程序員的邏輯地址空間,并且將48位的邏輯地址(16位的段選擇子和32位的偏移地址)轉(zhuǎn)換為32位的線性地址,并對照所規(guī)定該段的界限和屬性進(jìn)行檢驗(yàn)存取。由地址加法器、段描述符高速緩沖寄存器及界限和屬性可編程邏輯陣列(PLA)組成。轉(zhuǎn)換好的線性地址與總線周期操作信息一起發(fā)送給分頁部件。如不需要分頁,則由分段部件計(jì)算出來的線性地址就是物理地址。

6)分頁部件

分頁部件(PU)管理物理地址空間,將分段部件產(chǎn)生的32位線性地址轉(zhuǎn)換為32位物理地址。分頁部件是由地址加法器、頁描述符高速緩沖寄存器及控制和屬性可編程邏輯陣列(PLA)組成。從線性地址到物理地址的轉(zhuǎn)換實(shí)際上是將線性地址表示的存儲(chǔ)空間進(jìn)行再分頁。頁是一個(gè)大小固定的存儲(chǔ)區(qū),每一頁為4KB。物理地址一旦由分頁部分生成,便會(huì)立即送到BIU中進(jìn)行存儲(chǔ)器的訪問操作。

分段部件、分頁部件和保護(hù)測試部件共同構(gòu)成了存儲(chǔ)器管理部件(MMU,MemoryManagementUnit)。MMU管理控制所有虛擬地址到物理地址的轉(zhuǎn)換、分段及分頁檢驗(yàn)等。

2.80386的內(nèi)部寄存器

80386內(nèi)部共定義了30個(gè)面向用戶的寄存器,另外還有幾個(gè)寄存器是實(shí)際存在但用戶不可訪問的。80386的內(nèi)部寄存器可以分為6類。

1)通用寄存器

80386有8個(gè)32位的通用寄存器,都是8086中16位通用寄存器的擴(kuò)展,故命名為EAX、EBX、ECX、EDX、EBP、ESP、ESI和EDI,用于存放數(shù)據(jù)或地址。為了保持與8086的兼容,每個(gè)通用寄存器的低16位都可以獨(dú)立存取,此時(shí)它們的名稱分別為AX、BX、CX、DX、BP、SP、SI和DI。此外,AX、BX、CX和DX與8086一樣,高8位和低8位可以獨(dú)立存取,分別稱為AH、AL、BH、BL、CH、CL、DH和DL。它們都可以完成8位、16位、32位的操作數(shù)或16位、32位操作數(shù)地址的存放。8個(gè)32位通用寄存器既可用來存放操作數(shù)也可用來存放操作數(shù)地址,而且在形成地址的過程中還可進(jìn)行加減運(yùn)算。也就是說,這8個(gè)通用寄存器在作為數(shù)據(jù)寄存器之外,均可用作寄存器間接尋址和作為基址寄存器或變址(除ESP)寄存器。而在8086中,AX、BX、CX和DX這4個(gè)寄存器中只有BX可用來存放操作數(shù)地址,作為基址寄存器。

2)指令指針寄存器和標(biāo)志寄存器

(1)指令指針寄存器(EIP):32位的指令指針寄存器(EIP)是8086中IP的擴(kuò)展,用來存放下一條要執(zhí)行指令的地址偏移量,尋址范圍為0~4GB。為了和8086兼容,EIP的低16位可作為獨(dú)立指令指針,稱為IP,此時(shí)尋址范圍為0~64KB。當(dāng)80386工作在實(shí)方式或虛擬8086方式時(shí),為了與8086兼容,可用IP作為指令指針;當(dāng)80386工作在保護(hù)方式時(shí),則用EIP作為指令指針。

(2)標(biāo)志寄存器(EFLAGS):32位的標(biāo)志寄存器(EFLAGS)是由80286的標(biāo)志位擴(kuò)展而成的,如圖2.18所示。EFLAGS用于保存最近CPU執(zhí)行指令的結(jié)果特性與狀態(tài),以控制CPU的工作及程序的走向。它的低16位包含了命名為FLAGS的16位標(biāo)志寄存器,它就是80286的標(biāo)志寄存器FLAGS,其中低12位包括了在8086中定義的9個(gè)標(biāo)志,高4位包括了在80286中增加的2個(gè)標(biāo)志(占3位)。80386在原有80286的基礎(chǔ)上新增了2個(gè)系統(tǒng)方式標(biāo)志,而且全為控制標(biāo)志。下面主要介紹這兩個(gè)標(biāo)志位的功能。

圖2.18標(biāo)志寄存器(EFLAGS)格式①RF:恢復(fù)標(biāo)志或重新啟動(dòng)標(biāo)志,與調(diào)試寄存器一起用于斷點(diǎn)和單步操作。當(dāng)RF=1時(shí),下一條指令的任何調(diào)試故障將被忽略,不產(chǎn)生異常中斷;當(dāng)RF=0時(shí),調(diào)試故障被接受,并產(chǎn)生異常中斷。RF用于調(diào)試失敗后,強(qiáng)迫程序恢復(fù)執(zhí)行。在成功執(zhí)行每條指令后,RF自動(dòng)復(fù)位。

②VM:虛擬8086方式標(biāo)志。當(dāng)80386工作在保護(hù)方式時(shí),若VM=1,則CPU轉(zhuǎn)換到V86方式,在此方式下,80386的全部操作就像在一個(gè)快速的8086上運(yùn)行一樣。返回保護(hù)方式,此位復(fù)位。

3)段寄存器和段描述符寄存器

(1)段寄存器:80386在原有8086、80286的基礎(chǔ)上增加了兩個(gè)段寄存器,為此80386內(nèi)部有6個(gè)16位的段寄存器CS、DS、ES、SS、GS和FS。在實(shí)方式下,80386和8086類似,段寄存器中存放真實(shí)的段基值,段最大尋址64KB,只是也可使用GS、FS作為附加數(shù)據(jù)段使用。在保護(hù)方式下,為了得到更大的存儲(chǔ)空間,此時(shí)16位的段寄存器稱為段選擇子(Selector),作為進(jìn)入存儲(chǔ)器中的一張表的變址寄存器。根據(jù)段選擇子的內(nèi)容可以從這張表中找到一項(xiàng),即為描述符,這張表稱為描述符表。每個(gè)描述符對應(yīng)一個(gè)段,包含對應(yīng)段的32位段基地址、20位段界限及12位的一些屬性標(biāo)志,并分別經(jīng)過分段部件和分頁部件計(jì)算存儲(chǔ)單元的線性地址和物理地址。

(2)段描述符寄存器:為了提高線性地址的轉(zhuǎn)換計(jì)算速度,80386內(nèi)部為每個(gè)段寄存器設(shè)置了一個(gè)程序員不可訪問的64位段描述符寄存器(段描述符高速緩沖寄存器)。當(dāng)段選擇子由指令確定后,80386就自動(dòng)從存儲(chǔ)器中的描述符表里找到對應(yīng)的描述符,裝入到該寄存器對應(yīng)的段描述符寄存器中,并通過一個(gè)屬性標(biāo)志指示該段正被訪問,從而以后對該段的訪問,就不用通過段選擇子從存儲(chǔ)器中的描述符表里取出相應(yīng)的描述符,而是直接從CPU中的段描述符寄存器中取出描述符,然后計(jì)算線性地址和物理地址,這樣就能縮短訪問存儲(chǔ)器的時(shí)間。

4)控制寄存器

80386內(nèi)部有3個(gè)32位的控制寄存器CR0、CR2、CR3,它們與系統(tǒng)地址寄存器一起用來保存機(jī)器的各種全局性狀態(tài),這些狀態(tài)影響系統(tǒng)所有任務(wù)的運(yùn)行,主要供操作系統(tǒng)使用,因此操作系統(tǒng)設(shè)計(jì)人員需要熟悉這些寄存器。

(1)機(jī)器控制寄存器CR0:32位的控制寄存器CR0是由80286的機(jī)器狀態(tài)字(MSW)擴(kuò)展而成的,如圖2.19所示。它含有控制和指示整個(gè)系統(tǒng)的條件標(biāo)志。它的低16位就是80286的機(jī)器狀態(tài)字(MSW)。

圖2.1980386機(jī)器控制寄存器CR0格式

80386CR0在原有80286MSW的基礎(chǔ)上新增了2個(gè)標(biāo)志。

①PG:分頁允許控制位。PG=1,啟動(dòng)80386片內(nèi)分頁部件工作;PG=0,禁止分頁部件工作,線性地址就是物理地址。

②ET:處理器擴(kuò)展類型控制位。如協(xié)處理器為80387,則設(shè)置ET=1;如協(xié)處理器為80287,則設(shè)置ET=0。在系統(tǒng)復(fù)位時(shí)默認(rèn)協(xié)處理器為80387。

(2)頁面故障線性地址寄存器CR2:用于提供頁故障32位線性地址,以便在產(chǎn)生頁故障時(shí)用來報(bào)告錯(cuò)誤信息。只有當(dāng)CR0中的PG=1時(shí),CR2才有意義。

(3

溫馨提示

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

最新文檔

評論

0/150

提交評論