术语:汇编语言编程中的“寄存器”

时间:2009-05-02 08:51:11

标签: assembly cpu-registers

我听说过术语:寄存器,硬件寄存器,程序寄存器,寄存器文件。

所有这些之间的区别是什么?总而言之,EAX寄存器的类型是什么?程序注册?

6 个答案:

答案 0 :(得分:8)

寄存器是CPU内部的存储区域。以下是一些定义:

  • 寄存器文件是寄存器数组 - 有关完整说明,请参阅http://en.wikipedia.org/wiki/Register_file
  • eax寄存器是Intel x86系列CPU的累加器寄存器 - 它是整数数学完成的地方。
  • 程序寄存器(我认为你的意思是程序计数器)是一个专用寄存器,它包含要执行的下一个机器代码指令的地址

答案 1 :(得分:5)

寄存器是最基本的数据存储设备。现在这些是主要的区别。

寄存器文件通常是以这种方式组织的大量寄存器集合,以便它们用于计算。在现代处理器中,所有计算都在存储在寄存器文件中的多个寄存器中的值之间执行。

硬件寄存器通常是指存储配置和状态信息的寄存器。这可能适用于处理器或某些外部硬件I / O设备。

程序寄存器可以指程序计数器,这是一个特殊寄存器,用于存储处理器正在执行的当前指令的存储单元。

答案 2 :(得分:4)

寄存器是位于CPU内部的一小块内存。并由汇编语言用于执行各种任务。

可能是程序注册你的意思是程序计数器吗?

答案 3 :(得分:4)

那么,你有通用寄存器,那么你有特殊用途的寄存器(例如,程序计数器寄存器),你有其他各种(存储器/段寄存器,SSE)。

EAX,EBX等是标准的通用寄存器。你可以随意使用它们。通常,返回值应该放入EAX,但基本上就是这样。然后你有堆栈指针EBP,它指向堆栈的开头。最后,你必须编程计数器,它指向当前指令EIP。在x86上,有一些特殊情况,其中两个寄存器在进行64位整数计算时会被融合。字符串指令存在更多特殊情况。如果您要学习组装,最简单的方法是从PowerPC开始,它有更多的寄存器,您可以不受限制地自由使用它们。

所有这些寄存器当然都是硬件寄存器,也就是说,它们是物理内置在CPU中的;)它们所在的位置称为寄存器文件。

您可以看到的另一种类型的寄存器是,如果您有一个使用寄存器(Parrot)的虚拟机,则会获得“虚拟寄存器”,这些寄存器稍后会分配给实际寄存器。这类似于你自己编写编译器时可以做的事情,你基本上假设无限量的寄存器(也就是说,你在每次使用时生成一个新的寄存器),并在不同的阶段转换为实际的寄存器(寄存器分配) )。

答案 4 :(得分:3)

“硬件寄存器”也可能是指某些硬件设备内的位置。例如,UART(COM端口)看起来像一个D形连接器,从机柜外面有9或25个引脚,但对于设备驱动程序,它看起来像几个配置寄存器,一个状态寄存器和数据寄存器,保存下一个字符发送和收到的最后一个字符。 (我在那里省略了很多的细节。)

在x86架构中,这些寄存器通常位于使用I / O指令访问的特殊物理地址空间中。在其他平台中,硬件寄存器通常映射到普通存储空间的某个角落。在任何一种情况下,操作系统及其设备驱动程序的重要作用之一是防止应用程序代码需要知道硬件寄存器所在位置及其含义的详细信息。

在某些类型的硬件设备中,存储器和硬件寄存器之间的区别不太清楚。例如,您的视频适配器包含一个称为帧缓冲区的内存块,用于保存每个像素的颜色和亮度值。那个内存是一个大的硬件寄存器还是只是一个有趣的副作用的缓冲区?

答案 5 :(得分:0)

关于这个问题,你应该考虑两种一般类型的寄存器:

  • 程序注册
  • 硬件注册

硬件寄存器是时钟控制的(按时钟周期更新),用于处理器电路的物理设计。

程序寄存器是随机存取存储器,存放在CPU中的寄存器文件中。汇编/机器代码指令通过%eax,%esp,%rdi,%edi等名称访问这些寄存器。