【问题标题】:Assembly register vs CPU register汇编寄存器与 CPU 寄存器
【发布时间】:2021-03-25 16:09:33
【问题描述】:

作为一名 CS 初学者,我知道 CPU 有一些称为寄存器的硬件,用于存储临时变量。但我也看到 x86 汇编代码具有像 %EAX、%ECX 这样的“寄存器”概念。想知道这里有什么区别,或者它们是相同的东西还是它们有任何关系?

【问题讨论】:

  • 是一样的。 %eax 等是 CPU 寄存器的 x86 化身。
  • 这些是一回事。在高性能处理器上,处理器可能不仅仅是这些寄存器,但它们只是实现细节,程序员不可见。对程序员来说,eax 和朋友就是机器的寄存器。
  • 实际上,用汇编语言编程的全部目的是直接访问 CPU 寄存器和相关的硬件功能。

标签: assembly cpu-architecture cpu-registers


【解决方案1】:

它们曾经是同一个东西,在更原始的 CPU 架构中它们仍然是同一个东西。

x86 现在确实进行了寄存器重命名,并且 CPU 实际上拥有的寄存器比看起来要多得多。另一方面,您可能编写代码,就好像那不是真的一样。如果你能通过执行速度以外的任何方式来区分,那么 CPU 就是有问题的。

【讨论】:

  • 在这里区分架构(纸上的 ISA,它定义了 EAX 之类的东西)和 CPU 实际实现 ISA 的 micro 架构是很有用的. (例如,通过renaming 到更大的寄存器文件中)。所以我会说“更原始的微架构”。此外,大多数现代主流(不是 DSP/微控制器)ISA 都存在高性能实现,所有这些都使用无序执行和寄存器重命名。 x86 不是唯一的,也不是第一个。
  • 或者您可能是在指出英特尔 P6 系列有一个退休寄存器文件,其中每个架构寄存器都有一个插槽,并且使用存储在 ROB 条目中的值单独进行重命名。 (P4 和 Sandybridge 系列 (realworldtech.com/sandy-bridge) 和 AMD 都使用了单独的物理寄存器文件。)
猜你喜欢
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 2020-01-30
  • 2012-01-11
相关资源
最近更新 更多