微機(jī)第3章學(xué)習(xí)資料_第1頁(yè)
微機(jī)第3章學(xué)習(xí)資料_第2頁(yè)
微機(jī)第3章學(xué)習(xí)資料_第3頁(yè)
微機(jī)第3章學(xué)習(xí)資料_第4頁(yè)
微機(jī)第3章學(xué)習(xí)資料_第5頁(yè)
已閱讀5頁(yè),還剩226頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

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

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

80x86系列微處理器概況。

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

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

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

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

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

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

微處理器CPU

主存儲(chǔ)器(主存)

外存儲(chǔ)器(外存)

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

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

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

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

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

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

8086/8088內(nèi)部結(jié)構(gòu)1.總線接口單元BIU2.執(zhí)行單元EU

一.總線接口單元BIU

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

8086/8088CPU在對(duì)存儲(chǔ)單元進(jìn)行訪問(wèn)以讀取指令或讀/寫(xiě)操作數(shù)時(shí),必須在地址總線上提供20位的地址信息,以便選中對(duì)應(yīng)的存儲(chǔ)單元。

CPU提供的用來(lái)對(duì)存儲(chǔ)單元進(jìn)行訪問(wèn)的20位地址是由BIU中的地址加法器產(chǎn)生的。存儲(chǔ)器中每個(gè)存儲(chǔ)單元的地址可有以下兩種表示方式:

邏輯地址:表示為“16位段地址:16位段內(nèi)偏移地址”。

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

物理地址=段地址

10H+段內(nèi)偏移地址

圖3.3物理地址的形成

指令隊(duì)列緩沖器

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

二.執(zhí)行單元EU

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

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

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

2.指令隊(duì)列緩沖器大小不同。

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

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

1.?dāng)?shù)據(jù)寄存器AX、BX、CX、DX

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

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

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

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

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

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

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

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

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

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

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

SS(StackSegment)稱為堆棧段寄存器,用來(lái)存放程序當(dāng)前所使用的堆棧段的段地址。堆棧是存儲(chǔ)器中開(kāi)辟的按先進(jìn)后出原則組織的一個(gè)特殊存儲(chǔ)區(qū),主要用于調(diào)用子程序或執(zhí)行中斷服務(wù)程序時(shí)保護(hù)斷點(diǎn)和現(xiàn)場(chǎng)。

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

8086/8088段寄存器與提供段內(nèi)移地址的寄存器之間的默認(rèn)組合

段寄存器

提供段內(nèi)偏移地址的寄存器

CS

IP

DS

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

SS

SP或BP

ES

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

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

IP在程序運(yùn)行中能自動(dòng)加1修正,從而使其始終存放的是下一條要讀取的指令在代碼段的偏移地址。程序員不能直接用賦值指令對(duì)IP和CS進(jìn)行修改。有些指令能使IP和CS的值改變(如跳轉(zhuǎn)指令)或使其值壓入堆棧或從堆棧中彈出恢復(fù)原值(如子程序調(diào)用指令和返回指令)。

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

1.狀態(tài)標(biāo)志位狀態(tài)標(biāo)志位用來(lái)反映算術(shù)和邏輯運(yùn)算結(jié)果的一些特征。下面分別介紹這6個(gè)狀態(tài)標(biāo)志位的功能。

CF(CarryFlag)——進(jìn)位標(biāo)志。當(dāng)進(jìn)行加減運(yùn)算時(shí),若最高位發(fā)生進(jìn)位或借位則CF為1,否則為0。通常用于判斷無(wú)符號(hào)數(shù)運(yùn)算結(jié)果是否超出了計(jì)算機(jī)所能表示的無(wú)符號(hào)數(shù)的范圍。

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

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

ZF(ZeroFlag)——零標(biāo)志位。若當(dāng)前的運(yùn)算結(jié)果為0,則ZF為1,否則為0。

SF(SignFlag)——符號(hào)標(biāo)志位。當(dāng)運(yùn)算結(jié)果的最高位為1時(shí),SF=1,否則為0。

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

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

2.控制標(biāo)志位控制標(biāo)志位有3個(gè),用來(lái)控制CPU的操作,由程序設(shè)置或清除。它們是:

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

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

DF(DirectionFlag)——方向標(biāo)志位。若用STD將DF置1,串操作按減地址方式進(jìn)行,也就是說(shuō),從高地址開(kāi)始,每操作一次地址自動(dòng)遞減;若用CLD將DF清0,則串操作按增地址方式進(jìn)行,即每操作一次地址自動(dòng)遞增。

