这篇文章单独记录 Arch Lab。它对应 CSAPP 第 4 章,重点不是应用层 C 程序,而是理解一条指令如何被 CPU 执行。

0. 目标

Arch Lab 的核心是 Y86-64。

Y86-64 是 CSAPP 设计的简化版 x86-64 指令集,用来学习:

  • 指令集架构
  • 顺序处理器
  • 流水线处理器
  • 数据冒险
  • 控制冒险
  • 性能优化

1. Part A:写 Y86-64 汇编

这一部分通常要求用 Y86-64 汇编实现几个简单函数。

重点:

  • 熟悉 Y86-64 指令
  • 理解寄存器使用
  • 理解栈和函数调用
  • 把 C 逻辑翻译成汇编

2. Part B:修改顺序处理器

这一部分通常要给 SEQ 处理器加新指令,例如 iaddq

重点:

  • 取指
  • 译码
  • 执行
  • 访存
  • 写回
  • PC 更新

要理解的是:

1
一条指令不是魔法,它会被拆成多个阶段流过处理器。

3. Part C:优化流水线处理器

这一部分通常要优化程序或流水线控制逻辑。

重点:

  • 流水线阶段
  • forwarding
  • stall
  • bubble
  • 分支预测
  • CPE

4. 嵌入式关联

Arch Lab 对嵌入式的价值:

  • 理解 CPU 如何执行指令
  • 理解流水线为什么会被分支和数据依赖影响
  • 为后续学习 ARM Cortex-M / Cortex-A 打基础
  • 理解性能不只由 C 代码决定,也和微架构有关

5. 复盘重点

学完后要能回答:

  • ISA 和 microarchitecture 有什么区别?
  • 一条指令执行时会经过哪些阶段?
  • 为什么流水线会出现冒险?
  • stall 和 bubble 分别在解决什么问题?
  • 为什么增加一条指令需要改处理器控制逻辑?