80386的各種寄存器一覽


注:本分類下文章大多整理自《深入分析linux內核源代碼》一書,另有參考其他一些資料如《linux內核完全剖析》、《linux c 編程一站式學習》等,只是為了更好地理清系統編程和網絡編程中的一些概念性問題,並沒有深入地閱讀分析源碼,我也是草草翻過這本書,請有興趣的朋友自己參考相關資料。此書出版較早,分析的版本為2.4.16,故出現的一些概念可能跟最新版本內核不同。

此書已經開源,閱讀地址 http://www.kerneltravel.net


1、通用寄存器(32位)


• EAX:一般用作累加器
• EBX:一般用作基址寄存器(Base)
• ECX:一般用來計數(Count)
• EDX:一般用來存放數據(Data)
• ESP:一般用作堆棧指針(Stack Pointer)
• EBP:一般用作基址指針(Base Pointer)
• ESI:一般用作源變址(Source Index)
• EDI:一般用作目標變址(Destinatin Index)

2、段寄存器(16位)

• CS:代碼段寄存器
• DS:數據段寄存器
• SS:堆棧段寄存器
• ES、FS 及GS:附加數據段寄存器

這些段寄存器中存放的不再是某個段的基地址,而是某個段的選擇符(Selector。因為16 位的寄存器無法存放32 位的段基地址,段基地址只好存放在段的描述符(Descriptor)中。


3、標志和控制寄存器(32位)

標志寄存器 EFLAGS
指令指針 EIP
機器狀態字 CR0
Intel 預留 CR1
頁故障地址 CR2
頁目錄地址 CR3

指令指針寄存器(EIP)中存放下一條將要執行指令的偏移量(offset ),這個偏移量是相對於目前正在運行的代碼段寄存器(CS)而言的。偏移量加上當前代碼段的基地址,就形成了下一條指令的地址。







4、系統地址寄存器

• 全局描述符表寄存器GDTR(Global Descriptor Table Register ),是48 位寄存器,用來保存全局描述符表(GDT)的32 位基地址和GDT 的大小(16位)。

• 中斷描述符表寄存器IDTR(Interrupt Descriptor Table Register),是48 位寄存器,用來保存中斷描述符表(IDT)的32 位基地址和IDT 的大小(16位)。

• 局部描述符表寄存器LDTR(Local Descriptor Table Register ),是16 位寄存器,保存局部描述符表LDT 段的選擇符。

• 任務狀態寄存器TR(Task State Register)是16 位寄存器,用於保存任務狀態段TSS 段的16 位選擇符。



5、調試寄存器和測試寄存器(32位)


80386 有兩個32 位的測試寄存器TR6 和TR7。TR6 是測試命令寄存器,其內存放測試控制命令。TR7 是數據寄存器,其內保存轉換旁路緩沖器測試的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM