控制寄存器和系统地址寄存器
生活随笔
收集整理的這篇文章主要介紹了
控制寄存器和系统地址寄存器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
控制寄存器和系統地址寄存器
目錄(?)[+]
[-]
| 控??制 寄存器 | 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 | 基地址 | 界限 |
| ? |
|
<一>控制寄存器
從上表可見,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 STRUCLIMIT DW 0BASE DD 0PDESC ENDS2.局部描述符表寄存器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總結
以上是生活随笔為你收集整理的控制寄存器和系统地址寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 内存管理寄存器
- 下一篇: java信息管理系统总结_java实现科