ZJZJ / ICS NOTES
项目总览整本阅读
COMPUTER SYSTEMS · PEKING UNIVERSITY

12 · 往年题导航与勘误

来源为用户指定的 公开仓库。本章原创概括题型与解题路径,不转载整卷。2025 第一次阶段测验与当前第 1~8 讲范围最接近,应当优先于旧式期中卷。

本次核对程度#

已下载 2012~2024 共 13 份带答案期中卷、2024 勘误、2025 两份阶段卷及期中复习细节。细读了 2025 第一次阶段卷的所有题目、2024 期中及勘误的主要题组、2022/2023 的浮点与机器代码相关题组;更早试卷用于逐页题型索引,不声称已逐题独立验算全部历史答案。2014 部分文本提取乱码,页码定位可以使用,但未据乱码推断精确公式。

2025 第一次阶段测验:逐题回查#

试卷与答案

题号 / PDF 页 考察点 复习位置 作答检查
1 / p.2 进制、按位与、逻辑非 02 值与编码解释要分开
2 / p.2 signed/unsigned 常量比较 02 先做通常算术转换
3 / p.2 short 扩展成 int 的字节 02、下方勘误 最高有效字节与最低地址字节不同
4 / p.2 ∞ 编码、float 字段解码 03 e、E、M 不混淆
5 / p.2 二进制最近偶数舍入 03 恰好一半才看保留最低位
6 / pp.2~3 整数转浮点、表达式恒等性 03 结合具体输入范围判断
7 / p.3 寄存器别名 04 32 位名与低字节名
8 / p.3 寄存器和数据内存访问计数 04 是否排除取指,地址寄存器也算访问
9 / p.3 比例寻址 04 先算地址,不读取内存值
10 / p.3 cmp/sub,test/and 05 是否保存运算结果
11 / p.4 setcc、零扩展、32 位写入 04、05 movzbl 的显式与隐含效果
12 / pp.4~5 分支与条件传送 05 按代码语义判断,别被函数名误导
13 / p.5 移位掩码循环 05 还原四要素并检查 n 的边界
14 / p.5 跳转表 05 索引从 0 起,每项跨度
15 / p.6 pop 操作次序 06 旧栈顶读取与 rsp 增量
16 / p.6 call/ret、参数与 rbx 保存 06 返回地址是 call 的下一条
17 / pp.6~7 局部变量寄存器/内存 06 取地址和题设“不高级优化”
18 / p.7 固定二维数组寻址 07 行跨度与元素宽度
19 / pp.7~8 VLA 传参 07 n 参与运行时乘法
20 / p.8 线性地址与二维数组 07 逐项定位元素再求和
21 / pp.8~9 结构体偏移反求维度 07 用对齐不等式联立求解
22 / p.9 混合参数、浮点转换 07 指针走通用寄存器,float 值走 XMM
23 / p.10 union 与大端 08 共享位串,不是转换数值
24 / p.10 缓冲区防护机制 08 源码、编译、OS 与硬件支持分开

从这份卷的覆盖看,不应只复习汇编填空:低字节寄存器、访问计数、零扩展的隐含效果、混合浮点 ABI 等边角知识都直接成为独立小问。各章已据此补齐。

近年旧期中:可迁移的方法#

年份与位置 主题 应学的方法
2024 第二大题 pp.10~12 内存字节→float、自定义 FP8、union 先还原端序,再分字段;数值转换与位重解释分开
2024 第三大题 pp.13~17 递归字符串变换、栈与跳转位移 逐条恢复语义,按每层有效字符串长度计递归深度
2024 第四大题 pp.18~21 PIPE 前递扩展 区分写入数据依赖与地址基址依赖
2024 第五大题 pp.22~23 相联度扩容、LRU、特殊不缓存规则 参数变化与逐次状态机模拟
2023 第二大题 pp.13~15 E5M2/E4M3、量化、运算次序 特殊值规则可被题目修改,不能套统一 FP8
2023 第三大题 pp.16~18 组合数递归与汇编填空 参数保留、双递归与活跃栈深度
2023 第四大题 pp.19~21 间接条件跳转、新指令、访存延迟 按结果可用阶段重新设计控制
2022 第二大题 p.10 1/3/4 格式、数量、反推格式 计算间距与范围,而非只背 FP32
2022 第三大题 pp.11~13 switch+结构体+链式间接寻址 表项、fall-through、字段偏移共同还原
2022 第四大题 pp.14~17 条件 pop 与流水线 条件失败时副作用、rsp 写回、冒险
2022 第五大题 pp.18~20 局部性与 cache 明确写分配与替换更新

2012~2021 题型索引#

以下是对已提取文本的主题定位,属于选题导航,不是每题答案校验报告。

