Linux基于x86运行的硬件基础(1)——寄存器

来源:互联网 发布:linux 复制文件夹内容 编辑:程序博客网 时间:2024/06/07 01:21

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位都还没有定义。














原创粉丝点击