https://m.zjurl.cn/answer/6766457846939779336/?app=news_article&app_id=13&share_ansid=6766457846939779336
不同架構(gòu)的CPU寄存器是不一樣的,即使是同一架構(gòu),不同型號的CPU也有差別。這里以80386的CPU為例,寄存器分為6類。其中可供應用程序員使用的為通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)、段寄存器(CS、DS、SS、ES、FS、GS)和標志和控制寄存器(EIP、EFLAGS)。各寄存器介紹如下:
1、通用寄存器(32位)
EAX:一般用作累加器
EBX:一般用作基址寄存器(Base)
ECX:一般用來計數(shù)(Count)
EDX:一般用來存放數(shù)據(jù)(Data)
ESP:一般用作堆棧指針(Stack Pointer)
EBP:一般用作基址指針(Base Pointer)
ESI:一般用作源變址(Source Index)
EDI:一般用作目標變址(Destinatin Index)
可以指定任何通用寄存器的內(nèi)容作為操作數(shù)的地址,以及在形成地址的過程中作如加法或減法這樣簡單的算術(shù)運算。但像串的運算和雙精度的乘法和除法操作這類較復雜的操作,必須要從固定的寄存器中取一個或多個操作數(shù)。
2、段寄存器(16位)
CS:代碼段寄存器
DS:數(shù)據(jù)段寄存器
SS:堆棧段寄存器
ES、FS 及GS:附加數(shù)據(jù)段寄存器
這些段寄存器中存放的不再是某個段的基地址,而是某個段的選擇符(Selector)。因為16 位的寄存器無法存放32 位的段基地址,段基地址只好存放在段的描述符(Descriptor)中。
3、標志和控制寄存器(32位)
標志寄存器 EFLAGS
指令指針 EIP
機器狀態(tài)字 CR0
Intel 預留 CR1
頁故障地址 CR2
頁目錄地址 CR3
指令指針寄存器(EIP)中存放下一條將要執(zhí)行指令的偏移量(offset ),這個偏移量是相對于目前正在運行的代碼段寄存器(CS)而言的。偏移量加上當前代碼段的基地址,就形成了下一條指令的地址。
4、系統(tǒng)地址寄存器
全局描述符表寄存器GDTR(Global Descriptor Table Register ),是48 位寄存器,用來保存全局描述符表(GDT)的32 位基地址和GDT 的大?。?6位)。
中斷描述符表寄存器IDTR(Interrupt Descriptor Table Register),是48 位寄存器,用來保存中斷描述符表(IDT)的32 位基地址和IDT 的大?。?6位)。
局部描述符表寄存器LDTR(Local Descriptor Table Register ),是16 位寄存器,保存局部描述符表LDT 段的選擇符。
任務狀態(tài)寄存器TR(Task State Register)是16 位寄存器,用于保存任務狀態(tài)段TSS 段的16 位選擇符。
5、調(diào)試寄存器和測試寄存器(32位)
6、測試寄存器
TR6:測試命令寄存器,其內(nèi)存放測試控制命令。
TR7:數(shù)據(jù)寄存器,其內(nèi)保存轉(zhuǎn)換旁路緩沖器測試的數(shù)據(jù)。