指令系统

「指令系统」

核心定位:指令系统是CPU能执行的所有指令的集合,是硬件和软件的接口,所有考点都围绕「指令格式怎么设计」「操作数怎么找(寻址)」「指令系统怎么分类优化」三大核心展开。


一、指令系统 核心知识点

✅ 模块1:指令的基本概念(选择必考,填空,概念题,无计算)

  1. 指令的定义:计算机能识别并执行的二进制代码,一条指令对应一种基本操作;指令 = 操作码(OP) + 地址码(A),缺一不可。

    • 操作码(OP):表示指令要完成的操作(如加、减、取数、存数),位数决定指令条数
    • 地址码(A):表示操作数的地址/操作数本身,位数决定寻址范围,地址码的个数称为「地址数」。
  2. 指令字、机器字长、存储字长(★★★易混必考,选择题高频坑点)

    • 指令字长:一条指令所占的二进制位数,可定长/变长
    • 机器字长:CPU一次能处理的二进制位数,决定寄存器、ALU的位数;
    • 存储字长:存储器一个存储单元能存的二进制位数,等于存储单元的位数;
      ✔ 三者关系:可以相等/不等,指令字长可以是存储字长的整数倍(指令存不下时占多个存储单元);机器字长越长,CPU处理效率越高。
  3. 指令的执行过程(简答考点):取指 → 分析指令(译码) → 取操作数 → 执行操作 → 写结果。

  4. 指令系统的性能要求(简答):完备性、有效性、规整性、兼容性(向上兼容为主)。

✅ 模块2:指令格式设计(★★★ 重中之重,大题必考,综合设计题核心,占分最高)

该模块是指令系统的核心大题考点,每年必考「指令格式设计+指令条数计算」,所有题目都有固定解题步骤,无灵活考点,背规则就能做对。

(一)指令的基本格式分类(按「地址码的个数」分,5类,必背定义+特点+应用)

所有指令格式的本质:指令字长固定时,操作码位数 ↔ 地址码位数 是此消彼长的关系(核心原则,设计题第一依据)

  1. 零地址指令:格式 [操作码],无地址码

    • 特点:操作数来自堆栈栈顶,运算结果再压回栈顶;无需寻址,指令字长短。
    • 应用:堆栈型计算机、无操作数指令(如停机、空操作)。
  2. 一地址指令:格式 [操作码] + [A1],1个地址码

    • 两种情况:① 单操作数指令(如取反、加1),A1是操作数地址;② 双操作数指令,隐含一个操作数在累加器ACC中,A1是另一个操作数地址,结果存回ACC。
    • 应用:绝大多数算术运算指令,节省地址码位数。
  3. 二地址指令:格式 [操作码] + [A1] + [A2],2个地址码

    • 定义:A1=源操作数地址,A2=目的操作数地址,运算后结果存回A2(必考规则)。
    • 特点:指令字长较长,寻址直观,是最常用的指令格式。
    • 公式:指令字长 = 操作码位数 + 地址码1位数 + 地址码2位数。
  4. 三地址指令:格式 [操作码] + [A1] + [A2] + [A3],3个地址码

    • 定义:A1、A2是源操作数地址,A3是结果地址,运算后源操作数不变。
    • 特点:指令字长最长,寻址灵活,不破坏源操作数,但存储空间利用率低。
  5. 多地址指令:多于3个地址码,仅用于特殊指令(如矩阵运算),考题极少。

(二)操作码的设计(2种方式,★★★ 大题必考,核心计算)

操作码是指令格式的核心,只有定长操作码变长操作码两种设计方式,全部是计算题考点,两种方式会结合出题,必须吃透。

✔ 方式1:定长操作码(基础,送分题)
  1. 定义:所有指令的操作码位数固定,地址码位数也固定 → 指令字长定长。

  2. 核心公式(必考,背熟):若操作码位数为 n位 → 最多能设计 条指令。

  3. 特点:优点是译码速度快、硬件实现简单;缺点是指令条数固定,浪费操作码空间(若指令条数少于,多余的操作码无意义)。

  4. 例:操作码占4位 → 最多设计 条指令。

