一、32位CPU系統(tǒng)級寄存器和數(shù)據(jù)結(jié)構(gòu)

二、寄存器分類介紹
通用寄存器:8個,分別為EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI
標(biāo)志寄存器:1個,EFLAGS
控制寄存器:5個,分別為CR0-CR4
調(diào)試寄存器:8個,分別為DR0-DR7
系統(tǒng)地址寄存器:4個,GDTR、IDTR、LDTR和TR
16位段寄存器:6個,分別為CS,DS,ES,FS,GS,SS
其他寄存器:EIP、TSC等
三、寄存器詳解
1.通用寄存器:EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI
(1)盡管這8個通用寄存器大多時候是通用的,可以用作任何用途,但是在某些情況下,他們也有隱含的用法。比如ECX、ESI和EDI在串循環(huán)操作中分別用作計數(shù)器、源和目標(biāo)。EBP和ESP主要用來維護(hù)棧,ESP通常指向棧的頂部,EBP指向當(dāng)前棧幀的起始地址。
(2)EAX, EBX, ECX, EDX都可以作為32位寄存器、16位寄存器或者8位寄存器使用。EAX可作為累加器用于乘法、除法及一些調(diào)整指令,對于這些指令,累加器常表現(xiàn)為隱含形 式。EAX寄存器也可以保存被訪問存儲器單元的偏移地址。EBX常用于地址指針,保存被訪問存儲器單元的偏移地址。ECX經(jīng)常用作計數(shù)器,用于保存指令的 計數(shù)值。ECX寄存器也可以保存訪問數(shù)據(jù)所在存儲器單元的偏移地址。用于計數(shù)的指令包括重復(fù)的串指令、移位指令和循環(huán)指令。移位指令用CL計數(shù),重復(fù)的串 指令用CX計數(shù),循環(huán)指令用CX或ECX計數(shù)。EDX常與EAX配合,用于保存乘法形成的部分結(jié)果,或者除法操作前的被除數(shù),它還可以保存尋址存儲器數(shù)據(jù)。
(3)EBP和ESP是32位寄存器,也可作為16位寄存器BP, SP使用,常用于椎棧操作。
(4)EDI和ESI常用于串操作,EDI用于尋址目標(biāo)數(shù)據(jù)串,ESI用于尋址源數(shù)據(jù)串。
2.標(biāo)志寄存器:EFLAGS
控制任務(wù)狀態(tài)和模式切換、中斷處理、指令追蹤和訪問權(quán)限控制.寄存器中的標(biāo)志位需要特權(quán)指令代碼才可以修改(特權(quán)指令:運(yùn)行在內(nèi)核態(tài)下的代碼)
(1) EFLAGS寄存器的狀態(tài)標(biāo)志(0、2、4、6、7以及11位)指示算術(shù)指令(如ADD, SUB, MUL以及DIV指令)的結(jié)果,這些狀態(tài)標(biāo)志的作用如下:
CF(bit 0) [Carry flag] 若算術(shù)操作產(chǎn)生的結(jié)果在最高有效位(most-significant bit)發(fā)生進(jìn)位或借位則將其置1,反之清零。這個標(biāo)志指示無符號整型運(yùn)算的溢出狀態(tài),這個標(biāo)志同樣在多倍精度運(yùn)算(multiple-precision arithmetic)中使用。
PF(bit 2) [Parity flag] 如果結(jié)果的最低有效字節(jié)(least-significant byte)包含偶數(shù)個1位則該位置1,否則清零。
AF(bit 4) [Adjust flag] 如果算術(shù)操作在結(jié)果的第3位發(fā)生進(jìn)位或借位則將該標(biāo)志置1,否則清零。這個標(biāo)志在BCD(binary-code decimal)算術(shù)運(yùn)算中被使用。
ZF(bit 6) [Zero flag] 若結(jié)果為0則將其置1,反之清零。
SF(bit 7) [Sign flag] 該標(biāo)志被設(shè)置為有符號整型的最高有效位。(0指示結(jié)果為正,反之則為負(fù))
OF(bit 11) [Overflow flag] 如果整型結(jié)果是較大的正數(shù)或較小的負(fù)數(shù),并且無法匹配目的操作數(shù)時將該位置1,反之清零。這個標(biāo)志為帶符號整型運(yùn)算指示溢出狀態(tài)。
(2) DF(位于EFLAGS寄存器的第10位)控制串指令(MOVS, CMPS, SCAS, LODS以及STOS)。設(shè)置DF標(biāo)志使得串指令自動遞減(從高地址向低地址方向處理字符串),清除該標(biāo)志則使得串指令自動遞增。STD以及CLD指令分別用于設(shè)置以及清除DF標(biāo)志。
(3) 系統(tǒng)標(biāo)志以及IOPL域(System Flags and IOPL Field)
EFLAGS寄存器中的這部分標(biāo)志用于控制操作系統(tǒng)或是執(zhí)行操作,它們不允許被應(yīng)用程序所修改。這些標(biāo)志的作用如下:
TF(bit 8) [Trap flag] 將該位設(shè)置為1以允許單步調(diào)試模式,清零則禁用該模式。
IF(bit 9) [Interrupt enable flag] 該標(biāo)志用于控制處理器對可屏蔽中斷請求(maskable interrupt requests)的響應(yīng)。置1以響應(yīng)可屏蔽中斷,反之則禁止可屏蔽中斷。
IOPL(bits 12 and 13) [I/O privilege level field] 指示當(dāng)前運(yùn)行任務(wù)的I/O特權(quán)級(I/O privilege level),正在運(yùn)行任務(wù)的當(dāng)前特權(quán)級(CPL)必須小于或等于I/O特權(quán)級才能允許訪問I/O地址空間。這個域只能在CPL為0時才能通過POPF以及IRET指令修改。
NT(bit 14) [Nested task flag] 這個標(biāo)志控制中斷鏈和被調(diào)用任務(wù)。若當(dāng)前任務(wù)與前一個執(zhí)行任務(wù)相關(guān)則置1,反之則清零。
RF(bit 16) [Resume flag] 控制處理器對調(diào)試異常的響應(yīng)。
VM(bit 17) [Virtual-8086 mode flag] 置1以允許虛擬8086模式,清除則返回保護(hù)模式。
AC(bit 18) [Alignment check flag] 該標(biāo)志以及在CR0寄存器中的AM位置1時將允許內(nèi)存引用的對齊檢查,以上兩個標(biāo)志中至少有一個被清零則禁用對齊檢查。
VIF(bit 19) [Virtual interrupt flag] 該標(biāo)志是IF標(biāo)志的虛擬鏡像(Virtual image),與VIP標(biāo)志結(jié)合起來使用。使用這個標(biāo)志以及VIP標(biāo)志,并設(shè)置CR4控制寄存器中的VME標(biāo)志就可以允許虛擬模式擴(kuò)展(virtual mode extensions)
VIP(bit 20) [Virtual interrupt pending flag] 該位置1以指示一個中斷正在被掛起,當(dāng)沒有中斷掛起時該位清零?!維oftware sets and clears this flag; the processor only reads it.】與VIF標(biāo)志結(jié)合使用。
ID(bit 21) [Identification flag] 程序能夠設(shè)置或清除這個標(biāo)志指示了處理器對CPUID指令的支持。
3.控制寄存器:CR0-CR4
作用:控制寄存器決定處理器的操作模式和當(dāng)前執(zhí)行任務(wù)的一些特征
種類:
CR0: 控制系統(tǒng)的工作模式和處理器的狀態(tài)
CR1: 保留
CR2 :保留出錯的線性地址
CR3:頁目錄基址的物理地址和PCD和PWT標(biāo)志位(和CACHE有關(guān))
CR4:一些結(jié)構(gòu)的擴(kuò)展.表明對于特定的處理器和操作系統(tǒng)執(zhí)行支持.
CR0
PG:分頁有效時,置位為1,清空時為0.與PE一同使用.該指令表明是否使用頁表將線性地址轉(zhuǎn)換成物理地址
CD: cache 缺失設(shè)置位
NW:直寫無效(直寫:高速緩存中的數(shù)據(jù)始終保持與主存儲器中數(shù)據(jù)匹配 )
AM: 對齊功能屏蔽(與EFLAGS寄存器中 AC標(biāo)志位一同使用)
WP:寫保護(hù)
NE: 數(shù)字錯誤標(biāo)志位(與浮點(diǎn)協(xié)處理器共同使用)
ET: 擴(kuò)展類型.設(shè)置有效位時,支持 ntel 387 DX 數(shù)學(xué)協(xié)處理器指令.
TS: 每當(dāng)任務(wù)切換時就設(shè)置該位,并且在解釋協(xié)處理器指令之前測試該位
EM;該位表明是否需要仿真協(xié)處理器的功能
MP:協(xié)處理器監(jiān)視標(biāo)志位
PE: 保護(hù)模式使能,當(dāng)設(shè)置有效位,CPU工作在保護(hù)模式.反之,實模式.
CR3:
PCD:控制當(dāng)前頁目錄表的緩沖,當(dāng)設(shè)置清空時,緩沖.置位時,緩沖無效.與CR0中的CD或PG一同使用
PWT:控制cache采取直寫還是回寫的策略.當(dāng)設(shè)置清空時,回寫有效.當(dāng)置位時,直寫有效.
CR4:
VME:虛地址模式.當(dāng)清空時,無效.
PVI:保護(hù)模式虛中斷,當(dāng)清空時,無效
TSD:時間戳允許標(biāo)志位.當(dāng)清空時,允許RDTSC指令執(zhí)行在任務(wù)特權(quán)級上.當(dāng)置位時,只允許工作在特權(quán)級0.
DE:調(diào)試擴(kuò)展.置位,表明DR4與DR5將產(chǎn)生沒有定義的異常
PSE:當(dāng)置位,使用4M的頁面;清空,使用4K的頁面
PAE:置位,使用36物理內(nèi)存的分頁機(jī)制.清空時,使用32位分頁機(jī)制
MCE:置位,使用機(jī)器檢查異常機(jī)制.
PGE:置位,啟動全局頁面.當(dāng)寫CR3時,也不會被替換.
PCE:置位,表明使RDPMC指令工作在任何保護(hù)級別.
OSFXSR:置位.表明操作系統(tǒng)支持FXSAVE and FXRSTOR指令
OSXMMEXCPT:置位.表明操作系統(tǒng)支持不可屏蔽的SIMD浮點(diǎn)異常.
4.調(diào)試寄存器:DR0-DR7
調(diào)試寄存器主要作用是調(diào)試應(yīng)用代碼、系統(tǒng)代碼、開發(fā)多任務(wù)操作系統(tǒng).來監(jiān)視代碼的運(yùn)行和處理器的性能.

