Intel Architecture 32位處理器,主要以80386爲參考。包括以下幾類寄存器:
1.通用寄存器
2.段寄存器
3.狀態和控制寄存器
4.指令指針寄存器EIP
5.內存管理寄存器
6.控制寄存器
通用寄存器
通用寄存器有8個,分別是EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP。intel通用寄存器很少,比起ARM動不動30多個,要少很多,intel有個慣用做法,就是某些指令會假設對一些寄存器的使用。比如字符串指令,會隱式使用ECX、EDI、ESI裏面的內容作爲操作數。另外,通用寄存器可以拆分爲字(16位)、字節(8位)使用,比如EAX可以使用字寄存器AX,字節寄存器AH、AL。這些通用寄存器的特殊隱式用途,列舉如下:
(1)EAX-作爲操作數和結果數據的累加器。
(2)EBX-指向DS段中的數據。
(3)ECX-字符串和循環操作的計數器。
(4)EDX-I/O指針。
(5)ESI-指向DS段寄存器指向的段中的數據;字符串操作的源指針。
(6)EDI-指向ES段寄存器指向的段中的數據;字符串操作的目的指針。
(7)ESP-堆棧指針(SS指向的段中)。
(8)EBP-指向棧中的數據(SS指向的段中),常用作基址指針寄存器。
段寄存器
段寄存器包括CS、DS、SS、ES、FS、GS,存放16位的段選擇子。這些寄存器可以分成三類:代碼、數據、堆棧。CS是代碼段選擇符。SS是堆棧段選擇符,其它都是數據段選擇符。CS段選擇符不能顯式加載,一般通過指令或者內部處理器操作隱式改變(比如過程調用、中斷處理、任務切換),SS段選擇符可以顯式加載。32位保護模式下,段選擇符裏面存放指定格式的選擇符,格式如下:
狀態和控制寄存器
狀態寄存器EFLAGS,包含一些狀態標誌、控制標誌和系統標誌。復位時,EFLAGS寄存器初值爲0x00000002。
指令指針寄存器
指令指針寄存器EIP裏面包含當前代碼段的一個偏移(offset),指定下一條將被執行的指令。EIP寄存器不能被軟件直接訪問,需要通過控制轉移指令隱式改變(JMP、Jcc、CALL、RET、中斷、異常等)。
內存管理寄存器
內存管理寄存器包括GDTR、IDTR、TR、LDTR,用以指定段式內存管理相關數據結構的地址。這些寄存器的內容通過特定的指令來裝載和獲取。這些寄存器的存在,完全是爲了加速GDT、IDT、TSS、LDT等表和數據結構的查找和加載。試想一下,沒有這樣的寄存器,查表將是一件多麼費勁的事情,而且也沒法做到硬件處理,做不到硬件處理,運行時地址轉換就是不現實的事情了。操作這些寄存器的特定指令如下:
(1)GDTR-LGDT/SGDT
(2)IDTR-LIDT/SIDT
(3)TR-LTR/STR
(4)LDTR-LLDT/SLDT
控制寄存器
intel提供了CR0,CR1,CR2,CR3,CR4,用於操作處理器模式和當前執行任務的特性。
(1)CR0-包含系統控制標誌,這些標誌控制處理的操作模式和狀態。
(2)CR1-保留
(3)CR2-包含頁錯誤的線性地址
(4)CR3-包含頁目錄基地址,又叫做頁目錄基址寄存器(PDBR)
(5)CR4-包含一些標誌,這些標誌使能一些結構的擴展。
其中CR0的位0(PE)是保護模式使能位,該位只控制段級保護機制。CR0的31位(PG)是分頁使能位,用於開啓分頁機制。