日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Intel X86 CPU系列的寄存器

發布時間:2025/6/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Intel X86 CPU系列的寄存器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、32CPU系統級寄存器和數據結構

二、
寄存器分類介紹
通用寄存器:8個,分別為EAX,EBX,ECX,EDX,ESP,EBP,ESI,EDI
標志寄存器:1個,EFLAGS
控制寄存器:5個,分別為CR0-CR4
調試寄存器:8個,分別為DR0-DR7
系統地址寄存器: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在串循環操作中分別用作計數器、源和目標。EBP和ESP主要用來維護棧,ESP通常指向棧的頂部,EBP指向當前棧幀的起始地址。
(2)EAX,?EBX,?ECX,?EDX都可以作為32位寄存器、16位寄存器或者8位寄存器使用。EAX可作為累加器用于乘法、除法及一些調整指令,對于這些指令,累加器常表現為隱含形?式。EAX寄存器也可以保存被訪問存儲器單元的偏移地址。EBX常用于地址指針,保存被訪問存儲器單元的偏移地址。ECX經常用作計數器,用于保存指令的?計數值。ECX寄存器也可以保存訪問數據所在存儲器單元的偏移地址。用于計數的指令包括重復的串指令、移位指令和循環指令。移位指令用CL計數,重復的串?指令用CX計數,循環指令用CX或ECX計數。EDX常與EAX配合,用于保存乘法形成的部分結果,或者除法操作前的被除數,它還可以保存尋址存儲器數據。
(3)EBP和ESP是32位寄存器,也可作為16位寄存器BP,?SP使用,常用于椎棧操作。
(4)EDI和ESI常用于串操作,EDI用于尋址目標數據串,ESI用于尋址源數據串。

2.標志寄存器:EFLAGS
控制任務狀態和模式切換、中斷處理、指令追蹤和訪問權限控制.寄存器中的標志位需要特權指令代碼才可以修改(特權指令:運行在內核態下的代碼)
(1) EFLAGS寄存器的狀態標志(0、2、4、6、7以及11位)指示算術指令(如ADD, SUB, MUL以及DIV指令)的結果,這些狀態標志的作用如下:
CF(bit 0) [Carry flag]?? 若算術操作產生的結果在最高有效位(most-significant bit)發生進位或借位則將其置1,反之清零。這個標志指示無符號整型運算的溢出狀態,這個標志同樣在多倍精度運算(multiple-precision arithmetic)中使用。
PF(bit 2) [Parity flag]?? 如果結果的最低有效字節(least-significant byte)包含偶數個1位則該位置1,否則清零。
AF(bit 4) [Adjust flag]?? 如果算術操作在結果的第3位發生進位或借位則將該標志置1,否則清零。這個標志在BCD(binary-code decimal)算術運算中被使用。
ZF(bit 6) [Zero flag]?? 若結果為0則將其置1,反之清零。
SF(bit 7) [Sign flag]?? 該標志被設置為有符號整型的最高有效位。(0指示結果為正,反之則為負)
OF(bit 11) [Overflow flag]?? 如果整型結果是較大的正數或較小的負數,并且無法匹配目的操作數時將該位置1,反之清零。這個標志為帶符號整型運算指示溢出狀態。
(2) DF(位于EFLAGS寄存器的第10位)控制串指令(MOVS, CMPS, SCAS, LODS以及STOS)。設置DF標志使得串指令自動遞減(從高地址向低地址方向處理字符串),清除該標志則使得串指令自動遞增。STD以及CLD指令分別用于設置以及清除DF標志。
(3) 系統標志以及IOPL域(System Flags and IOPL Field)
EFLAGS寄存器中的這部分標志用于控制操作系統或是執行操作,它們不允許被應用程序所修改。這些標志的作用如下:
TF(bit 8) [Trap flag]?? 將該位設置為1以允許單步調試模式,清零則禁用該模式。
IF(bit 9) [Interrupt enable flag]?? 該標志用于控制處理器對可屏蔽中斷請求(maskable interrupt requests)的響應。置1以響應可屏蔽中斷,反之則禁止可屏蔽中斷。
IOPL(bits 12 and 13) [I/O privilege level field]?? 指示當前運行任務的I/O特權級(I/O privilege level),正在運行任務的當前特權級(CPL)必須小于或等于I/O特權級才能允許訪問I/O地址空間。這個域只能在CPL為0時才能通過POPF以及IRET指令修改。
NT(bit 14) [Nested task flag]?? 這個標志控制中斷鏈和被調用任務。若當前任務與前一個執行任務相關則置1,反之則清零。
RF(bit 16) [Resume flag]?? 控制處理器對調試異常的響應。
VM(bit 17) [Virtual-8086 mode flag]?? 置1以允許虛擬8086模式,清除則返回保護模式。
AC(bit 18) [Alignment check flag]?? 該標志以及在CR0寄存器中的AM位置1時將允許內存引用的對齊檢查,以上兩個標志中至少有一個被清零則禁用對齊檢查。
VIF(bit 19) [Virtual interrupt flag] ? 該標志是IF標志的虛擬鏡像(Virtual image),與VIP標志結合起來使用。使用這個標志以及VIP標志,并設置CR4控制寄存器中的VME標志就可以允許虛擬模式擴展(virtual mode extensions)
VIP(bit 20) [Virtual interrupt pending flag]?? 該位置1以指示一個中斷正在被掛起,當沒有中斷掛起時該位清零。【Software sets and clears this flag; the processor only reads it.】與VIF標志結合使用。
ID(bit 21) [Identification flag]?? 程序能夠設置或清除這個標志指示了處理器對CPUID指令的支持。

