基本寄存器包括通用寄存器、指令指针寄存器、标志寄存器和段寄存器,这些寄存器在程序设计中非常重要。
系统级寄存器包括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。