久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

80x86保護(hù)模式系列教程(三.控制寄存器和系統(tǒng)地址寄存器)

 t涂鴉 2011-10-25
80386控制寄存器系統(tǒng)地址寄存器如下表所示。它們用于控制工作方式,,控制分段管理機(jī)制及 分頁管理機(jī)制的實施,。 
控   制
寄存器
CRxBIT31BIT30—BIT12BIT11—BIT5BIT4BIT3BIT2BIT1BIT0
CR0PG0000000000000000ETTSEMMPPE
CR1保留
CR2頁故障線性地址
CR3頁目錄表物理頁碼000000000000

BIT47—BIT16BIT15—BIT0
全局描述符表寄存器GDTR基地址界限
中斷描述符表寄存器IDTR基地址界限

BIT15—BIT0
局部描述符表寄存器LDTR選擇子
任務(wù)狀態(tài)段寄存器TR選擇子
BIT31—BIT0BIT31—BIT0BIT11—BIT0
基地址界限屬性
基地址界限屬性


<一>控制寄存器

從上表可見,80386有四個32位的控制寄存器,分別命名位CR0,、CR1,、CR2和CR3。但CR1被保留,,供今后開發(fā)的處理器使用,,在80386中不能使用CR1,否則會引起無效指令操作異常,。CR0包括指示處理器工作方式的控制位,,包含啟用和禁止分頁管理機(jī)制的控制位,包含控制浮點協(xié)處理器操作的控制位,。CR2及CR3由分頁管理機(jī)制使用,。CR0中的位5—位30及CR3中的位0至位11是保留位,這些位不能是隨意值,,必須為0,。

控制寄存器CR0的低16位等同于80286的機(jī)器狀態(tài)字MSW,。

1.保護(hù)控制位

控制寄存器CR0中的位0用PE標(biāo)記,,位31用PG標(biāo)記,,這兩個位控制分段和分頁管理機(jī)制的操作,,所以把它們稱為保護(hù)控制位,。PE控制分段管理機(jī)制,。PE=0,處理器運行于實模式,;PE=1,,處理器運行于保護(hù)方式。PG控制分頁管理機(jī)制,。PG=0,禁用分頁管理機(jī)制,此時分段管理機(jī)制產(chǎn)生的線性地址直接作為物理地址使用;PG=1,,啟用分頁管理機(jī)制,,此時線性地址經(jīng)分頁管理機(jī)制轉(zhuǎn)換位物理地址,。關(guān)于分頁管理機(jī)制的具體介紹在后面的文章中進(jìn)行。

下表列出了通過使用PE和PG位選擇的處理器工作方式。由于只有在保護(hù)方式下才可啟用分頁機(jī)制,所以盡管兩個位分別為0和1共可以有四種組合,但只有三種組合方式有效,。PE=0且PG=1是無效組合,,因此,,用PG為1且PE為0的值裝入CR0寄存器將引起通用保護(hù)異常,。

需要注意的是,PG位的改變將使系統(tǒng)啟用或禁用分頁機(jī)制,因而只有當(dāng)所執(zhí)行的程序的代碼和至少有一部分?jǐn)?shù)據(jù)在線性地址空間和物理地址空間具有相同的地址的情況下,,才能改變PG位,。

PG和PE

位與處

理器工

作模式

PGPE處理器工作方式
00實模式
01保護(hù)模式,,禁用分頁機(jī)制
10非法組合
11保護(hù)方式,,啟用分頁機(jī)制

2.協(xié)處理器控制位

控制寄存器CR0中的位1—位4分別標(biāo)記為MP(算術(shù)存在位),、EM(模擬位),、TS(任務(wù)切換位) 和ET(擴(kuò)展類型位),它們控制浮點協(xié)處理器的操作,。

當(dāng)處理器復(fù)位時,,ET位被初始化,,以指示系統(tǒng)中數(shù)字協(xié)處理器的類型,。如果系統(tǒng)中存在 80387協(xié)處理器,那么ET位置1,;如果系統(tǒng)中存在80287協(xié)處理器或者不存在協(xié)處理器,那么ET位清0,。

EM位控制浮點指令的執(zhí)行是用軟件模擬,,還是由硬件執(zhí)行,。EM=0時,硬件控制浮點指令傳送到協(xié)處理器,;EM=1時,,浮點指令由軟件模擬。

TS位用于加快任務(wù)的切換,通過在必要時才進(jìn)行協(xié)處理器切換的方法實現(xiàn)這一目的,。每當(dāng)進(jìn)行任務(wù)切換時,處理器把TS置1,。TS=1時,,浮點指令將產(chǎn)生設(shè)備不可用(DNA)異常。 MP位控制WAIT指令在TS=1時,,是否產(chǎn)生DNA異常。MP=1和TS=1時,WAIT產(chǎn)生異常,;MP=0時,,WAIT指令忽略TS條件,不產(chǎn)生異常,。

3.CR2和CR3

控制寄存器CR2和CR3由分頁管理機(jī)制使用,。

CR2用于發(fā)生頁異常時報告出錯信息。當(dāng)發(fā)生頁異常時,,處理器把引起頁異常的線性地址保存在CR2中,。操作系統(tǒng)中的頁異常處理程序可以檢查CR2的內(nèi)容,從而查出線性地址空間中的哪一頁引起本次異常,。