年份 值得挑选的题组(PDF 页) 注意
2012 浮点 pp.4~5;排序/递归栈 pp.6~10;cache pp.11~12;链接 p.13 历史范围含链接,别推定本次也考
2013 表达式 p.5;机器代码 pp.6~9;流水线 p.10;新指令 p.11;cache p.13 有 32 位 Y86 语境
2014 数据表示 p.9;机器级/栈 pp.10~13;流水线 pp.14~17;cache p.18 部分 OCR 乱码,需直接看原页
2015 数据表示 pp.9~10;汇编/布局 pp.11~14;处理器 pp.15~18;cache pp.19~20 注意 IA-32 字长
2016 浮点/表达式 pp.6~8;机器代码 pp.9~11;PIPE pp.12~14;cache pp.15~16 延迟口径可能按题目另设
2017 数据表示 p.7;汇编 pp.8~9;处理器 pp.10~12;cache p.13 条件访存改变可用阶段
2018 位操作 pp.9~11;机器代码 pp.12~14;流水线 pp.15~17;cache pp.18~19;性能 pp.20~21 普通 char 的符号性要看假设
2019 整数/浮点 pp.8~9;机器代码与哨兵 pp.10~15;PIPE pp.16~18;victim cache pp.19~20;memory mountain pp.21~22 图题要看原图
2020 数据表示 pp.6~7;机器代码与栈 pp.8~11;leave/enter 新指令 pp.12~13;cache pp.14~16 失效时间是否包含命中探测有歧义
2021 数据表示 pp.11~12;递归栈 pp.13~16;处理器 pp.16~20;cache pp.21~23;优化 pp.24~26 周期数从 F 到 ret 完成,题设非常关键

全部原卷入口:期中目录。更早试卷不能用“同名题型”掩盖平台和标准差异。

应当明确区分的答案问题#

2025 第 3 题:“首字节”的歧义#

short -12 扩为 32 位 int 的位模式为 FFFFFFF4;小端内存从低到高为 F4 FF FF FF。原答案写 FF,只能与“最高有效字节”的解释一致。若按 show_bytes 从最低地址开始打印,第一个字节应为 F4。本手册保留这一判断依据,不把参考答案当作没有歧义的权威结论。

2024:建议处理与最终评分不是一回事#

2024 勘误文件 先列“建议”,最后另有“最终评分方式修改”。最终明确选择第 7 题 A/C、第 9 题 B/C 均算对;选择第 2 题以及 cache 第五题并没有按前文建议普遍改评分。阅读时应以最后的最终处理为准。

第 7 题的核心是结构体返回地址:调用时隐藏缓冲区指针可在 rdi,返回时在 rax;未交代时机就有歧义。第 9 题“转发次数”按通路事件还是按使用次数计数不明确,应写出口径。

cache 的特殊规则称“不缓存包含 10 倍数的块”,但示例答案仍缓存含地址 0 的块。数学上 0 也是 10 的倍数;按给定答案可推测意图是正的倍数。遇到此类自然语言规则应主动说明是否包含 0,而非把隐含约定当成通用规则。

2022 自定义浮点:“不溢出域内无舍入”与边界舍入#

1/3/4 格式最大有限值为 15.5,可精确表示整数 0~15;原题把 unsigned char 转换概括为“会溢出,不会舍入”。这里可理解为考察可表示范围内的整数均可精确编码;从完整 IEEE 转换过程看边界值仍需进行舍入并可能引发溢出,不宜把它泛化为所有转换都无需舍入逻辑。

同年 switch 题部分路径没有初始化 val 就写结构体,适合按给定汇编还原,不适合作为没有未定义行为的 C 编程范例。本手册的原理解释不依赖这些路径具有可移植结果。

参考笔记中需要纠正的说法#

容易误记的表述 本手册采用的准确版本
sizeof(int*) 是 int 的大小 sizeof(p) 是指针大小;sizeof(*p) 才是所指类型大小
数组名就是指针 数组是对象,很多表达式中发生退化;sizeof/& 等有例外
TMin 不满足位级 ~x+1 取负 模 2ʷ 恒等式仍成立;数学正值不可表示,C 有符号取负溢出
复杂声明可以靠数星号理解 必须从变量名按括号和 []/() 优先级解析
缓存容量 C=S×B 一般 C=S×E×B,仅 E=1 时可省 E
S、B、t 都必须为 2 的幂 通常 S、B 为 2 的幂;E 可非 2 的幂;t 是 tag 位数
mov 的源/目的顺序可混写 AT&T 源在前、目的在后
movs 的 s 是 symbol s 指 sign,符号扩展
l 后缀是 linguist l 指 longword;记忆法不能替代正式术语

这些结论来自位宽、类型和地址布局推导,并与教材/官方勘误交叉核对。引用仓库是为了补充题型和经验,不代表无条件认可所有笔记内容。

真题驱动的复习闭环#

做题时给每一空标一个错误类别:概念、类型、位宽、端序、地址/值、控制流、边界、计算。错后先写“错误前提是什么”,再找一个最小反例,最后做一题改变位宽或类型的变式。只有重做后能独立推出,才算真正掌握。