3.控制寄存器:CR0-CR4
作用:控制寄存器決定處理器的操作模式和當前執行任務的一些特征
種類:
CR0: 控制系統的工作模式和處理器的狀態
CR1: 保留
CR2 :保留出錯的線性地址
CR3:頁目錄基址的物理地址和PCD和PWT標志位(和CACHE有關)
CR4:一些結構的擴展.表明對于特定的處理器和操作系統執行支持.

CR0
PG:分頁有效時,置位為1,清空時為0.與PE一同使用.該指令表明是否使用頁表將線性地址轉換成物理地址
CD: cache 缺失設置位
NW:直寫無效(直寫:高速緩存中的數據始終保持與主存儲器中數據匹配 )
AM: 對齊功能屏蔽(與EFLAGS寄存器中 AC標志位一同使用)
WP:寫保護
NE: 數字錯誤標志位(與浮點協處理器共同使用)
ET: 擴展類型.設置有效位時,支持 ntel 387 DX 數學協處理器指令.
TS: 每當任務切換時就設置該位,并且在解釋協處理器指令之前測試該位
EM;該位表明是否需要仿真協處理器的功能
MP:協處理器監視標志位
PE: 保護模式使能,當設置有效位,CPU工作在保護模式.反之,實模式.

CR3:
PCD:控制當前頁目錄表的緩沖,當設置清空時,緩沖.置位時,緩沖無效.與CR0中的CD或PG一同使用
PWT:控制cache采取直寫還是回寫的策略.當設置清空時,回寫有效.當置位時,直寫有效.
CR4:
VME:虛地址模式.當清空時,無效.
PVI:保護模式虛中斷,當清空時,無效
TSD:時間戳允許標志位.當清空時,允許RDTSC指令執行在任務特權級上.當置位時,只允許工作在特權級0.
DE:調試擴展.置位,表明DR4與DR5將產生沒有定義的異常
PSE:當置位,使用4M的頁面;清空,使用4K的頁面
PAE:置位,使用36物理內存的分頁機制.清空時,使用32位分頁機制
MCE:置位,使用機器檢查異常機制.
PGE:置位,啟動全局頁面.當寫CR3時,也不會被替換.
PCE:置位,表明使RDPMC指令工作在任何保護級別.
OSFXSR:置位.表明操作系統支持FXSAVE and FXRSTOR指令
OSXMMEXCPT:置位.表明操作系統支持不可屏蔽的SIMD浮點異常.

