这七张卡片覆盖了三年真题里全部需要算数的题型。
$rd, $rs, $rt$rt, $rs, imm$rd, $rt, sha 源是 rt,rs 填 0星数 = 出现在笔试里的可能性。标「自学」的是讲义没讲、tutorial 自己让你查 Wikipedia 的题。
| 题 | 一句话结论 | 权重 |
|---|---|---|
| T1-1 | 小端减一 TM:S0 读 0 写 1 右移找第一个 1;找到写 0 停;撞空白说明 n=0,进 S1 一路写 0 左移复原。3 个状态。 | ★★ |
| T1-2 | RAM 求最大:t 初值取 mem[0](不能取 0,否则全负数出错),i 从 1 起,结尾 mem[reg[0]] ← t。全程不动 reg[0]。 | ★★ |
| T1-3 | PM 压成 3 字段:f 字段节点 → 深度 ⌈log₂f⌉ 的二叉树,叶子存原字段。字段号是编译期常数,路径写死,无需指针算术。开销常数倍。 | ★★ |
| T1-4 | 打孔卡:一张 80 字节。缺点全部源于程序不是可寻址数据;冯·诺依曼架构是对此的回答。 | ★ 偏 |
| T2-1 | TM 编码:状态编号 0…N−1(0 初始、N−1 终止)+ 固定宽度字段 + 规范顺序让位置代替键 + 一元码头部自定界。长度 O(N log N)。 | ★★ |
| T2-2 | 分离 I/D cache:首要原因是取指与访存的结构冒险(一个端口撞车);其次访问模式不同、I-cache 免写回逻辑、互不污染、布局更近。等于在 L1 做哈佛架构。 | ★★★ |
| T2-3 | 2 位饱和计数器:迟疑让循环退出那次只把 11 拉到 10,最高位不变 ⇒ 每遍只错 1 次而非 2 次。 | ★ 自学 |
| T2-4 | CPU 必须存 PC:跳转动作本身毁掉 PC;没有任何指令能读 PC;保存与跳转必须原子。三条理由各自都够。 | ★★ |
| T2-5 | 中断返回指令:只读标志位软件写不回去,需要一条被特许、只能复原快照、且原子完成的指令。与 T2-4 是同一原理的两半。 | ★★ |
| T3-P1 | 65 级 对 22 级;Θ(n) 对 Θ(log n);面积 Θ(n) 对 Θ(n log n);下树回传是为了避免 32 的扇出。 | ★★★ |
| T3-P2-1 | 带 Enable 的 D 触发器 = D 前面加一个 2:1 MUX,另一路接 Q 自反馈。共 24 个晶体管。 | ★★ |
| T3-P2-2 | 计数器:Enable = 低位全 1,D = ¬Q。这就是 2025-26 Q1(c) 状态机的骨架。 | ★★★ |
| T3-P2-3 | PC = 32 个带 Enable 的 FF + 快加法器(第二输入 1)成环。Enable 用于停顿,跳转要再加一个 MUX。 | ★ |
| T4-1a | 0x00000000 = sll $0,$0,0 = NOP。全零字无害是刻意设计:跑飞进清零内存只会滑过去。 | ★★★ |
| T4-1b | 0x8c82fffc = lw $2, -4($4) (0xfffc 符号扩展 = −4) | ★★★ |
| T4-2a | sw $1,-4($4) = 0xAC81FFFC 与 1b 低 16 位完全相同,只差 opcode 和 rt。 | ★★★ |
| T4-2b | add $3,$1,$4 = 0x00241820 | ★★★ |
| T4-3 | shamt 扩容:(64 − 3) × (32 − 1) = 1891 条。定长编码的浪费同时也是扩展余量。 | ★★ |
| T4-4 | 递归 eq/lt:eq = eqH·eqL,lt = ltH + eqH·ltL,32 位 11 级。与快加法器同构:eq↔propagate,lt↔generate。 | ★★★ |
| T5-1 | 分支预测准确率 a = 90%。盈亏平衡 60%,理论上限 1.3636。1 位预测器 80% 只够 1.15×。 | ★★★ |
| T5-2 | 700 ms。每文件 5 + 2 = 7 ms,×100。「每个 1 MB」是干扰项——没给传输率。 | ★★★ |
| T5-3 | 文档→闪存;备份→磁带(10 TB/卷,顺序访问不碍事);游戏→光盘分发 / SSD 运行;相机→SD(抗震·小·省电);医学影像→光盘 R(归档寿命 + 不可篡改)+ 磁带。 | ★★ |
sra $rd,$rt,sha,rs 字段填 0。offset = extsign(imm)·4 才除;写 imm 就直接用。mem[reg[j]]),比较要拆成「算 0/1」+「判零跳转」两步。三套照着做就不会错的流程。紧张的时候不要临场想,按步骤走。
000000 就去看低 6 位 funct。start = max(前一条 start + 1, 依赖就绪时刻)