x86的寄存器
i386相比之前的系列,寄存器有了一些变化
- 把16位的通用寄存器、标志寄存器以及指令指针寄存器扩充为32位的寄存器
- 段寄存器仍为16位
- 增加了4个32位的控制寄存器
- 增加了4个系统地址寄存器
- 增加了8个调试寄存器
- 增加了2个测试寄存器
通用寄存器
对于i386及后续系列的32位CPU,都有32位的通用寄存器,包括EAX、EBX、ECX、EDX、ESP、EBP、ESI和EDI,还有EIP和EFLAGS。
EAX:累加器,AX代表低16位,AX中包含0-7位的AL,8-15位的AH。
EBX:基址寄存器,同理包含BX,BL和BH。
ECX:计数寄存器,同理包含CX,CL和CH。
EDX:数据寄存器,同理包含DX,DL和DH。
ESP:堆栈指针寄存器,SP代表低16位。
EBP:基址寄存器,BP代表低16位。
ESI:源变址寄存器,SI代表低16位。
EDI:目的变址寄存器,DI代表低16位。
段寄存器
段寄存器在之前的基础上增加了两个段寄存器,即:
CS(代码段寄存器)
DS(数据段寄存器)
SS(堆栈段寄存器)
ES(附加数据段寄存器)
和新增的段寄存器:FS和GS。
状态和控制寄存器
状态标和控制寄存器是由标志寄存器EFLAGS、指令指针寄存器EIP和4个控制寄存器组成。
4个控制寄存器分别为:CR0(机器状态字),CR1(Intel保留),CR2(页故障地址),CR3(页目录地址)。
指令指针寄存器EIP
指令指针寄存器EIP中存放着下一条将要执行指令的偏移量,这个偏移量是相对于目前正在运行的代码段寄存器CS而言的。偏移量加上当前代码段的基地址,就形成了下一条指令的地址。EIP中的低16位可以用IP进行访问。标志寄存器FLAGS
标志寄存器存放着有关处理器的控制标志,如何所示。标志寄存器的第1、3、5、15位及18~31位都还没有定义。