80x86系統寄存器和系統指令測試
一、標誌寄存器(EFLAGS)操作系統
標誌寄存器EFLAGS的標誌位含義以下圖:unix
TF 位8是跟蹤標誌(Trace flag),當設置該位時可爲調試操做啓動單步執行方式。復位時則禁止單步執行。在單步執行方式下,處理器會在每一個指令執行後產生一個調試異常,這樣咱們能夠觀察執行程序在每條指令執行後的狀態。調試
IOPL 位13-12時I/O特權級(I/O Privilege Level)字段。該字段指明當前運行程序或任務的I/O特權級別IOPL。當前任務或程序的CPL必須小於這個IOPL才能訪問I/O地址空間。只有當CPL位特權級0時,程序才能夠使用POPF或IRET指令修改這個字段,IOPL也是控制對IF標誌修改的機制之一blog
NT 位14是嵌套任務標誌(Nested Task)。它控制着被中斷任務和調用任務之間的連接關係。在使用CALL指令、中斷或異常執行任務調用時,處理器會設置該標誌,在經過IRET指令從一個任務返回時,處理器會檢查並修改這個NT標誌。使用POPF/POPFD指令也能夠修改這個標誌,可是在應用程序中改變這個標誌的狀態會產生不可意料的異常進程
RF 位16時恢復標誌(Resume Flag)。該標誌用於控制處理器對斷點指令的響應。當設置時,這個標誌會臨時禁止斷點指令產生調試異常;當標誌復位時,則斷點指令將會產生異常。RF的主要功能是容許調試異常後重行執行一條指令。當調試軟件使用IRETD指令返回被中斷程序以前,須要設置堆棧上EFLAGS內容中的RF標誌,以防止指令斷點形成另外一個異常,處理器會在指令返回以後自動清除該標誌,從而再次容許指令斷點異常。內存
VM位17是虛擬-8086方式標誌,當設置該標誌時,新開啓虛擬-8086方式,當復位該標誌時,則回到保護模式數學
內存管理寄存器it
處理器提供了4個內存管理寄存器(GDTR、LDTR、IDTR和TR),用於指定分段內存管理所使用的系統表的基地址,其中包含有分段機制的重要信息。GDTR、IDTR和LDTR用於尋址存放描述符表的段,TR用於尋址一個特殊任務狀態段TSS(Task State Segment),TSS段中包含着當前執行任務的重要信息。見下圖,處理器爲這些寄存器的加載和保存提供了特定的指令。內存管理
一、全局描述符表寄存器(GDTR)
GDTR寄存器用於存放全局符號描述表(GDT)的線性基地址(32位)和表長度值(16位)。基地址指定GDT表中的字節0在線性地址空間中的地址,表長度指明GDT表的字節長度值,指令LGDT和SGDT分別用於加載和保存GDTR寄存器的內容。在機器剛上電或處理器復位後,基地址被默認設置爲0,而表長度被設置成0xFFFF。在保護模式初始化過程當中國必須給GDTR加載一個新值。
二、中斷描述符表寄存器IDTR
與GDTR的做用相似,IDTR寄存器用於存放中斷描述符表的32位線性基地址和16位表長度值。指令LIDT與SIDT分別用於加載和保存中斷描述符表的內容。在機器剛剛上電或處理器復位後,基地址默認設置爲0,長度值被設置爲0xFFFF
三、局部描述符表寄存器LDTR
LDTR用於存放局部描述符表LDT的32位線性基地址、16位段限長和描述符屬性值。指令LLDT和SLDT用於加載和保存LDTR寄存器的段描述符部分,包含LDT表的段必須在GDT表中有一個段描述符項
四、TR任務寄存器
TR寄存器用於存放當前任務TSS段的16位段選擇符,32位基地址、和16位段長度和描述符屬性值。它引用GDT表中的一個TSS類型放入描述符,指令LTR和STR分別用於加載和保存TR寄存器的段選擇符部分。
控制寄存器
控制寄存器(CR0、CR一、CR二、CR3)用於控制和肯定處理器的操做模式以及當前執行任務的特性,見下圖,CR0中含有控制處理器操做模式和狀態的系統控制標誌;CR1保留不用,CR2含有致使也錯誤的線性地址;CR3中含有頁目錄表物理內存基地址,所以該寄存器也被稱爲頁目錄基地址寄存器(PDBR)
一、CR0中協處理器控制位
CR0中的4個bit位:擴展類型位ET、任務切換位TS、仿真位EM和數學存在位MP用於控制80x86浮點(數學)協處理器的操做。
ET是CR0的位4是擴展類型標誌,當該標誌爲1時,表示指明系統有80387協處理器存在,並使用32位協處理器協議。當ET=0指明使用80287協處理器。若是仿真位EM=1,則該位將被忽略。在處理器復位操做時,ET會被初始化指明系統中使用的協處理器類型。若是系統中有80387,則被設置爲1,不然如有一個80287或沒有協處理器,則ET被設置爲0
TS是CR0的第3位,是任務已切換(Task switched)標誌,該標誌用於推遲保存任務切換時的協處理器內容,直到新任務開始實際執行協處理器指令。處理器在每次任務切換時都會設置該標誌,而且執行協處理器指令時測試該標誌。
若是設置了TS標誌而且CR0的EM標誌爲0,那麼在執行任何協處理器指令以前會產生一個設備不存在(DNA)異常。若是設置了TS標誌,但沒有設置CR0的MP和EM標誌,那麼執行協處理器指令WAIT/FWAIT以前不會產生設備不存在異常。若是任務從沒有使用過協處理器,那麼相應協處理器上下文就不用保存了。
EM是CR0第2位,仿真標誌,當該位置設置時,表示處理器沒有內部或外部協處理器,執行協處理器指令時會引發設備不存在異常;當清除時,表示協同有協處理器,設置這個標誌能夠迫使全部浮點指令使用軟件來模擬。
MP是CR0的位1是監控協處理器標誌(Monitor coprocessor或math present)標誌,用於控制wait/fwait指令與TS的交互做用。若是MP=一、TS=1,那麼WAIT指令將產生一個設備不存在異常。若是MP=0,則TS標誌不會影響WAIT的執行
二、CR0中保護控制位
PE CR0的位0是啓用保護標誌,當設置該位時,即開啓了保護模式;當復位時即進入實地址模式。這個標誌僅開啓段級保護,而並無啓用分頁機制。若要啓用分頁機制,那麼PE和PG標誌都要置位
PG CR0的位31時分頁標誌位,當設置該位時即開啓了分頁機制;當復位時則禁止分頁機制,此時全部線性地址等於物理地址。在開啓此標誌以前必須已經或同時開啓PE標誌;即若要分頁機制,則PE與PG標誌都要設置
WP對於Intel 80486或以上的cpu,CR0的16位是寫保護標誌,當設置該標誌時,處理器會禁止超級用戶程序(例如特權等級0的程序)向用戶級只讀頁面執行寫操做;當該位復位時,則反之。該標識有利於unix類操做系統在建立進程時實現寫時複製技術。
NE對於Intel 80486或以上的CPU,CR0的位5是協處理器錯誤(Numberic Error)標誌。當設置該標誌時,就啓用了X87協處理器錯誤的內部報告機制;若復位該位,那麼就使用PC形式的X87協處理器錯誤報告機制。當NE爲復位狀態而且CPU的IGNNE輸入引腳有信號時,那麼數學協同處理器X87錯誤將被忽略
啓用保護模式PE位和開啓分頁PG位分別用於控制分段和分頁機制
CR2和CR3
CR2和CR3用於分頁機制,CR3含有存放頁目錄表頁面的物理地址