4.調試寄存器:DR0-DR7
調試寄存器主要作用是調試應用代碼、系統代碼、開發多任務操作系統.來監視代碼的運行和處理器的性能.

DR0-DR3:保留32位斷點的線性地址.
DR6
B0—B3:斷點狀態的監測
BD:調試寄存器訪問監測.置位,表明在指令流中,下一條指令將訪問其中的一個調試寄存器
BS:單步執行標志位
BT:任務轉換標志位
DR7:
L0—L3:局部斷點使能標志位
G0--G3: 全局斷點使能標志位
LE AND GE:置位,表明處理器可以監測導致數據斷點的指令.推薦置位為1.
GD:通用監測使能標志位.表明是否開啟調試寄存器保護.
LEN0 through LEN3 : 用來表明相應斷點地址寄存器內存位置的大小.
R/W0 through R/W3: 相應斷點的狀態


5.系統地址寄存器:GDTR、IDTR、LDTR和TR
(1) 全局描述符表寄存器GDTR,是一個48位寄存器,用來存放全局描述符表GDT的32位線性基地址和16位的界限值。在全局描述符表中不僅包括有操作系統使用的描述符,而且還有所有任務使用的公用描述符。
(2) 中斷描述符表寄存器IDTR,是一個48位寄存器,用來存放中斷描述符表IDT的32位線性基地址和16位的界限值。
(3) 局部描述符表寄存器LDTR,是一個16位寄存器,用來存放局部描述符表LDT的16位選擇符。另外還有一個隱含的描述符高速緩沖寄存器,用來存放LDT表描述符。
(4) 任務狀態寄存器TR,是一個16位寄存器,用來存放任務狀態段TSS的16位選擇符。與之相應,也有一個隱含的描述符高速緩沖寄存器,用來存放任務狀態段TSS的描述符。

6.16位段寄存器:CS,DS,ES,FS,GS,SS
段寄存器有兩部分,一部分是編程可見的選擇器寄存器,為6個16位寄存器,對應在另一部分有6個64位的描述符寄存器,后一部分是編程不可見的。
在實地址方式或虛擬8086方式,描述符寄存器不起作用,選擇器寄存器退化成16位CPU的段寄存器功能,存放內存段的段基址——段首地址的高16位,其中CS對應于代碼段、SS對應于堆棧段,DS對應于數據段,ES對應于附加數據段,在串操作時,DS和ES分別對應于源數據段和目的數據段。FS和GS沒有定義。

7.其他寄存器:EIP、TSC
(1)指令指針指示器--EIP
它是32位寄存器,低16位稱為IP,用與兼容16位CPU,其內容是下一條要取入CPU的指令在內存中的偏移地址。當一個程序開始運行時,系統把EIP清零,每取入一條指令,EPI自動增加取入CPU的字節數目。所以稱EIP為指令指針。
(2)時間戳寄存器--TSC
每個時鐘周期時其值加1,重啟時清零。通過RDTSC指令讀取TSC寄存器,只有當CR4寄存器的TSD位為0時,才可以在任何優先級下執行該指令,否則只能在特權級下執行該指令。
(3) 浮點寄存器
? 由于在80486微處理器內部設有浮點運算器,因此在其內部有相應的寄存器,其中包括8個80位通用數據寄存器、1個48位指令指針寄存器、1個48位數據指針寄存器、1個16位控制字寄存器、1個16位狀態字寄存器和1個16位標記字寄存器。

四、CPU復位后各寄存器的值
復位(包括硬復位、軟復位、初上電)后CPU各寄存器的值列于表2.1中。表中BIST為復位期間80486微處理機運行內存自檢功能。
復位后CR0中的PE位為0(CR0為60000000H)。所以復位后CPU處于實地址工作方式。這時CS=0F000H,EIP=0FFF0H,所以CPU訪問的第一個內存單元的物理地址為0FFFFFFF0H。
表1 復位后各寄存器的值? 寄存器 初始值(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
續表? 寄存器 初始值(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 不定 不變

總結

以上是生活随笔為你收集整理的Intel X86 CPU系列的寄存器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。