DR0-DR3:保留32位斷點(diǎn)的線性地址.
DR6
B0—B3:斷點(diǎn)狀態(tài)的監(jiān)測
BD:調(diào)試寄存器訪問監(jiān)測.置位,表明在指令流中,下一條指令將訪問其中的一個調(diào)試寄存器
BS:單步執(zhí)行標(biāo)志位
BT:任務(wù)轉(zhuǎn)換標(biāo)志位
DR7:
L0—L3:局部斷點(diǎn)使能標(biāo)志位
G0--G3: 全局?jǐn)帱c(diǎn)使能標(biāo)志位
LE AND GE:置位,表明處理器可以監(jiān)測導(dǎo)致數(shù)據(jù)斷點(diǎn)的指令.推薦置位為1.
GD:通用監(jiān)測使能標(biāo)志位.表明是否開啟調(diào)試寄存器保護(hù).
LEN0 through LEN3 : 用來表明相應(yīng)斷點(diǎn)地址寄存器內(nèi)存位置的大小.
R/W0 through R/W3: 相應(yīng)斷點(diǎn)的狀態(tài)
5.系統(tǒng)地址寄存器:GDTR、IDTR、LDTR和TR
(1) 全局描述符表寄存器GDTR,是一個48位寄存器,用來存放全局描述符表GDT的32位線性基地址和16位的界限值。在全局描述符表中不僅包括有操作系統(tǒng)使用的描述符,而且還有所有任務(wù)使用的公用描述符。
(2) 中斷描述符表寄存器IDTR,是一個48位寄存器,用來存放中斷描述符表IDT的32位線性基地址和16位的界限值。
(3) 局部描述符表寄存器LDTR,是一個16位寄存器,用來存放局部描述符表LDT的16位選擇符。另外還有一個隱含的描述符高速緩沖寄存器,用來存放LDT表描述符。
(4) 任務(wù)狀態(tài)寄存器TR,是一個16位寄存器,用來存放任務(wù)狀態(tài)段TSS的16位選擇符。與之相應(yīng),也有一個隱含的描述符高速緩沖寄存器,用來存放任務(wù)狀態(tài)段TSS的描述符。
6.16位段寄存器:CS,DS,ES,FS,GS,SS
段寄存器有兩部分,一部分是編程可見的選擇器寄存器,為6個16位寄存器,對應(yīng)在另一部分有6個64位的描述符寄存器,后一部分是編程不可見的。
在實地址方式或虛擬8086方式,描述符寄存器不起作用,選擇器寄存器退化成16位CPU的段寄存器功能,存放內(nèi)存段的段基址——段首地址的高16位,其中CS對應(yīng)于代碼段、SS對應(yīng)于堆棧段,DS對應(yīng)于數(shù)據(jù)段,ES對應(yīng)于附加數(shù)據(jù)段,在串操作時,DS和ES分別對應(yīng)于源數(shù)據(jù)段和目的數(shù)據(jù)段。FS和GS沒有定義。
7.其他寄存器:EIP、TSC
(1)指令指針指示器--EIP
它是32位寄存器,低16位稱為IP,用與兼容16位CPU,其內(nèi)容是下一條要取入CPU的指令在內(nèi)存中的偏移地址。當(dāng)一個程序開始運(yùn)行時,系統(tǒng)把EIP清零,每取入一條指令,EPI自動增加取入CPU的字節(jié)數(shù)目。所以稱EIP為指令指針。
(2)時間戳寄存器--TSC
每個時鐘周期時其值加1,重啟時清零。通過RDTSC指令讀取TSC寄存器,只有當(dāng)CR4寄存器的TSD位為0時,才可以在任何優(yōu)先級下執(zhí)行該指令,否則只能在特權(quán)級下執(zhí)行該指令。
(3) 浮點(diǎn)寄存器
由于在80486微處理器內(nèi)部設(shè)有浮點(diǎn)運(yùn)算器,因此在其內(nèi)部有相應(yīng)的寄存器,其中包括8個80位通用數(shù)據(jù)寄存器、1個48位指令指針寄存器、1個48位數(shù)據(jù)指針寄存器、1個16位控制字寄存器、1個16位狀態(tài)字寄存器和1個16位標(biāo)記字寄存器。
四、CPU復(fù)位后各寄存器的值
復(fù)位(包括硬復(fù)位、軟復(fù)位、初上電)后CPU各寄存器的值列于表2.1中。表中BIST為復(fù)位期間80486微處理機(jī)運(yùn)行內(nèi)存自檢功能。
復(fù)位后CR0中的PE位為0(CR0為60000000H)。所以復(fù)位后CPU處于實地址工作方式。這時CS=0F000H,EIP=0FFF0H,所以CPU訪問的第一個內(nèi)存單元的物理地址為0FFFFFFF0H。
表1 復(fù)位后各寄存器的值 寄存器 初始值(BIST) 初始值(NO BIST)
EAX 0(通過) 不定
ECX 不定 不定
EDX 0400+版本ID 0400+版本ID
EBX 不定 不定
ESP 不定 不定
EBP 不定 不定
ESI 不定 不定
EDI 不定 不定
EFLAGS 0000002H 0000002H
EIP 0FFF0H 0FFF0H
ES 0000H 0000H
CS F000H F000H
SS 0000H 0000H
DS 0000H 0000H
續(xù)表 寄存器 初始值(BIST) 初始值(NO BIST)
FS 000H 000H
GS 000H 000H
IDTR 基值=0,界限=3FFH 基值=0,界限=3FFH
CR0 60000000H 60000000H
DR7 00000000H 00000000H
CW 037FH 不變
SW 0000H 不變
TW FFFFH 不變
FIP 00000000H 不變
FEA 00000000H 不變
FCS 0000H 不變
FDS 0000H 不變
FOP 000H 不變
FSTACK 不定 不變
|