基本寄存器包括通用寄存器、指令指針寄存器、標志寄存器和段寄存器,這些寄存器在程序設計中非常重要。
系統級寄存器包括5個控制寄存器CR0~CR4,4個系統地址寄存器GDTR、IDTR、LDTR和TR。控制寄存器CR0~CR4用于存放全局特征,如是否用高速緩沖和浮點寄存器,是否分段分頁等。系統地址寄存器用于保護模式下地址轉換和信息的保護。
調試寄存器DR0~DR7共8個32位可編程寄存器,用于支持系統的調試功能;測試寄存器TR3~TR7共5個,用于高速緩沖和轉換后援緩沖器TLB的測試。
浮點寄存器共13個,用于支持浮點運算。
PC系列微機的寄存器總體上可分為程序可見和不可見兩類。在程序設計期間要使用的、并可由指令來指定它們的寄存器稱為程序可見寄存器。在應用程序設計期 間,不能直接尋址的寄存器稱為程序不可見寄存器,但系統程序設計期間可以被間接引用。只有80286及其以上的微處理器包含程序不可見寄存器,用于控制和 操作保護模式存儲器系統。
2.2.1 基本寄存器
基本寄存器可分為通用寄存器和專用寄存器。通用寄存器包括 EAX、EBX、ECX、EDX、EBP、EDI和ESI。這些寄存器存儲邏輯和算術運算中的操作數,或保存地址運算中的操作數(通常為32位的地址)。 專用寄存器包括:指令指針寄存器EIP,堆棧指針ESP,標志寄存器EFLAGS,段寄存器CS、DS、ES、SS、FS和GS。
由可見,基本寄存器又可分為8位、16位和32位寄存器。
16位寄存器有AX、BX、CX、DX、SP、BP、DI、SI、IP、FLAGS、CS、DS、ES、SS、FS和GS。其中AX、BX、CX和DX 可拆分為8位寄存器AH、AL, BH、BL, CH、CL, DH、DL。16位寄存器主要用于8086到80286的16位微處理器和實地址方式。
32位擴展寄存器是EAX、EBX、ECX、EDX、ESP、EBP、EDI、ESI、EIP和EFLAGS。這些32位擴展寄存器和16位寄存器FS、GS只用于80386及更高型號的微處理器中。
1.通用寄存器
1)EAX(累加器)
EAX可作為32位寄存器(EAX)、16位寄存器(AX)或8位寄存器(AH或AL)引用。累加器用于如乘法、除法及一些調整指令,對于這些指令,累加器常表現為隱含形式。在80386及更高型號的微處理器中,EAX寄存器也可以保存訪問存儲單元的偏移地址。
2)EBX(基址)
EBX可作為EBX、BX、BH或BL尋址。在所有型號的微處理器中,EBX常用來作地址指針,用于保存訪問存儲單元的偏移地址。
3)ECX(計數)
ECX是個通用寄存器,經常作計數器,用于保存許多指令的計數值。在80386及更高型號的微處理器中,ECX寄存器也可保存訪問存儲器數據的偏移地 址。用于計數的指令是重復的串指令、移位、循環指令。移位指令用CL計數,重復的串指令用CX計數,循環指令用CX或ECX計數。
4)EDX(數據)
EDX是通用寄存器,常與EAX配合,用于保存乘法形成的部分結果,或者除法之前部分被除數。對于80386及更高型號的微處理器,這個寄存器也可尋址存儲器數據。
5)EBP(基指針)
這個寄存器可作為BP或者EBP尋址,EBP可指向所有型號微處理器的存儲位置,常用于堆棧的操作。
6)EDI(目標間址)
EDI常用于尋址串指令的目標數據串,它的另一個功能是作為32位(EDI)或者16位(DI)通用寄存器使用。
7)ESI(源間址)
ESI既可作為ESI,也可作為SI來使用。ESI為串指令尋址源數據串。如同EDI一樣,ESI也作為通用寄存器使用。作為16位寄存器,由SI尋址;作為32位寄存器,由ESI尋址。
2.指令指針寄存器EIP
指令指針寄存器EIP存放指令的偏移地址。當微處理器工作在實模式下時,這個寄存器是IP(16位),當80386及更高型號的微處理器工作于保護模式 下時,則是EIP(32位)。指令指針總是指向程序的下一條指令,用于微處理器在程序中順序地尋址代碼段內的下一條指令。當遇到跳轉指令或調用指令時,指 令指針寄存器的內容需要修改。
3.堆棧指針寄存器ESP
ESP尋址一個稱為堆棧的存儲區。通過這個指針,存取堆棧存儲器數據,具體操作將在本書后面說明。作為16位寄存器被引用時,是SP;如果作為32位寄存器,則是ESP。