Skip to content

408 计算机组成原理

第四章 指令系统

CO-04-01 指令格式(操作码/地址码/指令长度)


一、定位信息

  • 圈层标注:核心层(大纲明确要求"指令格式")
  • 前置知识回顾:需要了解二进制编码基础和计算机中数据的表示方法(原码/补码),以及"机器字长"的概念(CPU一次能处理的二进制数据位数)。
  • 知识网络定位:指令格式是指令系统的基础构件,上承"计算机性能指标"中的字长概念,下启"寻址方式"和"指令执行过程",是指令系统分析的起点。
  • 考点热度H级(高频重点) —— 近五年真题中多次以选择题形式考查操作码扩展、地址码字段含义、指令字长与机器字长的关系等,属于必考知识点。

二、知识点讲解

2.1 指令的基本格式

一条机器指令由操作码字段(Operation Code)和地址码字段(Address Code/Operand Address)组成。操作码指明"做什么"(如加法、传送、跳转),地址码指明"对谁做"(操作数在哪里、结果存哪里)。

指令的一般格式:

操作码字段(OP)地址码字段(A₁, A₂, ...)
指明操作类型指明操作数地址或操作数本身

为什么这样设计? 计算机是"存储程序"结构,指令和数据都存放在内存中。CPU取出一条指令后,先译码操作码知道要做什么,再根据地址码找到操作数执行。这种分离设计使得同一操作码可以搭配不同的地址码,灵活度高。

2.2 操作码设计

操作码的编码方式分为定长操作码可变长操作码两种。

定长操作码:操作码字段固定占若干位。若操作码占 nn 位,则最多可表示 2n2^n 条指令。优点是译码电路简单、速度快;缺点是指令数量受限于位数。

可变长操作码(扩展操作码):操作码长度不固定,通过前缀区分。典型方法是将操作码扩展到地址码字段中。例如,一条"三地址指令"用4位操作码 + 3×4位地址码 = 16位;若某个操作码值(如1111)标记"扩展",则后续4位也参与编码,变成"二地址指令"的操作码(共8位),以此类推。这样短指令可以用更多位编码操作码,容纳更多指令种类。

扩展操作码的核心原则

  1. 短操作码不能是长操作码的前缀(否则译码歧义)。
  2. 地址码位数越多的指令,其操作码位数越少,即能表示的该类指令条数越少。
  3. 高频指令应使用短操作码,节省空间、提高效率。

2.3 地址码设计

根据地址码字段中地址的个数,指令可分为:

地址个数格式操作说明示例含义
四地址指令OP A₁ A₂ A₃ A₄A₁ op A₂ → A₃,下条指令地址为 A₄功能最全但指令最长
三地址指令OP A₁ A₂ A₃A₁ op A₂ → A₃,PC自动递增用PC替代A₄
二地址指令OP A₁ A₂A₁ op A₂ → A₁(或A₂)目的操作数被覆盖
一地址指令OP A₁AC op A₁ → AC(隐含累加器AC)另一操作数隐含在AC中
零地址指令OP操作数隐含(如堆栈操作、停机指令)不需要显式地址

为什么地址个数减少? 每减少一个地址字段,指令长度缩短,但可能需要更多指令才能完成同一任务(地址个数少的指令表达能力弱,需要更多条指令组合),这是"指令长度"与"程序长度"之间的权衡。

2.4 指令字长

指令字长是指一条指令所占的二进制位数。常见关系:

  • 指令字长 = 操作码位数 + 地址码位数(所有字段之和)
  • 指令字长可以是定长(所有指令等长,如MIPS固定32位)或变长(x86指令从1字节到15字节不等)
  • 指令字长通常为机器字长的整数倍(取半字长、单字长、双字长等),这样便于从内存中取指令
  • 指令字长与存储字长的关系:取一条指令可能需要访问内存1次或2次(取决于指令字长与存储字长的倍数关系)

三、记忆与理解辅助

① 操作码扩展口诀:"短码不作长码头,高频指令用短码,地址多时操作码少"

② 地址个数速记表(核心对比表):

对比项四地址三地址二地址一地址零地址
显式地址个数43210
指令长度最长较长中等较短最短
单指令表达能力最强中等较弱最弱
完成同一任务所需指令数最少中等较多最多
下条指令地址来源指令中A₄PC隐含PC隐含PC隐含PC隐含
典型应用场景理论模型RISC通用指令集累加器型堆栈型/停机

③ 指令字长与机器字长的关系

  • 机器字长 = CPU数据通路宽度(如32位、64位)
  • 指令字长可以≠机器字长(如x86指令可变长,ARM Thumb指令16位但机器字长32位)
  • 存储字长 = 一次访存读/写的位数
  • 取指时:若指令字长 = 存储字长,1次访存取一条;若指令字长 = 2×存储字长,需2次访存

④ 定长 vs 可变长操作码对比

对比项定长操作码可变长操作码
操作码位数固定不固定
译码速度快(硬件简单)较慢(需前缀判断)
指令数量上限2n2^n(n为位数)可灵活扩展
典型代表MIPS、RISC-Vx86(CISC)

四、例题与精解

例题1(基础巩固)

