X86寄存器历史小记

前言 :在网上搜了一大圈,发现少有对X86寄存器有较完善归纳的,基本上都在讨论普通目的(GPRs)寄存器,在此汇总记录一下目前得到的结论以备忘。

  

1. 先看一下现实情况

X86-64下gdb查看进程寄存器:

这些能看到的是CPU的普通寄存器,还有一些寄存器是这里看不到的。

 

2. 回顾一下历史

  在X86-16时代,起初只有14个16位的普通寄存器:

    通用寄存器:AX 、BX 、CX 、DX

    段寄存器:CS(code segment)、 DS(data segment) 、SS(stack segment) 、ES(extra segment)

    索引和指针寄存器 :(DS:)SI 、DI ,(SS:)SP 、BP ,(CS:)IP

    标志寄存器 : FLAGS(CF AF SF IF ...)

除了这些寄存器,还有8个浮点寄存器(st (0)~st(7))、3个特殊寄存器(保护模式相关):GDTR(global descriper table register)、LDTR(local descriper table register)、IDTR(interrupt descripter table register)、一个任务寄存器: TR(task register)

 

  到了X86-32时代,上述14个普通寄存器全部提升至32位,分别为E**,段寄存器增加了两个FS、GS。随着多媒体技术的发展,还催生了此时的SSE( Streaming  SIMD Extentions )指令集,于是又有了MXCSR(SSE 控制寄存器)和XMM0-7(128bit,SSE浮点寄存器)寄存器。此外这个时期新增了许多特殊寄存器:CR0~CR4(控制寄存器,保护模式、分页机制)、DR0~3,6,7(调试寄存器)、TR3~TR7(80486,测试寄存器)等。

 

  到了X86-64时代,新增了8个通用寄存器:R8-R15,其余的普通寄存器由E**(32bit)提升至R**(64bit)。

 

 

参考:

https://en.wikipedia.org/wiki/X86

http://ybin.cc/programming/x86-registers/

posted @ 2017-10-16 18:14  rec0rd  阅读(660)  评论(0编辑  收藏  举报