✔ 方式2:变长操作码(★★★ 高频大题,难点+重点,必考)
  1. 定义:不同指令的操作码位数不同,地址码位数也不同 → 指令字长变长;地址码个数越少的指令,操作码位数越多(核心设计原则)。

    • 设计逻辑:二地址指令用短操作码,单地址/零地址指令用长操作码,充分利用操作码的编码空间,在指令字长固定的前提下,设计出更多的指令条数
  2. 核心规则(唯一的易错点,必考,必须记牢):短操作码不能是长操作码的前缀(也叫「前缀码规则/无歧义规则」),否则CPU译码时无法区分指令,会出错。

  3. 核心公式(分步计算,万能模板):已知:指令字长为L位,地址码每个占k位。

    • 第一步:设计二地址指令:操作码位数 = L-2k,条数
    • 第二步:设计单地址指令:从二地址指令的操作码中拿出1个编码作为前缀,剩下的编码作为单地址的操作码,操作码位数增加k位,条数 (a为二地址指令实际使用的条数);
    • 第三步:设计零地址指令:同理,从单地址指令中拿出1个编码做前缀,条数 (b为单地址指令实际使用的条数)。
  4. 特点:优点是指令条数多,编码效率高,节省存储空间;缺点是译码速度慢,硬件实现复杂。

(三)指令格式设计的核心原则(大题答题必写,采分点)

  1. 指令字长尽可能与存储字长、机器字长一致,减少访存次数;

  2. 地址码的位数要满足寻址范围的要求(地址码n位 → 寻址范围);

  3. 变长操作码遵循「前缀无歧义」规则;

  4. 常用指令(如加减、取数)用短操作码,减少译码时间。

✅ 模块3:寻址方式(★★★ 核心考点,选择+大题必考,计算+辨析双考点)

寻址方式:寻找操作数的地址/操作数本身的方式,是指令系统的第二核心;考点分两类:① 各类寻址方式的定义、特点、有效地址计算(计算必考);② 寻址方式的访存次数(选择题高频坑点);③ 寻址方式的对比辨析(选择/简答)。核心符号(统一约定,考题通用):

  • EA:有效地址,操作数在存储器中的实际地址(必考计算);
  • PC:程序计数器,存放下一条指令的地址;
  • IR:指令寄存器,存放当前正在执行的指令;
  • R:寄存器,®表示寄存器中的内容;
  • (X):表示地址X中的内容(访存取数)。

(一)寻址方式的分类(按「操作数的位置」分,9类必考寻址方式,★★★ 背熟:定义+EA公式+访存次数+特点)

所有寻址方式按优先级排序:立即寻址 < 寄存器寻址 < 直接寻址 < 间接寻址 < 变址/基址/相对寻址,考频从高到低排列,公式全部必背,无例外!

▶ 第一类:找「操作数本身」(无EA,无访存,最快)
  1. 立即寻址

    • 定义:地址码字段直接存放的是操作数本身(立即数),不是地址;
    • 公式:无EA,操作数 = 地址码字段的内容;
    • 访存次数: 次(不需要访问内存,指令里直接带数);
    • 特点:速度最快,无需寻址;缺点是操作数的位数受地址码位数限制,只能存小数值。
    • 考题标识:地址码前加 #,如 ADD A, #5 表示立即数5。
▶ 第二类:找「寄存器中的操作数」(EA无意义,访存0次,速度第二快)
  1. 寄存器寻址

    • 定义:地址码字段存放的是寄存器编号,操作数存放在该寄存器中;
    • 公式:操作数 = ®;
    • 访存次数: 次(寄存器在CPU内部,无需访存);
    • 特点:速度极快,寻址简单;缺点是寄存器数量有限,能存放的操作数少。
  2. 寄存器间接寻址(★★★ 必考计算,易错)

    • 定义:地址码字段存放的是寄存器编号,寄存器中存放的是操作数的有效地址EA
    • 公式:,操作数 = (EA);
    • 访存次数: 次(寄存器中是地址,需要访存一次取操作数);
    • 特点:寻址范围大(寄存器位数=机器字长,寻址范围),速度比内存寻址快。