题目:某计算机指令字长为16位,采用定长操作码,操作码占4位,地址码均等地分给两个地址字段。问: (1)最多可有多少条指令? (2)每个地址字段占多少位? (3)每个地址可寻址的最大存储空间是多少?

命题意图:考查操作码位数与指令数量的关系、地址码字段划分、地址码位数与寻址范围的关系。

解题过程

  1. 审题分析:指令字长16位,操作码4位,地址码分给两个地址字段(即二地址指令)。
  2. 解题思路:操作码位数决定指令数量,地址码位数决定寻址范围。
  3. 完整步骤
    • (1)操作码4位 → 最多 24=162^4 = 16 条指令
    • (2)地址码总位数 = 16 - 4 = 12位,均分给两个地址字段 → 每个地址字段 = 12 ÷ 2 = 6位
    • (3)每个地址字段6位 → 可寻址 26=642^6 = 64 个存储单元
  4. 方法反思:此类题核心公式:指令数量 = 2操作码位数2^{\text{操作码位数}},寻址范围 = 2地址码位数2^{\text{地址码位数}}。若地址字段不等分,需按题目条件分别计算。

例题2(中等提升)

题目:某指令系统共有12条指令,采用可变长操作码。若指令字长为16位,地址码字段均为4位,且设计了三地址、二地址、一地址三种指令格式。已知三地址指令有5条,二地址指令有6条,求一地址指令最多可有多少条?

命题意图:考查扩展操作码的编码原理,要求理解"短码不作长码头"规则及编码空间的计算。

解题过程

  1. 审题分析:指令字长16位,地址码字段4位。三地址指令:OP(4位) + A₁(4位) + A₂(4位) + A₃(4位)。二地址指令:OP(8位) + A₁(4位) + A₂(4位)。一地址指令:OP(12位) + A(4位)。
  2. 解题思路:三地址指令操作码4位,共有 24=162^4 = 16 个编码空间,用了5个,剩下11个用于"标记扩展"。每个扩展标记后面接4位,构成二地址指令的操作码(共8位),即每个标记对应 24=162^4 = 16 个二地址指令编码空间。
  3. 完整步骤
    • 三地址指令操作码4位:共 24=162^4 = 16 个编码
    • 用了5条三地址指令 → 剩余 165=1116 - 5 = 11 个编码用于扩展到二地址
    • 每个扩展标记对应 24=162^4 = 16 个二地址指令编码空间
    • 二地址指令总编码空间 = 11×16=17611 \times 16 = 176
    • 已用6条二地址指令 → 剩余 1766=170176 - 6 = 170 个编码用于扩展到一地址
    • 每个二地址扩展标记对应 24=162^4 = 16 个一地址指令编码空间
    • 一地址指令最多 = 170×16=2720170 \times 16 = 2720
  4. 方法反思:扩展操作码计算的核心是逐级相减再乘以下一级地址码的编码空间。注意每级扩展时,上一级"已用"的编码不再参与下一级扩展。实际出题中,数据会设计得更简洁,但计算逻辑不变。

五、考情分析

  • 考查频次:近5年真题中,指令格式相关内容(含操作码扩展、地址码字段含义)平均每年1-2道选择题。
  • 常见题型:以选择题为主,偶尔出现在综合应用题的子问题中。
  • 分值占比:选择题约2-4分,若出现在大题中可达5-8分。
  • 命题趋势:操作码扩展的计算题是经典考点,近年更倾向于与寻址方式、指令执行过程结合考查。指令字长与存储字长、机器字长的关系也是高频考点。基于大纲与命题规律推测

六、易错点提醒

① 错误表现:混淆"指令字长"与"机器字长"。 错误原因:两者名称相似,且在某些RISC系统中恰好相等(如MIPS指令字长32位、机器字长32位),导致考生误以为两者总是一致。 正确理解:指令字长是一条指令的位数,机器字长是CPU数据通路宽度,两者可以不等。x86指令字长可变(1-15字节),但机器字长固定为64位。

② 错误表现:扩展操作码计算时,把已使用的编码仍然算入下一级扩展空间。 错误原因:不理解"短码不作长码头"规则——已被三地址指令占用的操作码编码,不能再作为二地址指令的前缀。 正确理解:每级扩展时,必须先扣除上一级已使用的编码数,剩余的才用于下一级扩展。

③ 错误表现:认为地址码字段个数越多,指令执行效率一定越高。 错误原因:只看到单条指令功能强,忽略了指令字长增加导致的内存带宽压力和指令缓存效率下降。 正确理解:地址个数多 → 单条指令功能强 → 完成任务所需指令数少,但指令更长 → 每条指令取指时间更长。存在权衡。

④ 错误表现:将"地址码字段的位数"等同于"主存地址位数"。 错误原因:在二地址或三地址指令中,地址码字段通常较短(如6-8位),远小于主存地址位数(如32位),考生容易忽略这个差距。 正确理解:地址码字段的位数决定的是该指令直接编码能表示的地址范围,实际寻址范围可通过寻址方式(如间接寻址、基址寻址)扩展。


七、来源标注

  • 依据 2026 考研统考大纲"计算机组成原理"部分"指令系统"章节
  • 依据《计算机组成原理》(唐朔飞版)第四章
  • 依据《计算机组成与设计:硬件/软件接口》(Patterson & Hennessy)第二章

考研全科复习资料 - 基于2026考研统考大纲