「指令系统」
核心定位:指令系统是CPU能执行的所有指令的集合,是硬件和软件的接口,所有考点都围绕「指令格式怎么设计」「操作数怎么找(寻址)」「指令系统怎么分类优化」三大核心展开。
一、指令系统 核心知识点
✅ 模块1:指令的基本概念(选择必考,填空,概念题,无计算)
-
指令的定义:计算机能识别并执行的二进制代码,一条指令对应一种基本操作;指令 =
操作码(OP) + 地址码(A),缺一不可。- 操作码(OP):表示指令要完成的操作(如加、减、取数、存数),位数决定指令条数。
- 地址码(A):表示操作数的地址/操作数本身,位数决定寻址范围,地址码的个数称为「地址数」。
-
指令字、机器字长、存储字长(★★★易混必考,选择题高频坑点)
- 指令字长:一条指令所占的二进制位数,可定长/变长;
- 机器字长:CPU一次能处理的二进制位数,决定寄存器、ALU的位数;
- 存储字长:存储器一个存储单元能存的二进制位数,等于存储单元的位数;
✔ 三者关系:可以相等/不等,指令字长可以是存储字长的整数倍(指令存不下时占多个存储单元);机器字长越长,CPU处理效率越高。
-
指令的执行过程(简答考点):取指 → 分析指令(译码) → 取操作数 → 执行操作 → 写结果。
-
指令系统的性能要求(简答):完备性、有效性、规整性、兼容性(向上兼容为主)。
✅ 模块2:指令格式设计(★★★ 重中之重,大题必考,综合设计题核心,占分最高)
该模块是指令系统的核心大题考点,每年必考「指令格式设计+指令条数计算」,所有题目都有固定解题步骤,无灵活考点,背规则就能做对。
(一)指令的基本格式分类(按「地址码的个数」分,5类,必背定义+特点+应用)
所有指令格式的本质:指令字长固定时,操作码位数 ↔ 地址码位数 是此消彼长的关系(核心原则,设计题第一依据)
-
零地址指令:格式
[操作码],无地址码- 特点:操作数来自堆栈栈顶,运算结果再压回栈顶;无需寻址,指令字长短。
- 应用:堆栈型计算机、无操作数指令(如停机、空操作)。
-
一地址指令:格式
[操作码] + [A1],1个地址码- 两种情况:① 单操作数指令(如取反、加1),A1是操作数地址;② 双操作数指令,隐含一个操作数在累加器ACC中,A1是另一个操作数地址,结果存回ACC。
- 应用:绝大多数算术运算指令,节省地址码位数。
-
二地址指令:格式
[操作码] + [A1] + [A2],2个地址码- 定义:A1=源操作数地址,A2=目的操作数地址,运算后结果存回A2(必考规则)。
- 特点:指令字长较长,寻址直观,是最常用的指令格式。
- 公式:指令字长 = 操作码位数 + 地址码1位数 + 地址码2位数。
-
三地址指令:格式
[操作码] + [A1] + [A2] + [A3],3个地址码- 定义:A1、A2是源操作数地址,A3是结果地址,运算后源操作数不变。
- 特点:指令字长最长,寻址灵活,不破坏源操作数,但存储空间利用率低。
-
多地址指令:多于3个地址码,仅用于特殊指令(如矩阵运算),考题极少。
(二)操作码的设计(2种方式,★★★ 大题必考,核心计算)
操作码是指令格式的核心,只有定长操作码和变长操作码两种设计方式,全部是计算题考点,两种方式会结合出题,必须吃透。
✔ 方式1:定长操作码(基础,送分题)
-
定义:所有指令的操作码位数固定,地址码位数也固定 → 指令字长定长。
-
核心公式(必考,背熟):若操作码位数为 n位 → 最多能设计
条指令。 -
特点:优点是译码速度快、硬件实现简单;缺点是指令条数固定,浪费操作码空间(若指令条数少于
,多余的操作码无意义)。 -
例:操作码占4位 → 最多设计
条指令。
✔ 方式2:变长操作码(★★★ 高频大题,难点+重点,必考)
-
定义:不同指令的操作码位数不同,地址码位数也不同 → 指令字长变长;地址码个数越少的指令,操作码位数越多(核心设计原则)。
- 设计逻辑:二地址指令用短操作码,单地址/零地址指令用长操作码,充分利用操作码的编码空间,在指令字长固定的前提下,设计出更多的指令条数。
-
核心规则(唯一的易错点,必考,必须记牢):短操作码不能是长操作码的前缀(也叫「前缀码规则/无歧义规则」),否则CPU译码时无法区分指令,会出错。
-
核心公式(分步计算,万能模板):已知:指令字长为L位,地址码每个占k位。
- 第一步:设计二地址指令:操作码位数 = L-2k,条数
; - 第二步:设计单地址指令:从二地址指令的操作码中拿出1个编码作为前缀,剩下的编码作为单地址的操作码,操作码位数增加k位,条数
(a为二地址指令实际使用的条数); - 第三步:设计零地址指令:同理,从单地址指令中拿出1个编码做前缀,条数
(b为单地址指令实际使用的条数)。
- 第一步:设计二地址指令:操作码位数 = L-2k,条数
-
特点:优点是指令条数多,编码效率高,节省存储空间;缺点是译码速度慢,硬件实现复杂。
(三)指令格式设计的核心原则(大题答题必写,采分点)
-
指令字长尽可能与存储字长、机器字长一致,减少访存次数;
-
地址码的位数要满足寻址范围的要求(地址码n位 → 寻址范围
); -
变长操作码遵循「前缀无歧义」规则;
-
常用指令(如加减、取数)用短操作码,减少译码时间。
✅ 模块3:寻址方式(★★★ 核心考点,选择+大题必考,计算+辨析双考点)
寻址方式:寻找操作数的地址/操作数本身的方式,是指令系统的第二核心;考点分两类:① 各类寻址方式的定义、特点、有效地址计算(计算必考);② 寻址方式的访存次数(选择题高频坑点);③ 寻址方式的对比辨析(选择/简答)。核心符号(统一约定,考题通用):
- EA:有效地址,操作数在存储器中的实际地址(必考计算);
- PC:程序计数器,存放下一条指令的地址;
- IR:指令寄存器,存放当前正在执行的指令;
- R:寄存器,®表示寄存器中的内容;
- (X):表示地址X中的内容(访存取数)。
(一)寻址方式的分类(按「操作数的位置」分,9类必考寻址方式,★★★ 背熟:定义+EA公式+访存次数+特点)
所有寻址方式按优先级排序:立即寻址 < 寄存器寻址 < 直接寻址 < 间接寻址 < 变址/基址/相对寻址,考频从高到低排列,公式全部必背,无例外!
▶ 第一类:找「操作数本身」(无EA,无访存,最快)
-
立即寻址
- 定义:地址码字段直接存放的是操作数本身(立即数),不是地址;
- 公式:无EA,操作数 = 地址码字段的内容;
- 访存次数:
次(不需要访问内存,指令里直接带数); - 特点:速度最快,无需寻址;缺点是操作数的位数受地址码位数限制,只能存小数值。
- 考题标识:地址码前加
#,如ADD A, #5表示立即数5。
▶ 第二类:找「寄存器中的操作数」(EA无意义,访存0次,速度第二快)
-
寄存器寻址
- 定义:地址码字段存放的是寄存器编号,操作数存放在该寄存器中;
- 公式:操作数 = ®;
- 访存次数:
次(寄存器在CPU内部,无需访存); - 特点:速度极快,寻址简单;缺点是寄存器数量有限,能存放的操作数少。
-
寄存器间接寻址(★★★ 必考计算,易错)
- 定义:地址码字段存放的是寄存器编号,寄存器中存放的是操作数的有效地址EA;
- 公式:
,操作数 = (EA); - 访存次数:
次(寄存器中是地址,需要访存一次取操作数); - 特点:寻址范围大(寄存器位数=机器字长,寻址范围
),速度比内存寻址快。
▶ 第三类:找「内存中的操作数」(有EA,需要访存,速度较慢,考点最多)
-
直接寻址(★★★ 必考)
- 定义:地址码字段直接存放的是操作数的有效地址EA;
- 公式:
,操作数 = (EA); - 访存次数:
次; - 特点:寻址简单,速度快;缺点是寻址范围小(地址码位数有限),地址固定,只能访问固定内存单元(无灵活性)。
-
间接寻址(★★★ 必考计算+易错点,分单级/多级)
- 定义:地址码字段存放的是一个内存地址X,X中的内容是操作数的有效地址EA(单级);若X中的内容还是地址,直到找到EA,为多级间接寻址;
- 公式:单级 →
,操作数=(EA);多级 → 依次访存直到找到EA; - 访存次数:单级间接寻址→2次;多级→n+1次(n为间接寻址的级数);【高频坑点:千万不要算成1次!】
- 特点:寻址范围极大,地址灵活;缺点是访存次数多,速度慢。
-
变址寻址(★★★ 必考,计算+辨析,大题高频)
- 定义:设置一个变址寄存器(IX),地址码字段存放位移量D,有效地址是「变址寄存器内容 + 位移量D」(模2加法,无进位);
- 公式:
; - 访存次数:
次; - 核心特点:变址寄存器的内容不变,位移量D可变;适合访问连续的内存单元(如数组、字符串),是循环程序的核心寻址方式;
- 补充:变址寄存器可以用PC代替,称为「PC变址寻址」。
-
基址寻址(★★★ 必考,计算+辨析,和变址寻址成对考,选择题高频)
-
定义:设置一个基址寄存器(BR),地址码字段存放位移量D,有效地址是「基址寄存器内容 + 位移量D」;
-
公式:
; -
访存次数:
次; -
核心特点:基址寄存器的内容可变,位移量D不变;适合多道程序设计、内存分配,用来确定程序在内存中的起始地址(基址),实现程序的重定位;
-
✔ 【必考辨析】变址寻址 vs 基址寻址(选择题年年考,背熟):
[跳转](# 📌 基址寻址 vs 变址寻址 核心对比表)
-
目的不同:变址寻址→找操作数(用户用),基址寻址→找程序在内存的位置(系统用);
-
可变对象不同:变址→D变,IX不变;基址→BR变,D不变;
-
寻址范围:变址→由IX决定,基址→由BR决定(通常BR位数更长,寻址范围更大)。
-
-
-
相对寻址(★★★ 必考,计算,选择题高频)
- 定义:以程序计数器PC为基准,地址码字段存放位移量D,有效地址是「PC的内容 + 位移量D」;
- 公式:
; - 访存次数:
次; - 核心特点:位移量D可正可负(向前/向后跳转),寻址范围是「PC±D」;适合转移指令(如跳转、分支),指令的地址与PC相关,实现程序的浮动(位置无关)。
-
堆栈寻址
- 定义:操作数存放在堆栈中,栈顶由堆栈指针(SP)指示,地址码字段无地址,隐含操作数在栈顶;
- 公式:EA=(SP),出栈/入栈后SP自动增减;
- 访存次数:1次;
- 特点:适合子程序调用、中断处理,无需寻址,操作简单。
(二)寻址方式的核心补充(选择题高频考点,避坑必备)
-
访存次数的判断规则:只要需要从内存中取地址/取操作数,就记一次访存;寄存器操作不算访存,立即数不算访存。
-
所有寻址方式中,速度排序:立即寻址 > 寄存器寻址 > 寄存器间接寻址 > 直接寻址 > 变址/基址/相对寻址 > 间接寻址(最慢)。
-
寻址范围排序:间接寻址 > 基址寻址 > 变址寻址 > 直接寻址。
✅ 模块4:指令的类型与功能(选择考点,背熟分类即可,无计算)
按指令的功能分类,考题以选择题为主,考「指令归属」,无需深入理解,记熟即可:
-
数据传送类指令:最常用,如MOV(传送)、LOAD(取数)、STORE(存数)、PUSH(入栈)、POP(出栈);核心是「复制数据」,不改变源操作数。
-
算术运算类指令:加减乘除、加1、减1、求补、比较等,运算结果通常存回目的地址。
-
逻辑运算类指令:与、或、非、异或、移位(算术移位/逻辑移位/循环移位),用于位操作、逻辑判断。
-
程序控制类指令:改变程序执行顺序,如跳转、分支、调用、返回、停机,必用相对寻址/直接寻址。
-
输入输出类指令:实现CPU与外设的数据交换,分「独立编址(专用I/O指令)」和「统一编址(用访存指令)」。
-
特权指令:只能由操作系统执行,如关中断、清内存、启动外设,用户程序不能执行。
✅ 模块5:CISC与RISC(★★★ 高频选择+简答,必考,无计算,背熟即可)
考点:两类指令系统的定义、特点、区别,选择题考「判断对错」,简答题考「对比分析」,是性价比最高的考点,背熟就拿分。
1. CISC:复杂指令系统计算机(Complex Instruction Set Computer)
-
定义:指令系统庞大、复杂,指令条数多(几百条),指令格式多样,寻址方式丰富;
-
代表:x86架构(Intel/AMD)、传统的小型机、大型机;
-
核心特点(必背):① 指令条数多,格式不规整;② 寻址方式多;③ 指令字长变长;④ 大部分指令执行时间长,执行速度慢;⑤ 硬件复杂,编译器简单。
2. RISC:精简指令系统计算机(Reduced Instruction Set Computer)
-
定义:指令系统精简、简单,指令条数少(几十条),指令格式规整,寻址方式少;
-
代表:ARM架构、MIPS架构、RISC-V架构;
-
核心特点(必背):① 指令条数少,格式定长;② 寻址方式极少(只有直接/寄存器寻址);③ 指令字长固定;④ 所有指令在一个时钟周期内完成,执行速度快;⑤ 硬件简单,编译器复杂;⑥ 大量使用寄存器,减少访存次数。
3. CISC与RISC的核心区别(★★★ 选择题/简答必考,表格整理,一目了然)
| 对比维度 | CISC | RISC |
|---|---|---|
| 指令条数 | 多(几百条) | 少(几十条) |
| 指令格式 | 变长、不规整 | 定长、规整 |
| 寻址方式 | 丰富(多种) | 极少(2~3种) |
| 指令执行时间 | 长短不一,多数>1个时钟周期 | 统一,1个时钟周期完成 |
| 寄存器数量 | 少 | 多(大量通用寄存器) |
| 硬件复杂度 | 高 | 低 |
| 编译难度 | 低 | 高 |
| 执行效率 | 低 | 高 |
二、指令系统 三大核心题型(解题模板+例题+答案,必考,全覆盖)
指令系统的考题无偏题、怪题,所有题目都归为三类,全部有固定解题步骤,掌握模板后,所有题目都能套用,零失误!
标注:★★★ = 大题必考,★★ = 选择高频,★ = 低频填空/简答
✅ 题型1:指令格式设计+指令条数计算(★★★ 大题必考,分值最高,核心压轴题)
【题型特征】
已知:指令字长、地址码位数、地址数(二地址/单地址/零地址),要求:① 设计指令格式;② 计算各类指令的最大条数;③ 变长操作码的扩展设计。
【万能解题步骤(死记,按顺序写,采分点齐全)】
-
确定指令字长L,地址码每个占k位,计算定长操作码的位数:操作码位数 = L - n×k(n为地址数);
-
计算定长操作码的最大指令条数:
; -
若要求设计变长操作码,按「二地址→单地址→零地址」的顺序扩展,遵循「前缀无歧义」规则,分步计算每类指令的最大条数;
-
画出指令格式图(操作码+地址码,标注位数),是大题的必写采分点!
【经典例题(408真题改编,必考)】
已知:指令字长为16位,每个地址码占4位,试设计:① 定长操作码的二地址、单地址、零地址指令的最大条数;② 变长操作码,若二地址指令有10条,单地址指令有16条,求零地址指令的最大条数。解:
① 定长操作码设计:
-
二地址指令:操作码=16-4-4=8位 → 最大条数=
条; -
单地址指令:操作码=16-4=12位 → 最大条数=
条; -
零地址指令:操作码=16位 → 最大条数=
条。
② 变长操作码设计(核心步骤):
-
步骤1:二地址指令,操作码8位,最大256条,实际用10条 → 剩余
个编码作为单地址的前缀; -
步骤2:单地址指令,操作码增加4位,每条前缀可扩展
条 → 最大条数= 条,实际用16条 → 剩余 个编码作为零地址的前缀; -
步骤3:零地址指令,操作码再增加4位,每条前缀可扩展
条 → 零地址最大条数= 条。
✅ 题型2:寻址方式计算题(★★★ 选择+大题必考,核心计算)
【题型特征】
已知:寻址方式、寄存器/PC/地址码的内容,要求:① 计算有效地址EA;② 计算操作数的值;③ 判断访存次数。
【万能解题步骤】
-
识别寻址方式,写出对应的EA计算公式(核心,背熟公式);
-
代入已知数值,计算EA;
-
若求操作数:操作数=(EA)(访存取数);
-
按规则判断访存次数,标注清楚。
【经典例题(高频考题,全覆盖考点)】
已知:变址寄存器IX的内容为1000H,位移量D为0010H,基址寄存器BR的内容为2000H,PC的内容为3000H,地址码字段的内容为4000H。分别计算:① 变址寻址的EA;② 基址寻址的EA;③ 相对寻址的EA;④ 直接寻址的EA;⑤ 寄存器间接寻址(寄存器R内容为5000H)的EA。解:
① 变址寻址:
② 基址寻址:
③ 相对寻址:
④ 直接寻址:
⑤ 寄存器间接寻址:
寄存器寻址比较特殊 —— 它不需要计算有效地址(EA),因为操作数直接存放在寄存器里
✅ 题型3:CISC/RISC+寻址方式辨析题(★★ 选择必考,简答高频)
【题型特征】
选择题:给出描述,判断是哪种寻址方式/是CISC还是RISC;简答题:对比两种寻址方式(变址/基址)、对比CISC和RISC。
【解题技巧】
-
寻址方式辨析:抓住核心特点(如立即寻址是操作数本身,间接寻址访存2次);
-
CISC/RISC辨析:抓住指令条数、格式、执行速度三个核心维度;
-
简答题:按表格的维度逐条写,采分点清晰,不丢分。
三、指令系统 易错点+避坑指南(选择题高频丢分点,必看)
-
变长操作码的前缀规则:短操作码不能是长操作码的前缀,这是唯一的设计规则,违反则错误;
-
访存次数的计算:寄存器间接寻址→1次,单级间接寻址→2次,多级→n+1次,千万不要算错!
-
变址和基址的区别:变址是用户用,找操作数;基址是系统用,找程序位置,可变对象相反;
-
指令条数的计算:定长操作码是
,变长是分步扩展,不是直接相加; -
立即寻址的地址码:是操作数,不是地址,无EA;
-
RISC的核心特征:指令定长、单周期执行、大量寄存器,不是指令条数少这么简单。
📌 基址寻址 vs 变址寻址 核心对比表
| 对比维度 | 基址寻址 | 变址寻址 |
|---|---|---|
| 核心公式 | ( EA = (BR) + D )(BR:基址寄存器,D:位移量) | ( EA = (IX) + A )(IX:变址寄存器,A:形式地址) |
| 谁变谁不变 | 程序执行时:BR固定,D可变 程序加载时:BR可变,D固定 |
程序执行时:IX可变,A固定 |
| 主要用途 | 实现程序重定位、多道程序设计、内存分配 | 实现数组/字符串等连续数据的遍历访问 |
| 视角 | 面向操作系统/内存管理 | 面向用户程序/数据访问 |
| 访存次数 | 1次 | 1次 |
| 寄存器权限 | BR内容由操作系统设置,用户不可直接修改 | IX内容可由用户指令直接修改 |
💡 关键记忆点
-
基址寻址:核心是**“基地址”**,用来给程序分配一段连续内存,程序运行时基地址固定,保证内部地址稳定;程序切换时基地址由系统修改,实现重定位。
-
变址寻址:核心是**“偏移遍历”**,形式地址固定(数组首地址),变址寄存器作为索引,每次+1就能访问下一个数组元素。
✅ 一句话区分
-
基址寻址:程序搬家(换内存位置)用的
-
变址寻址:遍历数组(访问连续数据)用的