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