3.2.48086/8088引腳及其功能

圖3.78086/8088CPU引腳

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

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

1.電源線和地線

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

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

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

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

3.控制引腳

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

(2)INTR(InterruptRequest)

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

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

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

內(nèi)部寄存器狀態(tài)標(biāo)志寄存器IPCSDSSSES指令隊(duì)列緩沖器其余寄存器0000H0000HFFFFH0000H0000H0000H空0000H

(5)?READY:數(shù)據(jù)“準(zhǔn)備好”信號(hào)線,輸入。它實(shí)際上是所尋址的存儲(chǔ)器或I/O端口發(fā)來(lái)的數(shù)據(jù)準(zhǔn)備就緒信號(hào),高電平有效。CPU在每個(gè)總線周期的T3狀態(tài)對(duì)READY引腳采樣,若為高電平,說(shuō)明數(shù)據(jù)已準(zhǔn)備好;若為低電平,說(shuō)明數(shù)據(jù)還沒(méi)有準(zhǔn)備好,CPU在T3狀態(tài)之后自動(dòng)插入一個(gè)或幾個(gè)等待狀態(tài)TW,直到READY變?yōu)楦唠娖剑拍苓M(jìn)入T4狀態(tài),完成數(shù)據(jù)傳送過(guò)程,從而結(jié)束當(dāng)前總線周期。

(6)

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

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

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

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

2.8086最小工作方式及引腳24

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

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

31引腳的功能如下:

(1)INTA(InterruptAcknowledge):中斷響應(yīng)信號(hào),輸出。該信號(hào)用于對(duì)外設(shè)的中斷請(qǐng)求(經(jīng)INTR引腳送入CPU)作出響應(yīng)。

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

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

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

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

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

(7)?HOLD(Holdrequest):引腳31,總線保持請(qǐng)求信號(hào),輸入。當(dāng)8086/8088CPU之外的總線主設(shè)備要求占用總線時(shí),通過(guò)該引腳向CPU發(fā)一個(gè)高電平的總線保持請(qǐng)求信號(hào)。

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

3.8086最大工作方式及引腳24

31的定義當(dāng)MN/MX接低電平時(shí),系統(tǒng)工作于最大方式,即多處理器方式。最大方式是多處理器工作方式,需要協(xié)調(diào)主處理器和協(xié)處理器的工作。控制信號(hào)不能直接從8086/8088CPU引腳得到,需要外加8288總線控制器,通過(guò)它對(duì)CPU發(fā)出的控制信號(hào)(S0,S1,S2)進(jìn)行變換和組合,以得到系統(tǒng)的控制信號(hào)。圖3.98086最大方式系統(tǒng)結(jié)構(gòu)在最大方式下,第24

31引腳的功能如下:

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

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

8288產(chǎn)生的控制信號(hào)對(duì)應(yīng)操作000

發(fā)中斷響應(yīng)信號(hào)

001

讀I/O端口

010

寫(xiě)I/O端口01

1

無(wú)

暫停

10

0

取指令

101

讀內(nèi)存110

寫(xiě)內(nèi)存11

1無(wú)

無(wú)源狀態(tài)MMM

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

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

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

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

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

(1)AD15

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

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

A8,它們?cè)?088中只做地址線用。

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

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

1.8086/8088存儲(chǔ)空間

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

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

2.存儲(chǔ)器的段結(jié)構(gòu)

8086/8088CPU中有關(guān)可用來(lái)存放地址的寄存器都是16位的,故只能直接尋址64KB。為了對(duì)1M個(gè)存儲(chǔ)單元進(jìn)行管理,8086/8088采用了段結(jié)構(gòu)的存儲(chǔ)器管理方法。

8086/8088將整個(gè)存儲(chǔ)器分為許多邏輯段,每個(gè)邏輯段的容量小于或等于64KB,允許它們?cè)谡麄€(gè)存儲(chǔ)空間中浮動(dòng),各個(gè)邏輯段之間可以緊密相連,也可以互相重疊。

圖3.11存儲(chǔ)器分段示意圖

3.邏輯地址與物理地址

我們把通過(guò)段地址和偏移地址來(lái)表示的存儲(chǔ)單元的地址稱為邏輯地址,記為:段地址:偏移地址。

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

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

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

(CS)

10H+(IP)=2000H

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

(DS)

10H+8000H=2A0FH

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

表3.8存儲(chǔ)器操作時(shí)段地址和段內(nèi)偏移地址的來(lái)源

