计算机组成原理第 4 章:指令系统总览

这一页只负责导航,不装内容。每个节号点进去就是那一节的完整讲义。

前三章都在硬件内部:数据怎么编码(第 2 章)、运算器怎么算(第 2 章)、存储器怎么组织(第 3 章)。第 4 章换到了另一边——软件怎么指挥硬件。

这一章的中心是一份契约:指令集体系结构(ISA)。全章结构就是把这份契约逐条展开:

先立契约本身与指令的编码(4.1)→ 再说指令怎么找到操作数(4.2)→ 然后看一段 C 程序落到指令上是什么样(4.3)→ 最后比较两种签契约的哲学(4.4)

贯穿全章有两条隐线,值得单独盯住:

① 一条指令必须自己携带自己的长度信息。 用前缀码携带不花任何存储空间(长度由操作码唯一推出),但代价是取指与译码从此串行——第 2 条指令的起点要等第 1 条译完。这条线从 4.1.4 扩展操作码起,经 4.4.1 的长度预译码,终结于 4.4.2”RISC 为什么选定长指令”。它是本章唯一一处卡点(#74)的正面答案。

② 一个地址从源码走到存储单元,要经过六层翻译。 符号 → 形式地址 → EA(逻辑地址) → 线性地址 → 物理地址 → Cache 划分 / 主存译码。相邻两层是”输出→输入”,不是同一层的两种做法——因此不能比较优劣、不能互相替代。这条线在 4.2.1 立起,往前接第 3 章的 3.3.3 / 3.5.3 / 3.6,往后接 OS 第 3 章。4.2.2 的五条连续提问全部是跨层比较造成的,这条线就是为它们准备的。

另外,第 1 章的性能公式 在 4.4.3 第一次被用来做定量判断:CISC 与 RISC 在三个因子上方向恰好相反,所以只给一个因子问快慢,答案是”无法判断”。

章节导航

4.1 指令系统 ✅

节页面一句话
4.1.1指令集体系结构ISA / 微体系结构 / ABI 三层;判据是”改了老程序还能不能跑”
4.1.2指令的基本格式机器字长 / 存储字长 / 指令字长三者独立;访存次数模板
4.1.3定长操作码指令格式优点全在时序:一级译码、字段固定、PC 增量恒定
4.1.4扩展操作码指令格式前缀码;递推 =(上层剩余);长度由操作码隐含
4.1.5指令的操作类型这张表就是数据通路的功能清单

4.2 指令的寻址方式 ✅

节页面一句话
4.2.1指令寻址和数据寻址两个”寻址”算法同一套、去处不同;地址翻译六层图
4.2.2常见的数据寻址方式十种 EA 与访存次数;偏移三兄弟看”哪一半是变量”

4.3 程序的机器级代码表示 ✅

节页面一句话
4.3.1常用汇编指令介绍LEA 取地址不取内容;两种汇编格式看 % $
4.3.2选择语句的机器级表示条件是取反的;跳转表三步
4.3.3循环语句的机器级表示三种循环塌缩成 do-while;归纳变量替换
4.3.4过程调用的机器级表示四件事只有一件归 ISA;[ebp+8] 是基址寻址实战

4.4 CISC和RISC的基本概念 ✅

节页面一句话
4.4.1复杂指令系统计算机(CISC)三条历史约束;复杂指令值不值看硬件有没有专用通路
4.4.2精简指令系统计算机(RISC)精简的是每条指令的功能;Load/Store 让流水段整齐
4.4.3CISC 和 RISC 的比较三因子方向相反 → 只给一个因子答”无法判断”

本章高频边界

每一条点进去就是那一节里正面辨析的位置。完整清单(76 条)见 名词库末尾。

#边界在哪
1Cache / 流水线 / 控制器实现方式不属于 ISA4.1.1
2调用约定 / 栈帧布局 / 目标文件格式属于 ABI 不属于 ISA4.1.1
3汇编语法不属于 ISA,两种格式机器码相同4.1.1
4取指访存次数 = 指令字长 ÷ 存储字长(存储字长 = MDR 位数)4.1.2
5一地址指令:双操作数型 2 次、读改写型 3 次4.1.2
6二地址指令结果覆盖第一个操作数4.1.2
7定长指令字 ≠ 定长操作码,两个维度独立4.1.2
8 是最多, 才是至少4.1.3
9扩展操作码不改变指令字长4.1.4
10三地址指令码短是因为地址字段挤占,不是使用频率4.1.4
11零地址那一层不留窗口,所以是 16 条不是 15 条4.1.4
12变长指令的长度由操作码隐含,不占额外位;代价在译码串行4.1.4
13传送类不改标志位;CMP/TEST 只改标志位不写结果4.1.5
14RET 与 IRET 不可互换(后者恢复 PSW 与特权级)4.1.5
15TRAP 是指令、同步、自愿,不是异步事件4.1.5
16统一编址时没有 I/O 指令也能做 I/O4.1.5
17顺序寻址增量 = 指令字长 ÷ 编址单位,不是 14.2.1
18跳跃寻址复用数据寻址的那十种,不是独立算法4.2.1
19地址翻译六层,相邻两层不可比较也不可替代4.2.1
20立即寻址没有 EA;立即数是补码4.2.2
21间接寻址访存 2 次,寄存器间接 1 次4.2.2
22相对寻址的基准是已增量的 PC(下一条指令地址)4.2.2
23基址:寄存器常、 变;变址: 常、寄存器变4.2.2
24变址寄存器存下标,数组首地址在形式地址里(易记反)4.2.2
25段寄存器不是基址寄存器的实现,它在下一层4.2.2
26程序浮动有三种机制:静态重定位 / 基址寻址 / 相对寻址4.2.2
27前变址与后变址不等价4.2.2
28LEA 从不访存,方括号在这里不表示取内容4.3.1
29Intel 第一操作数是目的,AT&T 是源;机器码相同4.3.1
30shl=sal 是一条指令,shr 与 sar 必须分家4.3.1
31CF 管无符号溢出、OF 管有符号溢出,硬件两个都算4.3.1
32编译器把条件取反——看到 jle,源码多半写的是 >4.3.2
33g/l 有符号、a/b 无符号4.3.2
34跳转表越界检查必须用无符号 ja(一次挡两侧)4.3.2
35cmov 的两个分支都会被求值,有副作用时不可用4.3.2
36循环回跳给时间局部性,顺序访问给空间局部性(易接反)4.3.3
37for 与 while 的唯一实质差别是 continue 的落点4.3.3
38归纳变量替换:汇编里找不到 i 是正常的4.3.3
39call 压的是下一条指令的地址4.3.4
40ESP 变、EBP 不变;栈向低地址生长4.3.4
41参数区属于调用者的栈帧;叶子函数可能没有栈帧4.3.4
42调用约定属于 ABI;cdecl 调用者清栈才支持可变参数4.3.4
43微程序 / 硬布线都是典型搭配,不是定义4.4.3
44RISC 精简的是每条指令的功能,不是指令条数4.4.2
45CPI≈1 是吞吐口径,不是延迟口径4.4.2
46同一程序 RISC 的指令条数反而更多(多 20%~40%)4.4.3
47只给一个因子问快慢 → “无法判断”4.4.3
48现代 x86:ISA 仍是 CISC,微架构是 RISC 式4.4.1

计算模板

本章的计算题种类不多但极固定,考前按这张表逐条过一遍。

#题型模板在哪
1取指访存次数指令字长 ÷ 存储字长4.1.2
2总访存次数取指 + 取操作数(查十种表)+ 存结果4.2.2
3定长操作码位数;容量 4.1.3
4地址字段位数4.1.3
5寄存器个数 / 直接寻址范围4.1.3
6扩展操作码各层条数(上层总数 − 上层已用),正推反推同一式4.1.4
7扩展方案验算Kraft:, 用尽(超纲,好用)4.1.4
8变长编码期望长度,长度免费(由操作码隐含)4.1.4
9顺序寻址 PC 增量指令字长 ÷ 编址单位4.2.1
10相对转移目标地址已增量, 为补码4.2.2
11相对寻址转移范围4.2.2
12寻址方式种类数寻址特征 位 → 最多 种4.2.1
13栈帧偏移定位[ebp+8]=第一参数、[ebp+4]=返回地址、[ebp-4]=第一局部变量4.3.4
14CPU 时间,三因子必须齐全4.4.3

复习顺序

  1. 4.1.1 先把 ISA / 微体系结构 / ABI 三层分清——本章一半的判断题出在这里
  2. 4.1.2 三个字长 + 访存次数模板,后面所有计算题的地基
  3. 4.1.3 定长操作码的容量公式,顺手记住”最多 / 至少”是两问
  4. 4.1.4 扩展操作码递推推熟;顺带把”长度从哪来”这条主线读完
  5. 4.1.5 按”访存吗 / 改标志位吗 / 改 PC 吗”三问过一遍指令类型
  6. 4.2.1 把地址翻译六层图记住——它是 4.2.2 全部困惑的解药
  7. 4.2.2 十种 EA 与访存次数默写;偏移三兄弟只记”哪一半是变量”
  8. 4.3.1 先认格式(% $),再把 LEA 钉死
  9. 4.3.2 建立”条件是取反的”这个读汇编反射
  10. 4.3.3 认守卫、认归纳变量替换
  11. 4.3.4 栈帧图画一遍,偏移量背下来
  12. 4.4.1 → 4.4.2 → 4.4.3 最后用性能公式收口

大题优先级:4.3(读汇编反推 C)> 4.1.4(扩展操作码)> 4.2.2(EA 与访存次数)> 4.4.3(性能定量比较)。

说明

本章 14 页,一个三级节一页,节号以 王道 2026 教材目录为准。

归档复核发现一处节名错误:旧索引把 4.1 写成”指令格式”,教材的节名是”指令系统”;旧索引的 4.4 写成”CISC 和 RISC”,教材是”CISC和RISC的基本概念”。旧的四页概念页本身按主题命名、不带节号,因此没有节号错配。真正需要重排的是内容分布:4.1.5 指令的操作类型在旧页里只是一小节列表,现在独立成页并接上了第 5 章数据通路;4.3 的四个三级节旧页混在一篇里,现在按选择 / 循环 / 过程调用拆开。

本章 10 条原始提问全部归位,密度和分布见 原始提问档案(本地资料)。5 条挤在 4.2.2 且是同一个困惑的连续追问——这直接催生了本章第二条隐线。

链接