assembly - 为什么他们在 x86-64 中使用数字作为寄存器名称?

标签 assembly x86-64 cpu-registers instruction-set

AFAIK x86-64 向 Intel x86 派生的寄存器( raxrcx 等)添加了许多通用寄存器,称为 r8 - r15 .

他们为什么要这样命名新寄存器?
为什么不遵循现有的命名约定并将它们称为 rfx , rgx ……?

最佳答案

对 CPU 寄存器进行编号是常态,几乎所有处理器都会这样做。然而,8086 处理器是古老的,早在 1976 年,它们的晶体管预算就极其有限。实现一个只有 20,000 个有源晶体管的 16 位处理器是非常棒的。他们减少的一种方法是为寄存器提供专用功能。在这一点上,给它们命名而不是数字是有意义的,暗示它们的用法。另一个影响是它旨在提供与 8080 处理器的兼容级别,它还具有具有专用功能的命名寄存器。

完全相反的设计是摩托罗拉 68000,三年后采用更先进的工艺技术设计,使晶体管预算增加一倍。一个非常正交的设计,(几乎)每个寄存器都可以在任何指令中自由使用。并且与早期设计不兼容。它有编号的寄存器(D0-D7 和 A0-A7)。

x86 架构的扩展再次使用编号寄存器,例如 R8 到 R15、MM0 到 MM7、XMM0-15、YMM0-15 等。

关于assembly - 为什么他们在 x86-64 中使用数字作为寄存器名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12770378/

相关文章:

assembly - 在 MASM 中使用常量初始化大数

assembly - 指令集仿真背后的基本思想是什么?

c - 处理 ARM 芯片的保留寄存器位

assembly - 阅读 IA32 汇编代码 - 确定隐藏字符串?

c++ - Arduino 内联 ASM 未按预期工作

assembly - 在 Extern 8086 程序中写入堆栈无效,通过 MOV [BP] ,AL

performance - 在英特尔上丢了周期? rdtsc和CPU_CLK_UNHALTED.REF_TSC之间不一致

c - 为什么键盘中断在 QEMU 中起作用,但在真实硬件上不起作用?

c - 修改链接描述文件以使.text节可写,错误

assembly - 为什么我们必须在MS-DOS 中初始化DS 和ES 寄存器?