▶ 第三类:找「内存中的操作数」(有EA,需要访存,速度较慢,考点最多)
  1. 直接寻址(★★★ 必考)

    • 定义:地址码字段直接存放的是操作数的有效地址EA
    • 公式:,操作数 = (EA);
    • 访存次数: 次;
    • 特点:寻址简单,速度快;缺点是寻址范围小(地址码位数有限),地址固定,只能访问固定内存单元(无灵活性)。
  2. 间接寻址(★★★ 必考计算+易错点,分单级/多级)

    • 定义:地址码字段存放的是一个内存地址X,X中的内容是操作数的有效地址EA(单级);若X中的内容还是地址,直到找到EA,为多级间接寻址;
    • 公式:单级 → ,操作数=(EA);多级 → 依次访存直到找到EA;
    • 访存次数:单级间接寻址→2次多级→n+1次(n为间接寻址的级数);【高频坑点:千万不要算成1次!】
    • 特点:寻址范围极大,地址灵活;缺点是访存次数多,速度慢。
  3. 变址寻址(★★★ 必考,计算+辨析,大题高频)

    • 定义:设置一个变址寄存器(IX),地址码字段存放位移量D,有效地址是「变址寄存器内容 + 位移量D」(模2加法,无进位);
    • 公式:
    • 访存次数: 次;
    • 核心特点:变址寄存器的内容不变,位移量D可变;适合访问连续的内存单元(如数组、字符串),是循环程序的核心寻址方式;
    • 补充:变址寄存器可以用PC代替,称为「PC变址寻址」。
  4. 基址寻址(★★★ 必考,计算+辨析,和变址寻址成对考,选择题高频)

    • 定义:设置一个基址寄存器(BR),地址码字段存放位移量D,有效地址是「基址寄存器内容 + 位移量D」;

    • 公式:

    • 访存次数: 次;

    • 核心特点:基址寄存器的内容可变,位移量D不变;适合多道程序设计、内存分配,用来确定程序在内存中的起始地址(基址),实现程序的重定位;

    • ✔ 【必考辨析】变址寻址 vs 基址寻址(选择题年年考,背熟):

      [跳转](# 📌 基址寻址 vs 变址寻址 核心对比表)

      • 目的不同:变址寻址→找操作数(用户用),基址寻址→找程序在内存的位置(系统用);

      • 可变对象不同:变址→D变,IX不变;基址→BR变,D不变;

      • 寻址范围:变址→由IX决定,基址→由BR决定(通常BR位数更长,寻址范围更大)。

  5. 相对寻址(★★★ 必考,计算,选择题高频)

    • 定义:以程序计数器PC为基准,地址码字段存放位移量D,有效地址是「PC的内容 + 位移量D」;
    • 公式:
    • 访存次数: 次;
    • 核心特点:位移量D可正可负(向前/向后跳转),寻址范围是「PC±D」;适合转移指令(如跳转、分支),指令的地址与PC相关,实现程序的浮动(位置无关)。
  6. 堆栈寻址

    • 定义:操作数存放在堆栈中,栈顶由堆栈指针(SP)指示,地址码字段无地址,隐含操作数在栈顶;
    • 公式:EA=(SP),出栈/入栈后SP自动增减;
    • 访存次数:1次;
    • 特点:适合子程序调用、中断处理,无需寻址,操作简单。

(二)寻址方式的核心补充(选择题高频考点,避坑必备)

  1. 访存次数的判断规则:只要需要从内存中取地址/取操作数,就记一次访存;寄存器操作不算访存,立即数不算访存。

  2. 所有寻址方式中,速度排序:立即寻址 > 寄存器寻址 > 寄存器间接寻址 > 直接寻址 > 变址/基址/相对寻址 > 间接寻址(最慢)。

  3. 寻址范围排序:间接寻址 > 基址寻址 > 变址寻址 > 直接寻址。

✅ 模块4:指令的类型与功能(选择考点,背熟分类即可,无计算)

按指令的功能分类,考题以选择题为主,考「指令归属」,无需深入理解,记熟即可:

  1. 数据传送类指令:最常用,如MOV(传送)、LOAD(取数)、STORE(存数)、PUSH(入栈)、POP(出栈);核心是「复制数据」,不改变源操作数。

  2. 算术运算类指令:加减乘除、加1、减1、求补、比较等,运算结果通常存回目的地址。

  3. 逻辑运算类指令:与、或、非、异或、移位(算术移位/逻辑移位/循环移位),用于位操作、逻辑判断。

  4. 程序控制类指令:改变程序执行顺序,如跳转、分支、调用、返回、停机,必用相对寻址/直接寻址

  5. 输入输出类指令:实现CPU与外设的数据交换,分「独立编址(专用I/O指令)」和「统一编址(用访存指令)」。

  6. 特权指令:只能由操作系统执行,如关中断、清内存、启动外设,用户程序不能执行。

✅ 模块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:指令格式设计+指令条数计算(★★★ 大题必考,分值最高,核心压轴题)

【题型特征】

已知:指令字长、地址码位数、地址数(二地址/单地址/零地址),要求:① 设计指令格式;② 计算各类指令的最大条数;③ 变长操作码的扩展设计。

【万能解题步骤(死记,按顺序写,采分点齐全)】

  1. 确定指令字长L,地址码每个占k位,计算定长操作码的位数:操作码位数 = L - n×k(n为地址数);

  2. 计算定长操作码的最大指令条数

  3. 若要求设计变长操作码,按「二地址→单地址→零地址」的顺序扩展,遵循「前缀无歧义」规则,分步计算每类指令的最大条数;

  4. 画出指令格式图(操作码+地址码,标注位数),是大题的必写采分点!

【经典例题(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;② 计算操作数的值;③ 判断访存次数。

【万能解题步骤】

  1. 识别寻址方式,写出对应的EA计算公式(核心,背熟公式);

  2. 代入已知数值,计算EA;

  3. 若求操作数:操作数=(EA)(访存取数);

  4. 按规则判断访存次数,标注清楚。

【经典例题(高频考题,全覆盖考点)】

已知:变址寄存器IX的内容为1000H,位移量D为0010H,基址寄存器BR的内容为2000H,PC的内容为3000H,地址码字段的内容为4000H。分别计算:① 变址寻址的EA;② 基址寻址的EA;③ 相对寻址的EA;④ 直接寻址的EA;⑤ 寄存器间接寻址(寄存器R内容为5000H)的EA。解:
① 变址寻址:
② 基址寻址:
③ 相对寻址:
④ 直接寻址:
⑤ 寄存器间接寻址:

寄存器寻址比较特殊 —— 它不需要计算有效地址(EA),因为操作数直接存放在寄存器里

✅ 题型3:CISC/RISC+寻址方式辨析题(★★ 选择必考,简答高频)

【题型特征】

选择题:给出描述,判断是哪种寻址方式/是CISC还是RISC;简答题:对比两种寻址方式(变址/基址)、对比CISC和RISC。

【解题技巧】

  1. 寻址方式辨析:抓住核心特点(如立即寻址是操作数本身,间接寻址访存2次);

  2. CISC/RISC辨析:抓住指令条数、格式、执行速度三个核心维度;

  3. 简答题:按表格的维度逐条写,采分点清晰,不丢分。


三、指令系统 易错点+避坑指南(选择题高频丢分点,必看)

  1. 变长操作码的前缀规则:短操作码不能是长操作码的前缀,这是唯一的设计规则,违反则错误;

  2. 访存次数的计算:寄存器间接寻址→1次,单级间接寻址→2次,多级→n+1次,千万不要算错!

  3. 变址和基址的区别:变址是用户用,找操作数;基址是系统用,找程序位置,可变对象相反;

  4. 指令条数的计算:定长操作码是,变长是分步扩展,不是直接相加;

  5. 立即寻址的地址码:是操作数,不是地址,无EA;

  6. RISC的核心特征:指令定长、单周期执行、大量寄存器,不是指令条数少这么简单。

📌 基址寻址 vs 变址寻址 核心对比表

对比维度 基址寻址 变址寻址
核心公式 ( EA = (BR) + D )(BR:基址寄存器,D:位移量) ( EA = (IX) + A )(IX:变址寄存器,A:形式地址)
谁变谁不变 程序执行时:BR固定,D可变
程序加载时:BR可变,D固定
程序执行时:IX可变,A固定
主要用途 实现程序重定位、多道程序设计、内存分配 实现数组/字符串等连续数据的遍历访问
视角 面向操作系统/内存管理 面向用户程序/数据访问
访存次数 1次 1次
寄存器权限 BR内容由操作系统设置,用户不可直接修改 IX内容可由用户指令直接修改

💡 关键记忆点

  • 基址寻址:核心是**“基地址”**,用来给程序分配一段连续内存,程序运行时基地址固定,保证内部地址稳定;程序切换时基地址由系统修改,实现重定位。

  • 变址寻址:核心是**“偏移遍历”**,形式地址固定(数组首地址),变址寄存器作为索引,每次+1就能访问下一个数组元素。


✅ 一句话区分

  • 基址寻址:程序搬家(换内存位置)用的

  • 变址寻址:遍历数组(访问连续数据)用的