2009-05-02 94 views

回答

7

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

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

在8086和更高版本中,绝对在32位(386)和现代x86-64中,所有寄存器都是基本上是通用的。许多人也有特殊的用途(像`ecx`中的移位计数,并且全乘(32bx32b => 64b)仍然需要`eax`中的一个输入),但是`add eax,edx`和`add esp,ebp`只是“add”指令有两种不同的src/dest选项。 32位x86主要有7个通用寄存器。使用`esp`作为堆栈指针以外的任何东西通常是不可能的/在实际代码中是值得的。 – 2016-04-03 21:23:06

+0

“程序寄存器”可能意味着进程的[架构状态](https://en.wikipedia.org/wiki/Architectural_state)的注册部分。当你谈论线程之间的上下文切换时,或者如果你在内核代码中,那么“程序寄存器”可能是你在进入内核时保存的用户空间状态。这不仅仅是“程序计数器”或“指令指针”的奇怪名称。 – 2016-04-03 21:28:23

4

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

是否可以通过程序注册您是指程序计数器?

3

好了,你有个通用寄存器,那么你有寄存器(例如程序计数器寄存器),还有其他各种(存储器/段寄存器,SSE)。

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

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

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

3

“硬件寄存器”也可能指某个硬件设备内的某个位置。例如,一个UART(COM端口)看起来像一个D型连接器,其外部带有9或25个引脚,但对于设备驱动程序来说,它看起来像几个配置寄存器,一个状态寄存器和数据寄存器,它们将下一个字符发送并收到最后一个字符。 (我忽略了lot的详细信息。)

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

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

5

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

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

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

程序寄存器可以指程序计数器,它是一个专用寄存器,用于存储处理器正在执行的当前指令的存储位置。

0

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

  • 程序注册
  • 硬件寄存器

寄存器的时钟频率的硬件(更新时钟滴答)并用于处理器电路设计的物理

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