Hacker News 中文摘要

RSS订阅

x86-64 CPU有多少个寄存器?(2020) -- How many registers does an x86-64 CPU have? (2020)

文章摘要

x86-64 CPU的寄存器数量取决于定义方式,传统认为16个通用寄存器,但实际还包括浮点、向量、控制等寄存器,总数可达上千个。文章探讨了不同视角下的寄存器分类和计数方法。

文章总结

x86-64 CPU寄存器数量探析

核心内容概述

本文深入探讨了现代x86-64架构CPU中寄存器的复杂体系。通过严谨的分类统计,作者最终计算出当代x86-64处理器核心大约包含557个寄存器(部分寄存器数量存在不确定性),展现了该架构与精简指令集(RISC)相比的显著复杂性。

寄存器分类详述

1. 通用寄存器(GPRs)

  • 16个64位主寄存器(RAX-R15)
  • 每个主寄存器包含32位(EAX等)、16位(AX等)和8位子寄存器(AL等)
  • 特殊设计的AX/BX/CX/DX还包含独立的8位高位寄存器(AH/BH/CH/DH)
  • 总计:68个寄存器

2. 特殊功能寄存器

  • 指令指针(RIP)及其变体
  • 状态标志寄存器(RFLAGS/EFLAGS/FLAGS)
  • 总计:4个寄存器

3. 段寄存器

  • 6个传统段寄存器(CS/SS/DS/ES/FS/GS)
  • 在长模式下仅FS/GS保持特殊功能
  • 总计:6个寄存器

4. 浮点与SIMD寄存器

  • x87浮点单元:8个80位数据寄存器+6个控制寄存器
  • MMX:8个64位寄存器(与x87共享物理单元)
  • SSE/AVX:32个512位ZMM寄存器(含256位YMM和128位XMM子集)+ MXCSR状态寄存器
  • AVX-512:新增8个掩码寄存器(k0-k7)
  • 总计:133个寄存器(不含AVX-512)

5. 其他专用寄存器

  • 边界检查:7个MPX相关寄存器
  • 调试:6个调试寄存器(DR0-DR7,其中DR4/DR5不存在)
  • 控制:5个有效控制寄存器(CR0-CR4,CR8)+ XCR0扩展控制寄存器
  • 系统表指针:4个保护模式表寄存器(GDTR/LDTR/IDTR/TR)
  • 内存类型:数量不定的MTRR寄存器(核心间共享)

6. 模型专用寄存器(MSRs)

  • 通过RDMSR/WRMSR指令访问
  • 筛选标准:仅统计跨代延续的"IA32_"前缀架构级MSR
  • 经文本分析确认约400个有效MSR
  • 特殊案例:TSC时间戳计数器有专用读取指令

统计总结

| 寄存器类别 | 数量 | |-------------------|-------| | 通用寄存器 | 68 | | 特殊寄存器 | 4 | | 段寄存器 | 6 | | 浮点/SIMD寄存器 | 133 | | 边界寄存器 | 7 | | 调试寄存器 | 6 | | 控制寄存器 | 6 | | 系统表指针 | 4 | | 模型专用寄存器 | 400 | | 总计(最小值)| >556 |

未计入的寄存器类型

  1. 高级可编程中断控制器(APIC)寄存器组
  2. 最后分支记录(LBR)寄存器
  3. 厂商特定的虚拟化/安全扩展寄存器

技术背景说明

  • 统计原则:计入所有具有独立编码的寄存器,包括子寄存器和不可直接寻址的MSR
  • 排除标准:过时的测试寄存器、微架构影子寄存器、纯实现细节寄存器
  • 特别处理:AVX-512寄存器因AMD尚未支持而暂不计入主要统计

注:本文数据基于2020年发布的处理器技术,部分结论可能随架构演进发生变化。

评论总结

以下是评论内容的总结:

  1. x86架构的寄存器数量问题

    • 观点认为x86寄存器数量难以精确统计,取决于具体用途和扩展集(评论5)
    • 引用:"The answer depends upon the purpose and a specific set of optional extensions"(评论5)
    • 引用:"Quickly realized there was never going to be any single answer until I had mastered the entire ISA"(评论8)
  2. ISA暴露寄存器与实际物理寄存器

    • 指出ISA暴露的寄存器数量(如16个通用寄存器)远少于CPU实际物理寄存器数量(评论6)
    • 引用:"Zen 4's integer register file has 224 registers, and the FP/vector register file has 192 registers"(评论6)
    • 引用:"This is how many registers the ISA exposes, but not the number of registers actually in the CPU"(评论6)
  3. x86架构的历史遗留问题

    • 讨论x86架构设计中的历史遗留问题(如MMX寄存器复用x87寄存器)(评论7,10)
    • 引用:"MMX probably reused the register file of x87 to save die space"(评论7)
    • 引用:"existing OSes didn't need changes for the new CPU"(评论10)
  4. x86架构的复杂性批评

    • 批评x86架构长期积累的复杂性(评论13)
    • 引用:"The amount of accumulated cruft in the x86 architecture is astounding"(评论13)
    • 引用:"The x86 architecture has only gotten uglier over time"(评论13)
  5. 技术细节讨论

    • 关于32/64位混合模式执行的争议(评论11)
    • 寄存器重命名机制的讨论(评论2,9)
    • 引用:"I'd love to know how many outstanding writes one can have"(评论2)
    • 引用:"am I the only one who was expecting an article about register renaming?"(评论9)
  6. 与其他架构比较

    • 简要提及RISC-V与x86/ARM的IP锁定差异(评论1)
    • 引用:"RISC-V is not [IP-locked]"(评论1)

总结:评论主要围绕x86架构的寄存器数量、设计历史和复杂性展开讨论,既有技术细节探讨,也有对架构设计的批评。不同观点呈现了x86架构的复杂性和历史演变带来的各种影响。