寄存器入门

匿名 (未验证) 提交于 2019-12-03 00:27:02

寄存器是cpu的组成部件之一,cpu在进行计算时,因为速度太快的原因,无法与内存(DRAM)直接进行操作。所以需要将所需的数据先从内存中提取到寄存器中,在对寄存器进行操作。
为了缓解DRAM与cpu的速度差,计算机在cpu与DRAM之间还有一个cache组件(SRAM),从内存中取出数据到寄存器中需要一个cpu指令周期,但如果预先放在cache中的话便可以直接使用,大大节约了取到数据的时间。

从8086这一代cpu开始,intel进入了x86时代,由于最早出现的8086是16位的cpu,寄存器能存储的位数也为16位,例如我们熟悉的AX,BX,CX,DX寄存器。
从i386这一代cpu开始,32位处理器开始进入市场,这个时候寄存器也升至32位,除了包含先前16位所有的寄存器外,还把通用寄存器、指令寄存器和标志寄存器从16位扩充成32位,并增加了2个16位段寄存器FS和GS。
之后的64位x86-64也是对x86架构的扩展。

这里以32位cpu的寄存器为例
在32位cpu中有:

  • 4个数据寄存器(EAX、EBX、ECX、EDX)
  • 2个变址和指针寄存器(ESI、EDI)
  • 2个指针寄存器(ESP、EBP)
  • 6个段寄存器(ES、CS、SS、FS、GS)
  • 1个指令指针寄存器(EIP)
  • 1个标志寄存器(EFlags)

主要用于保存操作数和运算结果等信息。



PS:在16位cpu中,AX,BX,CX,DX并不能作为基址和变址寄存器来存放单元的地址,但在32位cpu中进行了支持。

ESI和EDI被称为变址寄存器(Index Register),用于存放存储单元在段中的偏移量,可以用来实现多种存储器操作数的寻址方式,为以不同的地址访问存储单元提供方便。

EBP和ESP被成为指针寄存器(Pointer Register),用于存放堆栈内存存储单元的偏移量
其中,BP被称为(Base Pointer)基地址寄存器,用它可以直接存取堆栈中的数据。
SP被称为(Stack Pointer)堆栈指针寄存器,用它只能访问栈顶。

根据内存分段的管理模式而设置的寄存器。最终物理地址是由段寄存器的值+偏移量组合而成,这样做的优点是能将两个较少位数的值组合成一个可以访问的较大物理空间的内存地址。

段寄存器介绍:



文章来源: 寄存器入门
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!