CR3用于保存頁目錄表的其始物理地址,。由于目錄是頁對齊的,,所以僅高20位有效,低12 位保留未用,。向CR3中裝入一個新值時,低12位必須為0,;但從CR3中取值時,,低12位被忽略,。每當(dāng)用MOV指令重置CR3的值時,會導(dǎo)致分頁機(jī)制高速緩沖區(qū)的內(nèi)容無效,,用此方法,可以在啟用分頁機(jī)制之前,,即把PG位置1之前,預(yù)先刷新分頁機(jī)制的高速緩存。CR3寄存器即使在CR0寄存器的PG位或PE位為0時也可裝入,,如在實模式下也可設(shè)置CR3,,以便進(jìn)行分頁機(jī)制的初始化,。在任務(wù)切換時,,CR3要被改變,但是如果新任務(wù)中CR3的值與原任務(wù)中CR3的值相同,,那么處理器不刷新分頁高速緩存,,以便當(dāng)任務(wù)共享也表時有較快的執(zhí)行速度。

<二>系統(tǒng)地址寄存器

全局描述符表GDT,、局部描述符表LDT和中斷描述符表IDT等都是保護(hù)方式下非常重要的特殊段,,它們包含有為段機(jī)制所用的重要表格。為了方便快速地定位這些段,,處理器采用一些特殊的寄存器保存這些段的基地址和段界限,。我們把這些特殊的寄存器稱為系統(tǒng)地址寄存器。

1.全局描述符表寄存器GDTR

如本文開始處的表格所示,,GDTR長48位,,其中高32位為基地址,低16位為界限,。由于GDT 不能有GDT本身之內(nèi)的描述符進(jìn)行描述定義,所以處理器采用GDTR為GDT這一特殊的系統(tǒng)段提供一個偽描述符,。GDTR給定了GDT,,如下圖所示。

GDTR中的段界限以字節(jié)為單位,。由于段選擇子中只有13位作為描述符索引,,而每個描述符長8個字節(jié),所以用16位的界限足夠,。通常,,對于含有N個描述符的描述符表的段界限設(shè)為8*N-1。

利用結(jié)構(gòu)類型可定義偽描述符如下:

PDESC STRUC LIMIT DW 0 BASE DD 0 PDESC ENDS

2.局部描述符表寄存器LDTR

局部描述符表寄存器LDTR規(guī)定當(dāng)前任務(wù)使用的局部描述符表LDT,。如本文開始處的表格所示,,LDTR類似于段寄存器,由程序員可見的16位的寄存器和程序員不可見的高速緩沖寄存器組成,。實際上,,每個任務(wù)的局部描述符表LDT作為系統(tǒng)的一個特殊段,由一個描述符描述,。而用于描述符LDT的描述符存放在GDT中,。在初始化或任務(wù)切換過程中,把描述符對應(yīng)任務(wù)LDT的描述符的選擇子裝入LDTR,,處理器根據(jù)裝入LDTR可見部分的選擇子,,從GDT中取出對應(yīng)的描述符,并把LDT的基地址,、界限和屬性等信息保存到LDTR的不可見的高速緩沖寄存器中,。隨后對LDT的訪問,就可根據(jù)保存在高速緩沖寄存器中的有關(guān)信息進(jìn)行合法性檢查。

LDTR寄存器包含當(dāng)前任務(wù)的LDT的選擇子,。所以,,裝入到LDTR的選擇子必須確定一個位于GDT中的類型為LDT的系統(tǒng)段描述符,也即選擇子中的TI位必須是0,,而且描述符中的類型字段所表示的類型必須為LDT,。

可以用一個空選擇子裝入LDTR,這表示當(dāng)前任務(wù)沒有LDT,。在這種情況下,,所有裝入到段寄存器的選擇子都必須指示GDT中的描述符,也即當(dāng)前任務(wù)涉及的段均由GDT中的描述符來描述,。如果再把一個TI位為1的選擇子裝入到段寄存器,,將引起異常。

3.中斷描述符表寄存器IDTR

中斷描述符表寄存器IDTR指向中斷描述符表IDT,。如本文開始處的表格所示,,IDTR長48 位,其中32位的基地址規(guī)定IDT的基地址,,16位的界限規(guī)定IDT的段界限,。由于80386只支持256個中斷/異常,所以IDT表最大長度是2K,,以字節(jié)位單位的段界限為7FFH,。IDTR 指示IDT的方式與GDTR指示GDT的方式相同。

4.任務(wù)狀態(tài)段寄存器TR

任務(wù)狀態(tài)段寄存器TR包含指示描述當(dāng)前任務(wù)的任務(wù)狀態(tài)段的描述符選擇子,,從而規(guī)定了當(dāng)前任務(wù)的狀態(tài)段,。任務(wù)狀態(tài)段的格式在后面的文章中介紹。如本文開始處的表格所示,,TR也有程序員可見和不可見兩部分,。當(dāng)把任務(wù)狀態(tài)段的選擇子裝入到TR可見部分時,處理器自動把選擇子所索引的描述符中的段基地址等信息保存到不可見的高速緩沖寄存器中,。在此之后,,對當(dāng)前任務(wù)狀態(tài)段的訪問可快速方便地進(jìn)行。裝入到TR的選擇子不能為空,,必須索引位于GDT中的描述符,,且描述符的類型必須是TSS。

參考資料書        名出  版  社作    者
《保護(hù)方式下的80386及其編程》清華大學(xué)出版社周明德主編
《80X86匯編語言程序設(shè)計教程》清華大學(xué)出版社揚季文主編

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多