[-]
- 一控制寄存器
- 保護控制位
- 副處理器控制位
- CR2和CR3
- 二系統地址寄存器
- 通用描述元表寄存器GDTR
- 局部描述符表寄存器LDTR
- 中斷描述符表寄存器IDTR
- 任務狀態段寄存器TR
80386控制寄存器和系統地址寄存器如下表所示。它們用於控制工作方式,控制分段管理機制及 分頁管理機制的實施。
控 制 寄存器 |
CRx |
BIT31 |
BIT30—BIT12 |
BIT11—BIT5 |
BIT4 |
BIT3 |
BIT2 |
BIT1 |
BIT0 |
| CR0 |
PG |
0000000000000000 |
ET |
TS |
EM |
MP |
PE |
| CR1 |
保留 |
| CR2 |
頁故障線性地址 |
| CR3 |
頁目錄表物理頁碼 |
000000000000 |
| |
BIT47—BIT16 |
BIT15—BIT0 |
| 通用描述元表寄存器GDTR |
基地址 |
界限 |
| 中斷描述符表寄存器IDTR |
基地址 |
界限 |
|
BIT15—BIT0 |
| 局部描述符表寄存器LDTR |
選擇子 |
| 任務狀態段寄存器TR |
選擇子 |
|
|
| BIT31—BIT0 |
BIT31—BIT0 |
BIT11—BIT0 |
| 基地址 |
界限 |
屬性 |
| 基地址 |
界限 |
屬性 |
|
<一>控制寄存器 從上表可見,80386有四個32位的控制寄存器,分別命名位CR0、CR1、CR2和CR3。但CR1被保留, 供今後開發的處理器使用,在80386中不能使用CR1,否則會引起無效指令操作異常。CR0包括指 示處理器工作方式的控制位,包含啟用和禁止分頁管理機制的控制位,包含控制浮點副處理器 操作的控制位。CR2及CR3由分頁管理機制使用。CR0中的位5—位30及CR3中的位0至位11是保留 位,這些位不能是隨意值,必須為0。 控制寄存器CR0的低16位等同於80286的機器狀態字MSW。1.保護控制位 控制寄存器CR0中的位0用PE標記,位31用PG標記,這兩個位控制分段和分頁管理機制的操作, 所以把它們稱為保護控制位。PE控制分段管理機制。PE=0,處理器運行於實模式;PE=1,處理 器運行於保護方式。PG控制分頁管理機制。PG=0,禁用分頁管理機制,此時分段管理機制產生 的線性地址直接作為物理地址使用;PG=1,啟用分頁管理機制,此時線性地址經分頁管理機制 轉換位物理地址。關於分頁管理機制的具體介紹在後面的文章中進行。 下表列出了通過使用PE和PG位選擇的處理器工作方式。由於只有在保護方式下才可啟用分頁機 制,所以儘管兩個位分別為0和1共可以有四種組合,但只有三種組合方式有效。PE=0且PG=1是 無效組合,因此,用PG為1且PE為0的值裝入CR0寄存器將引起通用保護異常。需要注意的是,PG位的改變將使系統啟用或禁用分頁機制,因而只有當所執行的程式的 代碼和至少有一部分資料線上性地址空間和物理地址空間具有相同的地址的情況下,才 能改變PG位。
PG和PE 位與處 理器工 作模式 |
PG |
PE |
處理器工作方式 |
| 0 |
0 |
實模式 |
| 0 |
1 |
保護模式,禁用分頁機制 |
| 1 |
0 |
非法組合 |
| 1 |
1 |
保護方式,啟用分頁機制 |
2.副處理器控制位 控制寄存器CR0中的位1—位4分別標記為MP(算術存在位)、EM(類比位)、TS(任務切換位) 和ET(擴充類型位),它們控制浮點副處理器的操作。 當處理器複位時,ET位被初始化,以指示系統中數字副處理器的類型。如果系統中存在 80387副處理器,那麼ET位置1;如果系統中存在80287副處理器或者不存在副處理器,那 麼ET位清0。 EM位控制浮點指令的執行是用軟體類比,還是由硬體執行。EM=0時,硬體控制浮點指令 傳送到副處理器;EM=1時,浮點指令由軟體類比。 TS位用於加快任務的切換,通過在必要時才進行副處理器切換的方法實現這一目的。每 當進行任務切換時,處理器把TS置1。TS=1時,浮點指令將產生裝置不可用(DNA)異常。 MP位控制WAIT指令在TS=1時,是否產生DNA異常。MP=1和TS=1時,WAIT產生異常;MP=0時 ,WAIT指令忽略TS條件,不產生異常。3.CR2和CR3 控制寄存器CR2和CR3由分頁管理機制使用。 CR2用於發生頁異常時報告出錯資訊。當發生頁異常時,處理器把引起頁異常的線性地址 儲存在CR2中。作業系統中的頁例外處理常式可以檢查CR2的內容,從而查出線性地址空 間中的哪一頁引起本次異常。 CR3用於儲存頁目錄表的其始物理地址。由於目錄是頁對齊的,所以僅高20位有效,低12 位保留未用。向CR3中裝入一個新值時,低12位必須為0;但從CR3中取值時,低12位被忽 略。每當用MOV指令重設CR3的值時,會導致分頁機制高速緩衝區的內容無效,用此方法, 可以在啟用分頁機制之前,即把PG位置1之前,預先重新整理分頁機制的快取。CR3寄存 器即使在CR0寄存器的PG位或PE位為0時也可裝入,如在實模式下也可設定CR3,以便進行 分頁機制的初始化。在任務切換時,CR3要被改變,但是如果新任務中CR3的值與原任務
中CR3的值相同,那麼處理器不重新整理分頁快取,以便當任務共用也表時有較快的執行 速度。<二>系統地址寄存器 通用描述元表GDT、局部描述符表LDT和中斷描述符表IDT等都是保護方式下非常重要的特 殊段,它們包含有為段機制所用的重要表格。為了方便快速地定位這些段,處理器採用 一些特殊的寄存器儲存這些段的基地址和段界限。我們把這些特殊的寄存器稱為系統地 址寄存器。1.通用描述元表寄存器GDTR 如本文開始處的表格所示,GDTR長48位,其中高32位為基地址,低16位為界限。由於GDT 不能有GDT本身之內的描述符進行描述定義,所以處理器採用GDTR為GDT這一特殊的系統 段提供一個偽描述符。GDTR給定了GDT,如所示。
GDTR中的段界限以位元組為單位。由於段選擇子中只有13位作為描述符索引,而每個描述 符長8個位元組,所以用16位的界限足夠。通常,對於含有N個描述符的描述符表的段界限 設為8*N-1。 利用結構類型可定義偽描述符如下:
PDESC STRUC LIMIT DW 0 BASE DD 0 PDESC ENDS
2.局部描述符表寄存器LDTR 局部描述符表寄存器LDTR規定當前任務使用的局部描述符表LDT。如本文開始處的表格 所示,LDTR類似於段寄存器,由程式員可見的16位的寄存器和程式員不可見的高速緩衝 寄存器組成。實際上,每個任務的局部描述符表LDT作為系統的一個特殊段,由一個描 述符描述。而用於描述符LDT的描述符存放在GDT中。在初始化或任務切換過程中,把描 述符對應任務LDT的描述符的選擇子裝入LDTR,處理器根據裝入LDTR可見部分的選擇子 ,從GDT中取出對應的描述符,並把LDT的基地址、界限和屬性等資訊儲存到LDTR的不可
見的高速緩衝寄存器中。隨後對LDT的訪問,就可根據儲存在高速緩衝寄存器中的有關 資訊進行合法性檢查。 LDTR寄存器包含當前任務的LDT的選擇子。所以,裝入到LDTR的選擇子必須確定一個位 於GDT中的類型為LDT的系統段描述符,也即選擇子中的TI位必須是0,而且描述符中的 類型欄位所表示的類型必須為LDT。 可以用一個空選擇子裝入LDTR,這表示當前任務沒有LDT。在這種情況下,所有裝入到 段寄存器的選擇子都必須指示GDT中的描述符,也即當前任務涉及的段均由GDT中的描 述符來描述。如果再把一個TI位為1的選擇子裝入到段寄存器,將引起異常。3.中斷描述符表寄存器IDTR 中斷描述符表寄存器IDTR指向中斷描述符表IDT。如本文開始處的表格所示,IDTR長48 位,其中32位的基地址規定IDT的基地址,16位的界限規定IDT的段界限。由於80386隻 支援256個中斷/異常,所以IDT表最大長度是2K,以位元組位單位的段界限為7FFH。IDTR 指示IDT的方式與GDTR指示GDT的方式相同。4.任務狀態段寄存器TR 任務狀態段寄存器TR包含指示描述當前任務的任務狀態段的描述符選擇子,從而規定 了當前任務的狀態段。任務狀態段的格式在後面的文章中介紹。如本文開始處的表格 所示,TR也有程式員可見和不可見兩部分。當把任務狀態段的選擇子裝入到TR可見部 分時,處理器自動把選擇子所索引的描述符中的段基地址等資訊儲存到不可見的高速
緩衝寄存器中。在此之後,對當前任務狀態段的訪問可快速方便地進行。裝入到TR的 選擇子不可為空,必須索引位於GDT中的描述符,且描述符的類型必須是TSS
80386控制寄存器和系統地址寄存器如下表所示。它們用於控制工作方式,控制分段管理機制及 分頁管理機制的實施。
控 制 寄存器 |
CRx |
BIT31 |
BIT30—BIT12 |
BIT11—BIT5 |
BIT4 |
BIT3 |
BIT2 |
BIT1 |
BIT0 |
| CR0 |
PG |
0000000000000000 |
ET |
TS |
EM |
MP |
PE |
| CR1 |
保留 |
| CR2 |
頁故障線性地址 |
| CR3 |
頁目錄表物理頁碼 |
000000000000 |
| |
BIT47—BIT16 |
BIT15—BIT0 |
| 通用描述元表寄存器GDTR |
基地址 |
界限 |
| 中斷描述符表寄存器IDTR |
基地址 |
界限 |
|
BIT15—BIT0 |
| 局部描述符表寄存器LDTR |
選擇子 |
| 任務狀態段寄存器TR |
選擇子 |
|
|
| BIT31—BIT0 |
BIT31—BIT0 |
BIT11—BIT0 |
| 基地址 |
界限 |
屬性 |
| 基地址 |
界限 |
屬性 |
|
<一>控制寄存器 從上表可見,80386有四個32位的控制寄存器,分別命名位CR0、CR1、CR2和CR3。但CR1被保留, 供今後開發的處理器使用,在80386中不能使用CR1,否則會引起無效指令操作異常。CR0包括指 示處理器工作方式的控制位,包含啟用和禁止分頁管理機制的控制位,包含控制浮點副處理器 操作的控制位。CR2及CR3由分頁管理機制使用。CR0中的位5—位30及CR3中的位0至位11是保留 位,這些位不能是隨意值,必須為0。 控制寄存器CR0的低16位等同於80286的機器狀態字MSW。1.保護控制位 控制寄存器CR0中的位0用PE標記,位31用PG標記,這兩個位控制分段和分頁管理機制的操作, 所以把它們稱為保護控制位。PE控制分段管理機制。PE=0,處理器運行於實模式;PE=1,處理 器運行於保護方式。PG控制分頁管理機制。PG=0,禁用分頁管理機制,此時分段管理機制產生 的線性地址直接作為物理地址使用;PG=1,啟用分頁管理機制,此時線性地址經分頁管理機制 轉換位物理地址。關於分頁管理機制的具體介紹在後面的文章中進行。 下表列出了通過使用PE和PG位選擇的處理器工作方式。由於只有在保護方式下才可啟用分頁機 制,所以儘管兩個位分別為0和1共可以有四種組合,但只有三種組合方式有效。PE=0且PG=1是 無效組合,因此,用PG為1且PE為0的值裝入CR0寄存器將引起通用保護異常。需要注意的是,PG位的改變將使系統啟用或禁用分頁機制,因而只有當所執行的程式的 代碼和至少有一部分資料線上性地址空間和物理地址空間具有相同的地址的情況下,才 能改變PG位。
PG和PE 位與處 理器工 作模式 |
PG |
PE |
處理器工作方式 |
| 0 |
0 |
實模式 |
| 0 |
1 |
保護模式,禁用分頁機制 |
| 1 |
0 |
非法組合 |
| 1 |
1 |
保護方式,啟用分頁機制 |
2.副處理器控制位 控制寄存器CR0中的位1—位4分別標記為MP(算術存在位)、EM(類比位)、TS(任務切換位) 和ET(擴充類型位),它們控制浮點副處理器的操作。 當處理器複位時,ET位被初始化,以指示系統中數字副處理器的類型。如果系統中存在 80387副處理器,那麼ET位置1;如果系統中存在80287副處理器或者不存在副處理器,那 麼ET位清0。 EM位控制浮點指令的執行是用軟體類比,還是由硬體執行。EM=0時,硬體控制浮點指令 傳送到副處理器;EM=1時,浮點指令由軟體類比。 TS位用於加快任務的切換,通過在必要時才進行副處理器切換的方法實現這一目的。每 當進行任務切換時,處理器把TS置1。TS=1時,浮點指令將產生裝置不可用(DNA)異常。 MP位控制WAIT指令在TS=1時,是否產生DNA異常。MP=1和TS=1時,WAIT產生異常;MP=0時 ,WAIT指令忽略TS條件,不產生異常。3.CR2和CR3 控制寄存器CR2和CR3由分頁管理機制使用。 CR2用於發生頁異常時報告出錯資訊。當發生頁異常時,處理器把引起頁異常的線性地址 儲存在CR2中。作業系統中的頁例外處理常式可以檢查CR2的內容,從而查出線性地址空 間中的哪一頁引起本次異常。 CR3用於儲存頁目錄表的其始物理地址。由於目錄是頁對齊的,所以僅高20位有效,低12 位保留未用。向CR3中裝入一個新值時,低12位必須為0;但從CR3中取值時,低12位被忽 略。每當用MOV指令重設CR3的值時,會導致分頁機制高速緩衝區的內容無效,用此方法, 可以在啟用分頁機制之前,即把PG位置1之前,預先重新整理分頁機制的快取。CR3寄存 器即使在CR0寄存器的PG位或PE位為0時也可裝入,如在實模式下也可設定CR3,以便進行 分頁機制的初始化。在任務切換時,CR3要被改變,但是如果新任務中CR3的值與原任務
中CR3的值相同,那麼處理器不重新整理分頁快取,以便當任務共用也表時有較快的執行 速度。<二>系統地址寄存器 通用描述元表GDT、局部描述符表LDT和中斷描述符表IDT等都是保護方式下非常重要的特 殊段,它們包含有為段機制所用的重要表格。為了方便快速地定位這些段,處理器採用 一些特殊的寄存器儲存這些段的基地址和段界限。我們把這些特殊的寄存器稱為系統地 址寄存器。1.通用描述元表寄存器GDTR 如本文開始處的表格所示,GDTR長48位,其中高32位為基地址,低16位為界限。由於GDT 不能有GDT本身之內的描述符進行描述定義,所以處理器採用GDTR為GDT這一特殊的系統 段提供一個偽描述符。GDTR給定了GDT,如所示。
GDTR中的段界限以位元組為單位。由於段選擇子中只有13位作為描述符索引,而每個描述 符長8個位元組,所以用16位的界限足夠。通常,對於含有N個描述符的描述符表的段界限 設為8*N-1。 利用結構類型可定義偽描述符如下:
PDESC STRUC LIMIT DW 0 BASE DD 0 PDESC ENDS
2.局部描述符表寄存器LDTR 局部描述符表寄存器LDTR規定當前任務使用的局部描述符表LDT。如本文開始處的表格 所示,LDTR類似於段寄存器,由程式員可見的16位的寄存器和程式員不可見的高速緩衝 寄存器組成。實際上,每個任務的局部描述符表LDT作為系統的一個特殊段,由一個描 述符描述。而用於描述符LDT的描述符存放在GDT中。在初始化或任務切換過程中,把描 述符對應任務LDT的描述符的選擇子裝入LDTR,處理器根據裝入LDTR可見部分的選擇子 ,從GDT中取出對應的描述符,並把LDT的基地址、界限和屬性等資訊儲存到LDTR的不可
見的高速緩衝寄存器中。隨後對LDT的訪問,就可根據儲存在高速緩衝寄存器中的有關 資訊進行合法性檢查。 LDTR寄存器包含當前任務的LDT的選擇子。所以,裝入到LDTR的選擇子必須確定一個位 於GDT中的類型為LDT的系統段描述符,也即選擇子中的TI位必須是0,而且描述符中的 類型欄位所表示的類型必須為LDT。 可以用一個空選擇子裝入LDTR,這表示當前任務沒有LDT。在這種情況下,所有裝入到 段寄存器的選擇子都必須指示GDT中的描述符,也即當前任務涉及的段均由GDT中的描 述符來描述。如果再把一個TI位為1的選擇子裝入到段寄存器,將引起異常。3.中斷描述符表寄存器IDTR 中斷描述符表寄存器IDTR指向中斷描述符表IDT。如本文開始處的表格所示,IDTR長48 位,其中32位的基地址規定IDT的基地址,16位的界限規定IDT的段界限。由於80386隻 支援256個中斷/異常,所以IDT表最大長度是2K,以位元組位單位的段界限為7FFH。IDTR 指示IDT的方式與GDTR指示GDT的方式相同。4.任務狀態段寄存器TR 任務狀態段寄存器TR包含指示描述當前任務的任務狀態段的描述符選擇子,從而規定 了當前任務的狀態段。任務狀態段的格式在後面的文章中介紹。如本文開始處的表格 所示,TR也有程式員可見和不可見兩部分。當把任務狀態段的選擇子裝入到TR可見部 分時,處理器自動把選擇子所索引的描述符中的段基地址等資訊儲存到不可見的高速
緩衝寄存器中。在此之後,對當前任務狀態段的訪問可快速方便地進行。裝入到TR的 選擇子不可為空,必須索引位於GDT中的描述符,且描述符的類型必須是TSS