IA32體系結構1(x86寄存器)

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)是分頁使能位,用於開啓分頁機制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章