存儲(chǔ)器操作類型

段地址

偏移地址

正常來(lái)源

其他來(lái)源取指令

CS

無(wú)

IP

存取操作數(shù)

DSCS、ES、SS

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

SS

CS、ES、SS

有效地址EA堆棧操作

SS

無(wú)

BP、SP

源字符串

DS

CS、ES、SS

SI

目的字符串

ES無(wú)

DI

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

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

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

5.8086/8088存儲(chǔ)器結(jié)構(gòu)

圖3.138086存儲(chǔ)器高低位庫(kù)的連接表3.98086存儲(chǔ)器高低位庫(kù)選擇

A0

對(duì)應(yīng)操作

0

0

同時(shí)訪問(wèn)兩個(gè)存儲(chǔ)體,讀/寫(xiě)一個(gè)字的信息

0

1

只訪問(wèn)奇地址存儲(chǔ)體,讀/寫(xiě)高字節(jié)的信息

1

0

只訪問(wèn)偶地址存儲(chǔ)體,讀/寫(xiě)低字節(jié)的信息

1

1

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

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

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

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

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

A0來(lái)尋址0000

FFFFH共64K個(gè)端口,但I(xiàn)BMPC系統(tǒng)中只使用了A9

A010位地址來(lái)作為I/O端口的尋址信號(hào),因此,其I/O端口的地址僅為000

3FFH共1K個(gè)。

3.2.3

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

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

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

讀周期的時(shí)序

8086

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

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

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

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

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

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

(5)?T4狀態(tài):CPU使RD信號(hào)變?yōu)楦唠娖剑谑牵鎯?chǔ)器模塊上的總線驅(qū)動(dòng)器又處于高阻狀態(tài),從而讓出總線。

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

(1)對(duì)存儲(chǔ)器或I/O端口操作的選通信號(hào)不同。總線讀操作中,選通信號(hào)是RD,而總線寫(xiě)操作中是WR。

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

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

寫(xiě)周期的時(shí)序

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

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

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

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

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

2.控制寄存器

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

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

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

提供段內(nèi)偏移地址的寄存器CS

EIP

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

SS

ESP或EBP

ES

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

FS

無(wú)默認(rèn)

GS無(wú)默認(rèn)3.4.280x86存儲(chǔ)器管理存儲(chǔ)器管理是由微處理器的存儲(chǔ)器管理部件MMU提供的對(duì)系統(tǒng)存儲(chǔ)器資源進(jìn)行管理的機(jī)制,其目的是方便程序?qū)Υ鎯?chǔ)器的應(yīng)用。從應(yīng)用角度出發(fā),學(xué)習(xí)80x86系列微處理器的存儲(chǔ)器管理機(jī)制。從8086/8088到Pentium,80x86系列微處理器的存儲(chǔ)器管理機(jī)制有了較大變化。8086/8088只有一種存儲(chǔ)器管理方式,即實(shí)地址方式(簡(jiǎn)稱實(shí)方式);80286CPU具有兩種工作方式,即實(shí)方式和保護(hù)虛地址方式(簡(jiǎn)稱保護(hù)方式);80386及其以后的CPU有三種工作方式,即實(shí)方式、保護(hù)方式和虛擬8086方式。

1.實(shí)地址方式(簡(jiǎn)稱實(shí)方式)

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

8086/8088CPU通過(guò)對(duì)存儲(chǔ)器分段來(lái)實(shí)現(xiàn)對(duì)1M個(gè)存儲(chǔ)器單元的直接訪問(wèn)。

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

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

2.保護(hù)虛擬地址方式(簡(jiǎn)稱保護(hù)方式)

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

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

2)虛擬存儲(chǔ)器的基本結(jié)構(gòu)按照主存(或內(nèi)存)與外存(輔助存儲(chǔ)器)之間信息交換時(shí)信息傳送單位的不同,虛擬存儲(chǔ)器可分為段式虛擬存儲(chǔ)器、頁(yè)式虛擬存儲(chǔ)器和段頁(yè)式虛擬存儲(chǔ)器三種。

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

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

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

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

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

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

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

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

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

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

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

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

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

216=230)。對(duì)80386及其后續(xù)機(jī)型來(lái)說(shuō),段內(nèi)偏移地址為32位,每個(gè)段最大為4GB,故可提供的虛擬存儲(chǔ)空間為64TB(246)。

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

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

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

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

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

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

溫馨提示

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

評(píng)論

0/150

提交評(píng)論