CSAPP 3.1 A Historical Perspective(历史视角)
2026/8/26 15:09:06 网站建设 项目流程

第 1 课(3.1 部分)|历史视角

最小前置知识

  • 1 byte = 8 bits;1 个十六进制数字表示 4 bits。
  • CPU 执行机器指令,而不是直接执行 C 源代码。
  • 本节暂不要求掌握补码细节、调用约定、栈帧和正式汇编语法。

3.1 A Historical Perspective

历史主线

x86 不是一次从零设计出的整洁体系,而是在长期向后兼容的要求下逐步扩展的:

  1. 8086 奠定早期 16 位体系的基础。
  2. i386 把体系扩展到 32 位,并引入现代操作系统使用的平坦寻址模型。
  3. AMD 首先推动 x86-64,随后成为 Intel、AMD 共同支持的主流 64 位体系。
  4. 后续处理器继续加入多核、超线程和向量指令,同时尽量保持旧机器代码可运行。

学习重点不是背诵全部型号和年份,而是理解:向后兼容让软件生态得以延续,也让 x86 ISA 留下许多历史痕迹。

“16 位、32 位、64 位”到底指什么

“位数”通常以通用寄存器和主要整数运算宽度来命名,但它不是处理器的唯一宽度:

阶段代表性寄存器地址模型关键变化
8086AX,16 位用“段:偏移”组合出 20 位地址,可寻址 1 MiB奠定早期 x86 指令编码和寄存器体系。
i386 / IA-32EAX,32 位;低 16 位仍叫AX32 位平坦地址空间,理论上 4 GiB更适合现代操作系统、分页和 Unix 类系统。
x86-64 / AMD64RAX,64 位;低 32/16/8 位仍可作为EAX/AX/AL使用采用 64 位架构模型,但具体处理器不必实现全部 64 位虚拟地址增加寄存器和 64 位模式,同时保留大量旧语义。

因此,8086 被称为 16 位处理器,并不表示它的所有部件都是 16 位:它使用 16 位通用寄存器,却能组合形成 20 位地址。类似地,x86-64 也仍能执行 8、16、32 位运算。

兼容性具体怎样保留下来

  1. 保留旧指令语义:新处理器继续理解许多旧机器码,而不是整体换一套编码。
  2. 扩展原有寄存器AX没有消失,而是成为EAXRAX的低位部分。
  3. 提供不同运行模式:处理器可支持早期 16 位环境、32 位保护模式,以及 x86-64 的长模式;操作系统决定实际提供哪些模式。
  4. 只保证向后方向:新处理器通常能运行旧指令,但使用 AVX 等新指令的程序不能反过来在不支持它们的旧处理器上运行。
  5. 硬件兼容不等于软件必然可运行:实际运行旧程序还取决于操作系统、可执行文件格式、库和驱动是否继续支持。

AMD 为什么能推动 x86-64

x86 是一套可由兼容处理器厂商实现的 ISA,不是“只有 Intel 才能实现的某一颗芯片”。AMD 选择在 IA-32 上继续扩展:增加 64 位运行模式、扩展通用寄存器并增加新寄存器,同时尽量保留 32 位软件生态。这套扩展通常称为 AMD64 或 x86-64。

市场接受这种兼容演进路线后,Intel 也实现了兼容扩展,书中早期名称为 EM64T,后来称 Intel 64。于是今天所说的 x86-64,通常同时覆盖 AMD64 和 Intel 64 这组高度兼容的体系。

Moore’s Law 旁注

读图时注意:

  • 纵轴是对数尺度。
  • 半对数图上近似直线,表示晶体管数量近似按指数增长。
  • 原图讨论的是晶体管数量趋势,不等于 CPU 频率或程序性能按同样速度翻倍。
  • 更多晶体管让处理器可以采用缓存、流水线、乱序执行和多核等更复杂的实现,但 ISA 合同可以继续保持兼容。

常见误区与疑问

  • Moore’s Law 描述的不是“程序性能定期翻倍”。

总结

x86 因长期向后兼容而带有历史积累。向后兼容延续了软件生态,也让 x86 ISA 保留了不同历史阶段的寄存器、运行模式和指令语义。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询