第五章:指令系统
本章整理计算机中的指令系统。指令系统是计算机软硬件系统之间的界面和纽带,是软件能够操控硬件进行物理计算的唯一接口。
5.1 指令系统概述
指令系统主要解决一个核心问题:CPU 电路能直接识别并执行什么物理操作?
高级语言编写的程序不能被 CPU 电路直接读取并执行,必须先经过编译与汇编翻译转换为一连串由机器指令组成的机器代码。指令系统就是 CPU 能够识别并执行的全部机器指令的集合。
编译器面向指令系统生成机器代码。CPU 硬件控制电路按照指令系统解释并执行机器代码。指令系统作为软硬件之间的核心接口,直接决定了计算机的系统性能与硬件设计复杂度:
指令系统主要规定了以下六个维度的内容:
- 指令格式:规定一条指令由哪些二进制字段组成。
- 操作码:规定指令要执行什么物理操作。
- 寻址方式:规定如何确定源操作数与目的操作数的位置,访存类指令通常会由此形成有效地址 。
- 寄存器数量:规定 CPU 内部可供指令直接使用的寄存器个数。
- 数据类型:规定指令支持处理整数、浮点数、字节、字等类型。
- 指令类型:规定算术运算、逻辑运算、访存、转移等基本功能。
5.2 指令格式
一条机器指令通常由操作码字段和地址码字段两部分组成:
[ 操作码字段 ] + [ 地址码字段 ]5.2.1 指令字长度
指令字长度是指一条机器指令包含的二进制代码位数。它与机器字长和存储字长在数值上不一定相等。
| 设计方式 | 物理特点 | 优缺点对比 |
|---|---|---|
| 定长指令字 | 每条机器指令的二进制位数相同 | 取指和译码结构简单、速度快,非常利于流水线设计;但会浪费编码空间。 |
| 变长指令字 | 不同指令的二进制位数可以不同 | 编码灵活、指令紧凑;但导致取指与译码复杂,不利于流水线。 |
5.2.2 指令地址码
根据指令中显式给出的操作数地址码个数,指令可分为以下四类:
1. 三地址指令
- 结构格式:
OP A1 A2 A3(其中 为目的地址, 和 为源操作数地址)。 - 执行逻辑:。
- 物理特点:表意清晰,但指令字长通常较长,耗费较多编码空间。
2. 二地址指令
- 结构格式:
OP A1 A2(其中 兼作目的地址, 为源操作数地址)。 - 执行逻辑:。
- 物理特点:比三地址指令更紧凑,但运算后会覆盖掉 中原有的源操作数。
3. 一地址指令
- 结构格式:
OP A1。 - 执行逻辑:
- 若是单操作数指令(如取反、移位):。
- 若是双操作数指令,则另一个源操作数隐含在 CPU 内部的累加器 ACC 中:
- 物理特点:指令短小,但由于高度依赖隐含的寄存器,灵活度较差。
4. 零地址指令
- 结构格式:
OP。 - 执行逻辑:没有显式的地址码。常用于堆栈型计算机,操作数隐含在栈顶,执行时从栈顶弹出两个数进行运算,结果压回栈顶。
5.2.3 指令操作码
操作码决定指令执行什么功能。根据操作码长度的变动特性,主要有定长操作码与扩展操作码两种设计方式:
- 定长操作码:所有指令操作码长度完全相同。
- 扩展操作码:不同指令的操作码长度不同。其设计核心是让地址码字段较少的指令分配较长的操作码,而地址码字段较多的指令分配较短的操作码,从而最大化利用有限的指令字长。
5.3 寻址方式
寻址方式分为指令寻址与操作数寻址两类。
5.3.1 指令寻址方式
指令寻址用于确定 CPU 下一条将要执行的指令地址。主要有以下两种方式:
- 顺序寻址方式:通过程序计数器 PC 自动累加一个指令字长,指向下一条相邻指令的地址。
- 跳跃寻址方式:当遇到转移类指令(如无条件跳转、条件转移、函数调用)时,由指令的地址码字段计算出转移目标地址并直接送入 PC,从而改变程序的正常执行顺序。
顺序寻址在不同编址方式下的 PC 增量问题
- 在按字编址的存储器中,PC 增量固定为 1。
- 在按字节编址的存储器中,若指令字长为 32 位(4 字节),则 PC 的增量为 4。
5.3.2 操作数寻址方式
操作数寻址用于寻找指令执行时所需的源操作数或存放结果的目的地址。以下为八种最常用的操作数寻址方式,结合有效地址 进行解析:
1. 立即寻址
- 特点:操作数直接作为立即数存放在指令的地址码字段中,无需访问任何存储器。
- 寻址公式:
- 优缺点:执行速度最快,但立即数的大小直接受制于指令中分配给地址字段的位数。
2. 直接寻址
- 特点:指令的地址码字段直接给出了操作数在主存中的有效地址。
- 寻址公式:
- 优缺点:简单直观,但可寻址的内存范围直接受限于指令地址字段 的宽度。
3. 间接寻址
- 特点:指令中给出的地址 并不是操作数的地址,而是操作数地址在内存中的存放地址。
- 寻址公式:
- 优缺点:可以显著扩展寻址范围,并便于实现程序的动态链接与指针定位;但由于需要两次或多次访存才能取出操作数,执行速度较慢。
4. 寄存器寻址
- 特点:操作数存放在 CPU 内部的某个通用寄存器中,指令中给出的是寄存器编号 。
- 寻址公式:
- 优缺点:寄存器访问速度快,且指令中只需极少位数指明编号,有利于缩短指令字长;但通用寄存器数量有限。
5. 寄存器间接寻址
- 特点:操作数存放在主存中,而操作数的有效地址存放在指令指定的通用寄存器 中。
- 寻址公式:
- 优缺点:访存开销介于寄存器寻址和间接寻址之间,非常适合实现指针指向、链表定位和结构体处理。
6. 基址寻址
- 特点:有效地址由基址寄存器 的内容与指令中的偏移量 相加得到。基址寄存器的内容由操作系统管理,程序运行中通常保持不变。
- 寻址公式:
- 核心用途:主要用于多道程序在内存中的动态重定位,方便内存分段管理。
7. 变址寻址
- 特点:有效地址由指令中的形式地址 与变址寄存器 的内容相加得到。变址寄存器的内容在程序运行中经常改变。
- 寻址公式:
- 核心用途:主要用于数组访问与循环结构设计。可以将形式地址 作为数组首地址,由 充当数组下标的增量。
8. 相对寻址
- 特点:有效地址由程序计数器 PC 的内容与指令中的偏移量 相加得到。
- 寻址公式:
- 核心用途:主要用于条件转移指令和循环跳转。其最大优势是无论程序被加载到内存的什么位置,转移目标与当前指令的相对位移保持不变,从而使程序代码具有可浮动性。
常见寻址方式特点对比简答考点
- 立即寻址:不需要访存,执行速度快,但数据大小受限。
- 直接寻址:只需一次访存,寻址范围受限。
- 间接寻址:至少两次访存,能扩大寻址范围,便于使用指针.
- 寄存器寻址:访问通用寄存器,不需要访存,速度快。
- 寄存器间接寻址:只需一次访存,便于编制循环程序。
- 相对寻址:便于程序在内存中浮动。
- 基址寻址:有利于多道程序设计,面向操作系统。
- 变址寻址:适合处理数组问题,面向程序员。
经典例题设当前 PC 的值为
2000H,一地址转移指令的相对偏移量为-100D。若指令字长为 2 字节,按字节编址,求转移目标有效地址。解析步骤:
- CPU 取出该指令后,PC 的值自动增加,指向下一条指令的地址:
- 将十进制偏移量
-100D转换为十六进制补码:- 计算有效地址 :
故转移目标有效地址为
1F9EH。
5.4 指令类型
指令按照其执行的具体功能,通常分为以下六大类:
- 数据传送指令:用于在寄存器、主存物理单元以及外设接口之间传输数据。例如 MIPS 中的
lw(从主存加载字到寄存器)、sw(将寄存器中的字存入主存)和寄存器拷贝move。 - 算术运算指令:执行有符号或无符号的加、减、乘、除运算。
- 逻辑运算指令:执行按位与
and、按位或or、按位异或xor等操作。 - 移位指令:执行左移与右移。左移 位在不发生溢出的前提下相当于乘以 。逻辑右移高位补 0,算术右移为了保持有符号数的符号不变,高位空出处一律补符号位。
- 程序控制指令:用于人为改变程序的执行次序。包括无条件跳转
j、条件分支beq、函数调用jal以及函数返回jr。 - 输入输出指令:用于 CPU 与外设进行数据交互。
5.5 指令格式设计
在设计机器指令格式时,必须在有限的二进制位数内,合理权衡和平衡以下四个相互制约的因素:指令字长、操作码字段宽度、寄存器数量以及寻址地址范围。
5.5.1 核心设计原则
- 字长与位数的权衡:在固定指令字长的条件下(如定长 32 位),若给寄存器编号字段分配过多位数,则会导致立即数字段或偏移量字段的位数减少,从而压缩了寻址范围。
- 操作码与地址码的博弈:采用扩展操作码技术时,必须预留出特定的操作码前缀作为标志位(如将全 1 作为扩展标志),这会挤占地址码字段,需要在指令表达能力的丰富度与寻址空间的广度之间做折中。
5.5.2 扩展操作码设计实例
扩展操作码设计例题设指令字长为 16 位,每个地址码为 4 位。设计一个指令系统,包含:
- 15 条三地址指令
- 15 条二地址指令
- 15 条一地址指令
- 16 条零地址指令
设计方案:
- 三地址指令:格式为
[OP (4位)] [A1 (4位)] [A2 (4位)] [A3 (4位)]。
- 操作码取值范围为
0000到1110,共 15 条。- 留下一个状态
1111作为扩展标志。- 二地址指令:格式为
[OP (8位)] [A1 (4位)] [A2 (4位)]。
- 高 4 位固定为
1111。- 第 5 到第 8 位取值范围为
0000到1110,共 15 条(即操作码为1111 0000到1111 1110)。- 留下
1111 1111作为扩展标志。- 一地址指令:格式为
[OP (12位)] [A1 (4位)]。
- 高 8 位固定为
1111 1111。- 第 9 到第 12 位取值范围为
0000到1110,共 15 条。- 留下
1111 1111 1111作为扩展标志。- 零地址指令:格式为
[OP (16位)]。
- 高 12 位固定为
1111 1111 1111。- 第 13 到第 16 位取值范围为
0000到1111,共 16 条。
5.6 CISC 和 RISC 架构对比
指令系统的设计思想主要分为 CISC 和 RISC 两大阵营。
5.6.1 复杂指令系统计算机
CISC 的特征是随着用户程序功能的需求增加,指令系统越来越庞大。
- 物理特征:指令数量多,支持丰富的寻址方式和多种字长;支持直接对内存数据进行算术逻辑运算。
- 控制器实现:控制器多采用微程序实现,硬件电路较为庞杂,执行效率受限。
5.6.2 精简指令系统计算机
RISC 的核心是通过精简出使用频率最高的少数简单指令来提升整体执行效率。
- 物理特征:指令字长固定,格式规整统一;仅保留少数规整的寻址方式;仅加载和存储指令允许访问主存,其他运算指令都在寄存器间进行。
- 控制器实现:通常采用硬布线控制器,各指令执行时间多接近一个时钟周期,非常利于指令流水线设计。
5.6.3 核心技术差异汇总
| 对比维度 | CISC | RISC |
|---|---|---|
| 指令系统规模 | 指令数量多,包含大量极复杂的指令 | 仅精简出数量较少、最常用的指令 |
| 指令字长 | 指令字长不固定,格式复杂多变 | 大多采用定长指令字,格式规整统一 |
| 寻址方式 | 寻址方式极多且繁杂 | 仅保留少数几种规整的寻址方式 |
| 访存特征 | 绝大多数指令均可直接访问主存 | 仅加载和存储指令允许访问主存,其余运算指令只能在寄存器之间进行 |
| 执行时钟周期 | 各指令的时钟周期差异巨大,多数指令大于 1 | 大多数常用指令的时钟周期均接近 1 |
| 控制器物理实现 | 多采用微程序控制器(微指令查表慢) | 多采用硬布线控制器,以便实现高效流水化执行 |
| 典型架构代表 | x86 架构 | MIPS、RISC-V、ARM 架构 |
RISC 的核心真谛简答要点RISC 的设计核心并非单纯追求指令数量越少越好,其根本目的在于通过简化指令格式和寻址方式,使得硬件控制器更简单、更容易实现主频提升,从而让常用指令能够在一个时钟周期内高效率地执行,为指令流水线的设计扫清硬件障碍。
5.7 典型指令系统举例
为了更好地理解指令系统的演化与设计差异,以下简要列举并对比四种具有代表性的指令系统:
5.7.1 PDP-11指令系统
PDP-11 是早期小型机中非常成功的 16 位 CISC 指令系统。其特点是寻址方式灵活(拥有 8 种寻址方式并可应用于源与目的两个操作数),使得同一条指令可以以各种组合方式运行,这直接启发了后来许多处理器的设计,但同时也导致了译码电路的复杂化。
5.7.2 Intel x86指令系统
x86 是典型且极具代表性的 CISC 架构体系。为了保持前向兼容性,其指令系统庞大且格式复杂。
- 物理特点:指令长度范围从 1 字节到 15 字节不等;寻址方式繁多;允许算术运算指令直接在通用寄存器与主存物理单元之间交互,导致译码逻辑在硬件实现上付出了高昂的代价。
5.7.3 MIPS指令系统
MIPS 是一种非常规范的 RISC 指令集体系结构。其机器指令长度固定为 32 位,主要包含以下三种格式:
1. R 型指令,即寄存器型指令
主要用于寄存器之间的算术逻辑运算。
[ op:6 ] | [ rs:5 ] | [ rt:5 ] | [ rd:5 ] | [ shamt:5 ] | [ funct:6 ]op:主操作码,对于所有 R 型指令均为 0。rs、rt:源操作数寄存器编号。rd:目的寄存器编号.shamt:移位量(仅在移位指令中使用)。funct:辅助操作码(功能码),用于具体区分是加法、减法还是逻辑运算。
例如指令 add $t0, $t1, $t2,其物理含义是 $t0 = $t1 + $t2。
2. I 型指令,即立即数型指令
用于含立即数的运算、主存加载与存储、以及条件转移指令。
[ op:6 ] | [ rs:5 ] | [ rt:5 ] | [ immediate:16 ]op:操作码。rs:源操作数寄存器编号。rt:目的或源操作数寄存器编号(在加载指令中充当目的寄存器,在存储指令中充当源寄存器)。immediate:16 位立即数字段,进行运算或地址偏移计算时需要进行符号扩展。
例如访存指令 lw $t0, 4($t1),有效地址为 EA = (\t1) + 4t0`。
3. J 型指令,即无条件跳转型指令
用于大范围的无条件跳转。
[ op:6 ] | [ target:26 ]target:26 位跳转目标字段,并不是完整的 32 位地址。MIPS J 型目标地址通常由当前 PC 高 4 位与target左移 2 位后的 28 位拼接而成。
5.7.4 RISC-V指令系统
与 MIPS 类似,开放且模块化的 RISC-V 也是典型的 RISC 架构。其 32 位标准格式主要包括 R 型、I 型、S 型、B 型、U 型和 J 型。
例如在 RISC-V 中:
- 加法指令:
add x5, x6, x7,物理意义为 。 - 加载字:
lw x5, 0(x6),有效地址为 。 - 存储字:
sw x5, 0(x6),将 寄存器中的内容存入地址为 的主存中。
5.8 程序的机器级表示与控制结构
高级语言程序在运行前,必须通过编译器和汇编器翻译成指令流。在 RISC 架构中,只有加载和存储指令才能访存,所有算术逻辑运算必须在通用寄存器之间进行。
5.8.1 顺序结构的机器级表示
对于 C 语言赋值语句 a = b + c;,在机器级通常被翻译成以下指令流:
lw $t1, b_addr # 从内存加载变量 b 到通用寄存器 $t1lw $t2, c_addr # 从内存加载变量 c 到通用寄存器 $t2add $t3, $t1, $t2 # 在 CPU 内部进行加法运算,结果存入 $t3sw $t3, a_addr # 将寄存器 $t3 的结果写回主存中变量 a 的地址5.8.2 选择结构的机器级表示
对于 C 语言条件判断结构:
if (a == b) { c = d + e;} else { c = d - e;}在机器级通常通过条件跳转与无条件跳转组合实现:
bne $t1, $t2, ELSE # 若 a != b(即寄存器 $t1 != $t2),则跳转到 ELSE add $t3, $t4, $t5 # 执行 if 分支:c = d + e j END # 执行完后无条件跳转到 END 绕过 else 分支ELSE: sub $t3, $t4, $t5 # 执行 else 分支:c = d - eEND: ...5.8.3 循环结构的机器级表示
对于 C 语言循环结构:
while (i < n) { sum = sum + a[i]; i++;}在机器级通常翻译为循环头部判断与尾部跳回:
LOOP: bge $t1, $t2, END # 循环变量 i ($t1) >= n ($t2) 时,退出循环跳转到 END sll $t3, $t1, 2 # 将下标 i 乘以 4(左移 2 位),得到数组元素地址偏移量 add $t4, $s0, $t3 # 数组首地址 $s0 与偏移量相加,得到 a[i] 的有效地址 lw $t5, 0($t4) # 加载元素 a[i] 的值到寄存器 $t5 add $s1, $s1, $t5 # 执行累加:sum ($s1) = sum + a[i] addi $t1, $t1, 1 # 循环变量自增:i = i + 1 j LOOP # 无条件跳回循环入口 LOOP 进行下一次条件判断END: ...5.9 本章易错点警示
在复习和应对考试时,需要特别警惕以下高频考点和易错陷阱:
指令物理地址与操作数物理地址的严格区分
- 指令地址:指该条机器指令在存储器中所处的位置,通常由程序计数器 PC 提供并控制。
- 操作数有效地址:指访存类指令访问操作数时计算得到的地址 。两者来源和用途不同。
立即数与内存地址的区别立即寻址中指令地址字段给出的立即数就是操作数本身,不是内存单元地址。例如指令
addi $t0, $t1, 10中,10是直接参与加法计算的数值,不需要进行任何访存操作。
间接寻址的访存次数分析间接寻址中,指令给出的地址 是存放操作数物理地址的内存单元。取出一个操作数至少需要两次访问主存(第一次访存读出操作数的有效地址,第二次访存读出真正的操作数数值)。
相对寻址的 PC 相对性在相对寻址中,有效地址 。需要注意的是,当 CPU 取出当前转移指令后,PC 的内容会自动自增指向下一条紧邻指令的物理地址。因此,在计算实际转移目标物理地址时,公式中的 PC 值应当是转移指令下一条指令的地址,而非转移指令本身的地址。
5.10 历年真题与易错题集
选择题
Q1 (计组 2019 秋 18 级测试 选择题)
题干:冯·诺依曼计算机中指令和数据均以二进制形式存放在存储器中,CPU区分它们的依据是______。
A. 指令操作码的译码结果 B. 指令和数据的寻址方式 C. 指令周期的不同阶段 D. 指令和数据所在的存储单元
答案:C
解析:
- A [错误]:指令操作码的译码发生在取指之后的译码阶段,此时 CPU 已经将该二进制代码作为指令取出了,因此译码结果不能作为区分指令 and 数据的依据。
- B [错误]:寻址方式是指令中用于指明操作数地址或下一条指令地址的方法,它不能用于在从存储器取出信息时区分该信息是指令还是数据。
- C [正确]:在冯·诺依曼计算机中,指令和数据存放在同一存储器中。CPU 区分它们的依据是指令周期的不同阶段,在取指阶段从存储器中取出的二进制代码被视为指令,在执行阶段从存储器中取出的二进制代码被视为数据。
- D [错误]:在冯·诺依曼结构中,指令和数据可以混合存放在同一个存储器中,并且可以占用相邻的存储单元,因此 CPU 无法仅仅根据信息所在的存储单元地址来区分它是指令还是数据。
Q2 (计组 2019 秋 18 级测试 选择题)
题干:计算机硬件能够直接识别的语言是______。
A. 高级语言 B. 汇编语言 C. 机器语言 D. Java 语言
答案:C
解析:
- A [错误]:高级语言是面向用户的程序设计语言,计算机硬件无法直接识别,必须经过编译器或解释器翻译成机器指令后才能执行。
- B [错误]:汇编语言是机器指令的符号化表示,计算机硬件无法直接识别,需要通过汇编程序将其翻译成机器语言才能执行。
- C [正确]:机器语言是由二进制代码组成的指令集,是计算机硬件逻辑电路唯一能够直接识别并执行的语言。
- D [错误]:Java 语言是高级语言的一种,需要先编译成字节码文件,再由虚拟机解释执行或通过即时编译器编译成机器码后执行,硬件无法直接识别。
Q3 (计组 2019 秋 18 级测试 选择题)
题干:指令译码器进行译码的是______。
A. 整条指令 B. 指令的操作码字段 C. 指令的地址码字段 D. 指令的操作数字段
答案:B
解析:
- A [错误]:整条指令包含操作码字段和地址码字段,指令译码器仅对其中的操作码字段进行译码,而地址码字段则送往地址生成逻辑或寄存器选择逻辑,不需要译码器进行操作码译码。
- B [正确]:指令译码器的核心功能是对指令的操作码字段进行译码,识别当前指令的功能类型,从而控制产生相应的操作控制信号。
- C [错误]:指令的地址码字段用于指出操作数的地址或寻址方式,通常由寻址控制逻辑进行解析,而不是由指令译码器进行译码。
- D [错误]:操作数字段如果存在于指令中,也是直接送往执行部件或作为地址,不需要经过指令译码器译码。
Q4 (计组 2019 秋 18 级测试 选择题)
题干:某指令系统有 190 条指令,对操作码采用定长二进制编码时,最少需要______位。
A. 4 B. 8 C. 16 D. 32
答案:B
解析:
- A [错误]:若操作码位数为 4 位,定长编码最多只能表示 条指令,无法满足 190 条指令的需求。
- B [正确]:若操作码采用定长二进制编码,设最少需要 位,则必须满足 。因为 且 ,所以最少需要 8 位操作码。
- C [错误]:虽然 16 位可以提供 种编码,足以容纳 190 条指令,但它不是最少位数。
- D [错误]:虽然 32 位可以表示更多的指令,但远远超出了最少位数的要求。
Q5 (计组 2019 秋 18 级测试 选择题)
题干:下列关于 CISC/RISC 的叙述中,错误的是______。
A. RISC 机器指令比 CISC 机器指令简单 B. RISC 中通用寄存器比 CISC 多 C. RISC 的寻址方式比 CISC 少 D. CISC 比 RISC 的机器能更好的支持高级语言
答案:D
解析:
- A [错误]:RISC 指令通常格式规整、功能单一且指令条数少,而 CISC 指令功能复杂、长度和格式不固定,因此该叙述正确。
- B [错误]:RISC 为了减少访存操作,通常设置较多的通用寄存器以暂存数据,而 CISC 的通用寄存器数量相对较少,因此该叙述正确。
- C [错误]:RISC 仅保留了少数几种最常用的简单寻址方式,而 CISC 支持极其丰富的寻址方式,因此该叙述正确。
- D [正确]:CISC 虽以增强机器指令功能来支持高级语言为初衷,但导致了芯片结构异常复杂且难以优化;而 RISC 通过简单规整的指令配合优化编译器,能更高效地支持高级语言程序的运行,因此该叙述错误。
Q6 (2020-2021 第二学期 B 选择题)
题干:以下哪条指令实现的是无符号字节数据的读取______。
A. lb B. lh C. lw D. lbu
答案:D
解析:
- A [错误]:
lb指令的功能是加载字节,该指令从内存中读取一个字节并写入目标寄存器,但在写入目标寄存器时会进行有符号扩展。 - B [错误]:
lh指令的功能是加载半字,它从内存中读取两个字节送入目标寄存器,并进行有符号扩展。 - C [错误]:
lw指令的功能是加载字,它从内存中读取四个字节送入目标寄存器,不存在字节级读取和扩展的问题。 - D [正确]:
lbu指令的功能是无符号加载字节,它从内存中读取一个字节写入目标寄存器,并且在寄存器的高 24 位填充零,从而实现无符号字节数据的读取。
Q7 (2020-2021 第二学期 B 选择题)
题干:MIPS 指令集没有______类指令。
A. I 型指令 B. R 型指令 C. J 型指令 D. M 型指令
答案:D
解析:
- A [错误]:I 型指令是立即数型指令,是 MIPS 指令集的三大基本指令格式之一。
- B [错误]:R 型指令是寄存器型指令,是 MIPS 指令集的三大基本指令格式之一。
- C [错误]:J 型指令是无条件跳转型指令,是 MIPS 指令集的三大基本指令格式之一。
- D [正确]:MIPS 指令集只包含 R 型、I 型和 J 型三类指令,不存在 M 型指令。
Q8 (2020-2021 第 2 学期 A 选择题)
题干:RISC 思想主要基于的是______。
A. 减少指令的平均执行周期 B. 减少指令的复杂程度 C. 减少硬件的复杂程度 D. 便于编译器编写
答案:A
解析:
- A [正确]:精简指令集计算机(RISC)的设计思想是选择使用频率最高的一些简单指令,通过简化指令执行步骤和采用流水线技术,使得大多数指令都能在一个时钟周期内完成,其核心目标是减少指令的平均执行周期。
- B [错误]:虽然 RISC 指令较简单,但减少指令的复杂程度只是实现手段,而非 RISC 思想的最主要设计目的。
- C [错误]:虽然简化指令系统在客观上降低了控制器的硬件设计复杂度,但这并非 RISC 的核心出发点。RISC 的主要出发点仍然是优化执行时间,即通过减少指令的平均执行周期来提升性能。
- D [错误]:RISC 指令系统虽然规整,但在某些情况下,因为指令功能单一,反而要求编译器能更智能地组合简单指令来实现复杂逻辑,因此主要目的不是便于编译器编写。
Q9 (南阳理工学院 C 卷 选择题)
题干:下列指令中不属于程序控制指令的是______。
A. 无条件转移指令 B. 条件转移指令 C. 中断隐指令 D. 循环指令
答案:C
解析:
- A [错误]:无条件转移指令能够显式地改变程序的控制流,强制跳转到目标地址执行,属于程序控制指令。
- B [错误]:条件转移指令根据特定的状态条件决定是否发生控制流跳转,属于程序控制指令。
- C [正确]:中断隐指令是 CPU 硬件在响应中断时自动执行的一系列操作,它并不是一条可以在指令集中由程序员显式编写执行的机器指令,因此不属于传统程序控制指令。
- D [错误]:循环指令用于实现程序段的循环跳转控制,属于程序控制指令。
Q10 (南阳理工学院 C 卷 选择题)
题干:三地址指令 的功能为 ,其中 、、 都是主存储器地址,则完成上述指令需要访存______次。
A. 2 B. 3 C. 4 D. 5
答案:C
解析:
- A [错误]:2 次访存只能满足取指令和读取一个操作数,或者其他更少地址指令的访存需求。
- B [错误]:3 次访存常见于二地址指令(取指 1 次,读取源操作数和写回目的操作数共 2 次)。
- C [正确]:三地址指令完成需要以下访存步骤:① 取指阶段从主存取出当前指令(访存 1 次);② 取源操作数 A1(访存 1 次);③ 取源操作数 A2(访存 1 次);④ 将运算结果写入目的物理地址 A3(访存 1 次)。累计访存次数为 次。
- D [错误]:5 次访存超出了完成该三地址指令执行所需要的正常访存次数。
Q11 (南阳理工学院 C 卷 选择题)
题干:条件转移指令执行时所依据的条件来自于______。
A. 指令寄存器 B. 标志寄存器 C. 程序计数器 D. 地址寄存器
答案:B
解析:
- A [错误]:指令寄存器用于存放当前正在执行的指令编码,不保存运算结果的状态标志。
- B [正确]:条件转移指令所依据的转移条件是先前算术逻辑运算中产生的标志位(例如零标志、溢出标志、进位标志等),这些标志位保存在标志寄存器中。
- C [错误]:程序计数器用于指向下一条将要执行的指令地址,不保存条件状态信息。
- D [错误]:地址寄存器保存的是当前 CPU 读写内存的物理单元地址,与转移条件的判断无关。
Q12 (2022-2023-2 考试 选择题)
题干:直接寻址的无条件转移指令的功能是将指令中的地址码送入______。
A. 程序计数器 PC B. 累加器 ACC C. 指令寄存器 IR D. 地址寄存器 MAR
答案:A
解析:
- A [正确]:PC 用于存放下一条将要执行的指令的地址。直接寻址的无条件转移指令需要强行改变程序的执行顺序,因此指令中的目标转移地址码必须送入 PC,作为下一条要取指的内存地址。
- B [错误]:累加器主要用于存放操作数或算术逻辑运算结果,与保存程序跳转地址无关。
- C [错误]:指令寄存器用于存放当前正在执行的指令编码,而不是转移目标地址。
- D [错误]:存储器地址寄存器用于存放 CPU 将要访问的内存单元物理地址,转移指令的目标地址需送入 PC 来控制后续取指。
填空与判断题
Q13 (2020-2021 第二学期 B 填空题)
题干:由 0、1 组成的指令为______指令。
解析:
机器指令是计算机硬件能够直接识别、译码并执行的二进制代码。
答案:机器指令。
Q14 (2020-2021 第 2 学期 A 填空题)
题干:机器指令是由______码和地址码两部分组成。
解析:
操作码说明指令要执行什么物理操作,地址码说明操作数存放的物理位置。
答案:操作码。
Q15 (南阳理工学院 C 卷 填空题)
题干:某计算机共有 125 条指令,采用一地址格式,则指令字至少取______位才能直接寻址 32 K 个存储单元。
解析:
- 共有 125 条指令,由于 ,操作码字段至少需要 7 位。
- 直接寻址 32K 个存储单元,32K 即 ,所以地址码字段至少需要 15 位。
- 一地址格式下,指令字长至少为: 位。
答案:22。
Q16 (2022-2023-2 考试 填空题)
题干:某指令系统有 128 条指令,对操作码采用固定长度二进制编码时,最少需要______位。
解析:
操作码位数 需满足 ,由于 ,所以定长操作码最少需要 7 位。
答案:7。
Q17 (2022-2023-2 考试 填空题)
题干:三地址指令 的功能为 ,由 PC 给出下一条指令地址,假设 、、 都为主存储器地址,则完成下述指令需要访存______次。
解析:
取指令访存 1 次,读取 A1 访存 1 次,读取 A2 访存 1 次,写回 A3 结果访存 1 次,共计 4 次。
答案:4。
Q18 (2022-2023-2 考试 判断题)
题干:RISC 普遍采用微程序控制器。( )
解析:
RISC 追求简单和高效率,通常采用硬件电路实现的硬布线控制器;CISC 则更常采用便于修改和扩展的微程序控制器。
答案:错。
Q19 (2022-2023-2 考试 判断题)
题干:指令采用不同寻址方式的目的是缩短指令字长,扩大寻址空间,提高编程灵活性。( )
解析:
采用基址寻址、相对寻址、寄存器间接寻址等可以极大地扩大寻址范围,并便于支持循环、数组和多道程序动态定位。
答案:对。
Q20 (南阳理工学院 C 卷 判断题)
题干:CISC 指令系统复杂庞大,指令条数多,寻址方式和指令格式也多。( )
解析:
这是 CISC 架构最为典型的核心特征。
答案:对。
Q21 (南阳理工学院 C 卷 判断题)
题干:x86 指令 的功能是将 送入寄存器 中。( )
解析:
带括号的 (2008H) 表示内存地址 2008H 中的内容(即该物理单元保存的数据),而非立即数 2008H 本身。其功能是将主存 2008H 单元中的数据送入寄存器 EAX。
答案:错。
简答与分析题
Q22 (计组 2019 秋 18 级测试 简答题)
题干:在直接寻址、寄存器寻址、间接寻址、变址寻址、基址寻址、寄存器间接寻址、相对寻址等寻址方式中,操作数在内存的是哪几种?速度最快的是哪种?
解析:
- 操作数在主存中的寻址方式包括:直接寻址、间接寻址、变址寻址、基址寻址、寄存器间接寻址、相对寻址。
- 速度最快的是:寄存器寻址。因为寄存器寻址的操作数直接保存在 CPU 通用寄存器中,执行指令时不需要访问主存,速度显著快于访存。
Q23 (2020-2021 第二学期 B 简答题)
题干:MIPS32 属于精简指令集,请简述 RISC 的特点。
解析:
- 指令精简:指令数量较少,仅保留最常用的简单指令。
- 字长固定:大多数指令采用定长设计,格式规整统一,极利于译码和流水线执行。
- 寄存器-寄存器结构:只有加载和存储指令允许访问主存,其他算术逻辑运算一律在通用寄存器之间进行。
- 寄存器数量多:设置大量的通用寄存器,尽量将临时变量保留在 CPU 内部。
- 控制器实现:控制器几乎全部采用硬布线控制器(而非微程序),以确保各指令在单周期内高效执行。
Q24 (2020-2021 第二学期 B 简答题)
题干:写出下表 MIPS 汇编指令对应的 C 语言语句;假设寄存器 $s0、$s1、$s2、$s3、$s4 对应 C 语言中的变量 i、j、f、g、h。
| 汇编指令 | C 语言语句 |
|---|---|
bne $s0, $s1, else | |
add $s2, $s3, $s4 | |
j exit | |
else: sub $s2, $s3, $s4 | |
exit: |
解析:
| 汇编指令 | C 语言语句 |
|---|---|
bne $s0, $s1, else | if (i != j) goto else; |
add $s2, $s3, $s4 | f = g + h; |
j exit | goto exit; |
else: sub $s2, $s3, $s4 | else: f = g - h; |
exit: | exit: |
合并并重构为结构化的 C 语言选择分支如下:
if (i == j) { f = g + h;} else { f = g - h;}Q25 (2020-2021 第二学期 B 分析题)
题干:已知寄存器 $s0 = 0x10010000,其余通用寄存器的值都为 0,且存储空间 0x10010000 ~ 0x10010007 的存储映像如下表所示。试指出下表各条 MIPS 汇编指令写入数据寄存器的名称及指令执行之后被写入寄存器的值(用十六进制表示,按大端字节序分析)。
| 地址 | 内容 |
|---|---|
0x10010000 | 0xf6 |
0x10010001 | 0x08 |
0x10010002 | 0xe3 |
0x10010003 | 0x67 |
0x10010004 | 0x34 |
0x10010005 | 0x96 |
0x10010006 | 0x86 |
0x10010007 | 0x0f |
| MIPS 汇编指令 | 写入寄存器的名称 | 写入寄存器的值 |
|---|---|---|
lb $t0, 0($s0) | ||
lhu $t1, 2($s0) | ||
lw $t2, 4($s0) |
解析:
| MIPS 汇编指令 | 写入寄存器的名称 | 写入寄存器的值 |
|---|---|---|
lb $t0, 0($s0) | $t0 | 0xfffffff6 |
lhu $t1, 2($s0) | $t1 | 0x0000e367 |
lw $t2, 4($s0) | $t2 | 0x3496860f |
lb读取一字节。在大端序下,地址0x10010000的内容为0xf6。因为lb为有符号字节加载,其最高位为 1,加载至 32 位寄存器时需要进行符号扩展,故高位全部补 1,得到0xfffffff6。lhu读取无符号半字(即 2 字节)。大端序下,地址0x10010002和0x10010003的内容分别为0xe3与0x67,拼接得到0xe367。进行零扩展,高位补 0,得到0x0000e367。lw读取一字(即 4 字节)。大端序下,从0x10010004开始读取 4 字节分别为0x34、0x96、0x86、0x0f,直接拼接得到该字的值为0x3496860f。 (注:若在小端序环境下,lhu $t1, 2($s0)结果为0x000067e3,lw $t2, 4($s0)结果为0x0f869634。)
Q26 (2020-2021 第 2 学期 A 简答题)
题干:已知寄存器 $s0 = 0x10000000,采用汇编指令实现以下功能:
- 将地址为
0x10000000的字数据读入到寄存器$t0。 - 将地址为
0x10000000的无符号字节数据读入到寄存器$t0。
解析:
lw $t0, 0($s0)lbu $t0, 0($s0)
Q27 (2020-2021 第 2 学期 A 分析题)
题干:写出下表 MIPS 汇编指令对应的 C 语言语句;假设寄存器 $a0、$a1、$a2 对应 C 语言中的变量 e、f、g,整型数组 A 的起始地址放在 $s0。
| 汇编指令(指令序列) | C 语言语句 |
|---|---|
add $a0, $a1, $a2 | |
add $a0, $a0, $a2 | |
addi $a0, $a0, 1 | |
sub $a0, $0, $a0 add $a0, $a0, 1 | |
lw $s0, 4($s0) |
解析:
| 汇编指令(指令序列) | C 语言语句 | 解析 |
|---|---|---|
add $a0, $a1, $a2 | e = f + g; | 源寄存器相加赋给目的寄存器 |
add $a0, $a0, $a2 | e = e + g; | 累加操作 |
addi $a0, $a0, 1 | e = e + 1; | 立即数加法 |
sub $a0, $0, $a0 add $a0, $a0, 1 | e = 1 - e; | $a0 = 0 - e 后加 1,即得 1 - e |
lw $s0, 4($s0) | 寄存器 $s0 得到 A[1] 的值 | 偏移 4 字节代表取数组中的第 2 个元素(A[1]) |
Q28 (南阳理工学院 C 卷 计算题)
题干:假设一台计算机主频为 ,在其上运行由 条指令组成的目标代码,程序主要由 类指令组成,它们所占的比例和各自的 CPI 如下表所示:
| 指令类型 | 所占比例 | CPI |
|---|---|---|
| 算术逻辑运算指令 | 60% | 1 |
| 访存指令 | 18% | 2 |
| 转移指令 | 12% | 4 |
| 其他指令 | 10% | 8 |
求该计算机的基准程序 CPI 和 MIPS数各是多少?
解析:
- 计算基准程序的平均 CPI:
- 计算 MIPS 数:
答:该计算机的基准程序 CPI 为 2.24,MIPS 数约为 446.43。
综合设计题
Q29 (南阳理工学院 C 卷 设计题)
题干:某计算机机器字长 16 位,指令系统共有 64 种操作码,操作码位数固定,且具有以下特点:
- 采用二地址格式。
- 有寄存器寻址、直接寻址、寄存器间接寻址和相对寻址(位移量为 )4 种寻址方式。
- 有 16 个通用寄存器,算术运算和逻辑运算的操作数均在寄存器中,结果也在寄存器中。
- 取数/存数指令在通用寄存器和存储器之间传送数据。
- 存储器容量为 1 MB,按字节编址。
要求: 设计算术逻辑指令、取数/存数指令的格式,并说明原因。
解析:
- 基本字段宽度分析:
- 操作码 64 种,采用定长操作码,占 6 位。
- 16 个通用寄存器,寄存器编号字段各占 4 位。
- 4 种寻址方式,寻址方式字段(M)占 2 位。
- 算术逻辑(ALU)指令设计(单字长,16 位):
- 格式:
[OP(6位)] [R1(4位)] [R2(4位)] [保留(2位)] - 原因:算术和逻辑指令的两个操作数都在寄存器中,结果写回 R1,不需要额外的访存寻址方式字段。直接提供两个寄存器编码即可,总长度为 14 位,预留 2 位,可限制在 16 位单字长内。
- 格式:
- 取数/存数指令设计(双字长,32 位):
- 存储器容量为 1MB,按字节编址,主存物理地址需要 20 位。16 位单指令字无法直接容纳。
- 直接寻址指令格式:
第一字:
[OP(6位)] [R(4位)] [M = 01(2位)] [A高4位(4位)]第二字:[A低16位(16位)]原因:合并两部分可以提供完整的 20 位直接物理地址。 - 寄存器间接寻址指令格式(单字长,16 位):
[OP(6位)] [R(4位)] [M = 10(2位)] [Raddr(4位)]原因:有效地址已经在 Raddr 寄存器中,单字长指令即可完成传送。 - 相对寻址指令格式(双字长,32 位):
第一字:
[OP(6位)] [R(4位)] [M = 11(2位)] [保留(4位)]第二字:[位移量(16位,低8位存放-128~+127的补码,高位符号扩展)]原因:利用相对偏移量在第二字中存放,完成 PC 相对移位计算。
Q30 (2022-2023-2 考试 设计题)
题干:某计算机字长为 16 位,主存地址空间大小为 128KB,按字编址。采用单字长指令格式,转移指令采用相对寻址方式,相对偏移量用补码表示,寻址方式、指令各字段定义如下图所示:

- 该计算机最多有多少个通用寄存器?
- 若操作码
0010B表示加法操作(助记符为add),寄存器R4和R5的编号分别为100B和101B,R4的内容为1234H,R5的内容为1111H,地址1234H中的内容为5678H,地址5678H中的内容为1234H,则汇编语言为"add (R4), R5",该指令的功能为((R4)) + (R5) → R5,写出该指令的十六进制机器码。 - 该指令执行后,哪些寄存器和存储单元中的内容会改变?改变后的内容是什么?
解析:
- 寄存器编号字段(RS 与 RD)占 3 位,所以最多有 个通用寄存器。
- 指令
"add (R4), R5"中:- 操作码 OP =
0010。 - 源操作数采用寄存器间接寻址
(R4),因此寻址方式 MS =001,寄存器编号 RS =100。 - 目的操作数采用寄存器寻址
R5,因此寻址方式 MD =000,寄存器编号 RD =101。 - 拼接得到机器二进制码:
0010 0011 0000 0101,转换为十六进制为2305H。
- 操作码 OP =
- 执行后,寄存器
R5中的内容会发生改变。(R4) = 1234H,主存地址 1234H 中的数据为5678H。(R5) = 1111H。- 执行加法:
5678H + 1111H = 6789H,写回 R5。 - 答:寄存器
R5的内容改变,其新值变为6789H。其他寄存器与主存单元内容均保持不变。
Q31 (2022-2023-2 考试 设计题)
题干:某 CPU 如下图所示,其中 AC 为累加器,状态寄存器保存指令执行过程中的状态(ZF、OF等)。a、b、c、d 为 4 个特殊寄存器(PC、AR/MAR、IR 和 DR/MDR 中的某一个)。图中箭头表示信息传送的方向:

- 根据 CPU 的功能和结构,说明图中
a、b、c、d4 个寄存器分别对应题目中的哪个寄存器? - 简述
LDA address的数据通路,其中address为主存地址,指令的功能是将主存address单元的内容送入 AC 中。(在数据通路描述中,请将图中的a、b、c、d换成对应的寄存器名称)。
解析:
- 依据图中的数据通路连接逻辑:
a连在主存数据端和 AC 之间,充当数据缓冲,对应 DR(MDR)。b直接给主存输入地址,对应 AR(MAR)。c接收 MDR 的输出,并且把指令输出给译码控制器,对应 IR。d的输出可送入地址总线,且接收自增控制,对应 PC。
LDA address指令的数据通路步骤:- 取指阶段:
PC → AR:将程序计数器中的指令地址送入地址寄存器。M[AR] → DR:从主存中取出指令,送入数据寄存器。DR → IR:将指令送入指令寄存器。PC + 1 → PC:程序计数器自动加 1。
- 执行阶段:
5.
IR(address) → AR:将指令中的操作数地址送入地址寄存器。 6.M[AR] → DR:访问主存,将操作数读入数据寄存器。 7.DR → AC:将数据送入累加器 AC 中。
- 取指阶段:
Q32 (2020-2021 第二学期 B / 2020-2021 第 2 学期 A 综合应用题)
题干:MIPS 微处理器结构如图所示:

当该微处理器初始化时,通用寄存器的值与编码一致,数据存储器以字为最小单位且所有存储单元都初始化为 0x5a,PC 寄存器初始值为 0,指令寄存器从地址 0 开始存储下面汇编指令段的机器指令(MIPS32 每条机器指令占 4 个字节,寄存器为 32 位)。
- 完善下面各汇编指令的机器指令(采用二进制表示)。
add $9, $10, $11:Op = 000000,Rs = 01010,Rt = 01011,Rd = ______,Shamt = 00000,Funct = 100000beq $9, $0, b1:Op = 000100,Rs = 01001,Rt = 00000,偏移量 =______or $9, $10, $11:Op = ______,Rs = ______,Rt = 01011,Rd = 01001,Shamt = 00000,Funct = 100101sw $9, 2($10):Op = 101011,Rs = 01010,Rt = 01001,偏移量 =0000000000000010j exit:Op = 000010,目标地址 =______B1: and $9, $10, $11sw $9, 3($11)exit:
- 请写出指令
add $9, $10, $11执行后,寄存器$9、$10、$11里面的内容。
解析:
- 完善机器指令:
add $9, $10, $11中 Rd 对应的通用寄存器为$9,故Rd = 01001。beq $9, $0, b1分支指令:当前beq指令地址为 4,下一条顺序指令地址为 8。目标标签B1地址为 20。偏移量 ,其 16 位二进制补码形式为0000000000000011。or $9, $10, $11属于 R 型指令:其主操作码Op = 000000,源寄存器 Rs 对应$10,故Rs = 01010。j exit无条件跳转指令:目标标签exit地址为 28。J 型指令的 26 位 target 字段值为 ,故目标地址字段二进制为00000000000000000000000111(即 26 位无符号数 7)。
- 指令
add $9, $10, $11执行前,寄存器的值与它们的编码一致,即($10) = 10,($11) = 11。执行后,($9) = 10 + 11 = 21(十六进制为0x00000015)。 答:各寄存器内容为:$9中的内容变为0x00000015;$10的内容保持不变,仍为0x0000000a;$11的内容保持不变,仍为0x0000000b。
Q33 (计组 2019 秋 18 级测试 设计题)
题干:如下图所示为双总线结构机器的数据通路:

其中,IR 为指令寄存器,PC 为程序计数器(具有自增功能),M 为主存(受 R/W 信号控制),AR 为地址寄存器,DR 为数据缓冲寄存器,ALU 有加、减控制信号决定完成何种操作,控制信号 G 控制一个门电路,连接在双总线之间。
写出 SUB R1, R0 指令(该指令完成 (R1) - (R0) -> R1 的功能操作)的指令周期流程图,假设该指令的地址已放入 PC 中,并列出相应的微操作控制信号序列。
解析:
指令周期流程图及微操作控制信号序列如下:
| 阶段 | 步骤 | 微操作功能 | 产生的控制信号 |
|---|---|---|---|
| 取指周期 | 1 | (PC) → AR | PCo, G, ARi |
| 2 | M → DR, (PC) + 1 → PC | Read, DRi (PC 自增隐含在硬件中) | |
| 3 | DR → IR | DRo, G, IRi | |
| 执行周期 | 4 | (R1) → X | R1o, G, Xi |
| 5 | (R0) → Y | R0o, G, Yi | |
| 6 | (X) - (Y) → R1 | ALUsub, G, R1i |
- 取指阶段:将 PC 中的地址通过 G 门送入 AR(
PCo, G, ARi);发出读命令从主存读出指令到 DR;再将 DR 中的指令送入 IR 译码(DRo, G, IRi)。 - 执行阶段:被减数 R1 通过总线和 G 门送入 ALU 的输入暂存器 X(
R1o, G, Xi);减数 R0 送入输入暂存器 Y(R0o, G, Yi);最后调用减法操作并将运算结果写回 R1(ALUsub, G, R1i)。
习题5:课后习题详解

以下按题目顺序给出题干与详细答案解析。
习题5.1 解释下列名词
题干: 解释下列名词:指令、指令系统、操作码、扩展操作码、地址码、寻址方式、程序计数器 PC、有效地址、存储器堆栈、寄存器堆栈、基址寄存器、变址寄存器、转子指令、CISC、RISC。
| 名词 | 详细解释 |
|---|---|
| 指令 | 指令是计算机能够识别并执行的机器命令,通常由操作码和地址码等字段组成。操作码说明”做什么操作”,地址码说明”操作数在哪里”或”结果放在哪里”。 |
| 指令系统 | 指令系统是一台计算机能够执行的全部机器指令的集合,也称指令集。它规定了指令格式、指令功能、寻址方式、寄存器使用规则等内容,是软件和硬件之间的重要接口。 |
| 操作码 | 操作码是指令中用于指出操作性质的字段。例如加法、减法、传送、转移、访存等操作都需要由不同的操作码表示。 |
| 扩展操作码 | 扩展操作码是指操作码长度不固定,把某些较短操作码保留作为前缀,再利用后续字段扩展出更多指令的编码方法。它可以在指令字长一定的情况下兼顾多地址指令和少地址指令。 |
| 地址码 | 地址码是指令中用于指出操作数地址、结果地址、寄存器编号或立即数等信息的字段。它回答”操作数从哪里来、结果到哪里去”的问题。 |
| 寻址方式 | 寻址方式是根据指令中的地址码求出操作数本身或操作数有效地址的方法。例如立即寻址、直接寻址、间接寻址、寄存器寻址、基址寻址、变址寻址、相对寻址等。 |
| 程序计数器 PC | PC 是保存下一条将要执行指令地址的寄存器。顺序执行时,PC 自动增加;发生转移时,PC 被修改为转移目标地址。 |
| 有效地址 | 有效地址是通过寻址方式计算得到的操作数实际所在的主存地址。形式地址不一定就是有效地址,必须经过相应寻址规则转换。 |
| 存储器堆栈 | 存储器堆栈是在主存中开辟的一片按”后进先出”原则访问的区域,通常由栈指针 SP 指示栈顶位置,用于保存返回地址、现场信息、临时数据等。 |
| 寄存器堆栈 | 寄存器堆栈是由一组寄存器构成的堆栈,也遵循后进先出原则。它访问速度快,但容量较小。 |
| 基址寄存器 | 基址寄存器用于保存某一存储区的起始地址或基地址。基址寻址中,有效地址通常为:有效地址 = 基址寄存器内容 + 形式地址。 |
| 变址寄存器 | 变址寄存器用于保存数组下标、循环偏移量等变址值。变址寻址中,有效地址通常为:有效地址 = 形式地址 + 变址寄存器内容。 |
| 转子指令 | 转子指令通常指转移到子程序的指令,即子程序调用指令。它不仅改变 PC,使程序转向子程序入口,还要保存返回地址,以便子程序执行完后返回原程序。 |
| CISC | CISC 是复杂指令系统计算机。其特点是指令数量多、格式复杂、寻址方式多、单条指令功能较强,但译码和控制较复杂。 |
| RISC | RISC 是精简指令系统计算机。其特点是指令数量少、格式规整、寻址方式少、多数指令可在一个时钟周期内完成,常采用流水线和大量通用寄存器。 |
习题5.2 选择题(考研真题)
5.2(1)
题干: [2022] 下列选项中,属于指令系统体系结构 ISA 规定的内容是__________。 Ⅰ. 指令字格式和指令类型 Ⅱ. CPU 的时钟周期 Ⅲ. 通用寄存器个数和位数 Ⅳ. 加法器的进位方式
A. 仅Ⅰ、Ⅱ B. 仅Ⅰ、Ⅲ C. 仅Ⅱ、Ⅳ D. 仅Ⅰ、Ⅲ、Ⅳ
答案:B
解析:
ISA 规定的是程序员可见的机器级结构,例如指令格式、指令类型、寄存器组织、寻址方式等;CPU 时钟周期和加法器进位方式属于具体硬件实现,不属于 ISA 规定内容。
- A [错误]:Ⅰ正确,但Ⅱ”CPU 的时钟周期”属于实现层面的硬件组织,不属于 ISA。
- B [正确]:Ⅰ”指令字格式和指令类型”、Ⅲ”通用寄存器个数和位数”都属于 ISA 规定内容。
- C [错误]:Ⅱ和Ⅳ都属于硬件实现细节,不属于 ISA。
- D [错误]:Ⅰ和Ⅲ正确,但Ⅳ”加法器的进位方式”是运算器内部实现方式,不属于 ISA。
5.2(2)
题干: [2023] 某运算类型指令中有一个地址码为通用寄存器编号,对应通用寄存器中存放的是操作数或操作数的地址,CPU 区分两者的依据是__________。
A. 操作数的寻址方式 B. 操作数的编码方式 C. 通用寄存器的编号 D. 通用寄存器的内容
答案:A
解析:
- A [正确]:寄存器中存放的是操作数本身还是操作数地址,由寻址方式决定。例如寄存器直接寻址表示寄存器中是操作数,寄存器间接寻址表示寄存器中是操作数地址。
- B [错误]:操作数编码方式只说明数据如何表示,如补码、原码、浮点数等,不能说明寄存器内容是数据还是地址。
- C [错误]:寄存器编号只说明使用哪个寄存器,不决定寄存器内容的解释方式。
- D [错误]:寄存器内容本身只是一串二进制数,CPU 不能仅凭内容判断它是操作数还是地址。
5.2(3)
题干: [2017] 某计算机按字节编址,指令字长固定且只有两种指令格式,其中三地址指令 29 条,二地址指令 107 条,每个地址字段为 6 位,则指令字长至少应该是__________。
A. 24 位 B. 26 位 C. 28 位 D. 32 位
答案:A
解析:
三地址指令需要 3 个地址字段:
三地址指令有 29 条,因此操作码至少需要满足:
所以三地址格式至少需要:
但题目说明计算机按字节编址,指令字长通常应为字节的整数倍,因此至少取 24 位。
- A [正确]:24 位是大于等于 23 位的最小字节整数倍。
- B [错误]:26 位虽能表示,但不是”至少”。
- C [错误]:28 位虽能表示,但不是最小值。
- D [错误]:32 位也能表示,但不是最小值。
5.2(4)
题干: [2022] 设计某指令系统时,假设采用 16 位定长指令字格式,操作码使用扩展编码方式,地址码为 6 位,包含零地址、一地址和二地址 3 种格式的指令。若二地址指令有 12 条,一地址指令有 254 条,则零地址指令的条数最多为__________。
A. 0 B. 2 C. 64 D. 128
答案:D
解析:
二地址指令需要两个地址码:
指令总长 16 位,所以二地址指令操作码长度为:
4 位操作码最多有 种编码。已用 12 种作为二地址指令,还剩 4 种 4 位前缀可用于扩展。
一地址指令保留一个 6 位地址码,所以可用另一个 6 位字段扩展操作码:
种一地址扩展编码。已用 254 条一地址指令,还剩 2 个扩展前缀可继续扩展为零地址指令。零地址指令没有地址码,因此最后一个 6 位地址字段也可作为扩展操作码:
- A [错误]:仍有扩展编码空间。
- B [错误]:2 是剩余的一地址扩展前缀数,不是零地址指令条数。
- C [错误]:只相当于 1 个前缀继续扩展。
- D [正确]:2 个前缀,每个可扩展出 条零地址指令,共 128 条。
5.2(5)
题干: [2014] 某计算机有 16 个通用寄存器,采用 32 位定长指令字,操作码字段含寻址方式位为 8 位,Store 指令的源操作数和目的操作数分别采用寄存器直接寻址和基址寻址方式。若基址寄存器可使用任意一个通用寄存器,且偏移量用补码表示,则 Store 指令中偏移量的取值范围是__________。
A. B. C. D.
答案:A
解析:
16 个通用寄存器需要 位。Store 指令中:
- 操作码字段:8 位;
- 源寄存器编号:4 位;
- 基址寄存器编号:4 位。
所以偏移量位数为:
16 位补码范围为 ,即 。
- A [正确]:16 位补码的标准范围。
- B [错误]:补码负数最小值应为 ,正数最大值应为 。
- C [错误]:这是 17 位补码近似范围,不符合 16 位偏移量。
- D [错误]:不是补码表示范围。
5.2(6)
题干: [2020] 某计算机采用 16 位定长指令字格式,操作码位数和寻址方式位数固定,指令系统有 48 条指令,支持直接、间接、立即、相对 4 种寻址方式。单地址指令中,直接寻址方式的可寻址范围是__________。
A. B. C. D.
答案:A
解析:
48 条指令需要操作码位数:
所以操作码为 6 位。
4 种寻址方式需要 位。
单地址指令中地址字段长度为:
直接寻址地址字段通常按无符号地址解释,因此范围为 。
- A [正确]:8 位直接地址的无符号范围。
- B [错误]:对应 10 位地址字段。
- C [错误]:这是 8 位补码范围,适合相对位移,不适合直接寻址。
- D [错误]:这是 10 位补码范围。
5.2(7)
题干: [2016] 某指令格式中,M 为寻址方式,I 为变址寄存器编号,D 为形式地址。若采用先变址后间址的寻址方式,则操作数的有效地址是__________。
A. B. C. D.
答案:C
解析:
先变址:
这一步得到一个地址。后间址:再到该地址所指的主存单元中取内容作为有效地址:
- A [错误]:把 I 当作数值本身,而不是变址寄存器内容。
- B [错误]:只完成了变址,没有完成间址。
- C [正确]:先计算 ,再取该地址中的内容。
- D [错误]:先对 I 间址,再加 D,顺序不符合”先变址后间址”。
5.2(8)
题干: [2009] 某计算机字长为 16 位,主存按字节编址,转移指令采用相对寻址,由两个字节组成,第一字节为操作码字段,第二字节为相对位移量字段。假定取指令时,每取一个字节 PC 自动加 1。若某转移指令所在主存地址为 2000H,相对位移量字段的内容为 06H,则该转移指令成功转移后的目标地址是__________。
A. 2006H B. 2007H C. 2008H D. 2009H
答案:C
解析:
转移指令地址为 2000H,指令长度为 2 字节。
取完该指令后,PC 已自动加 2:
相对位移量为 06H,目标地址为:
- A [错误]:没有考虑取完 2 字节指令后 PC 已变为 2002H。
- B [错误]:计算基准错误。
- C [正确]:。
- D [错误]:多加了 1。
5.2(9)
题干: [2011] 偏移寻址通过将某个寄存器内容与一个形式地址相加来生成有效地址。下列寻址方式中,不属于偏移寻址方式的是__________。
A. 间接寻址 B. 基址寻址 C. 相对寻址 D. 变址寻址
答案:A
解析:
偏移寻址的共同形式是:
基址寻址、变址寻址、相对寻址都属于偏移寻址。
- A [正确]:间接寻址是通过地址字段所指单元中的内容得到有效地址,不是寄存器内容加形式地址。
- B [错误]:基址寻址属于偏移寻址。
- C [错误]:相对寻址属于偏移寻址,常用 。
- D [错误]:变址寻址属于偏移寻址,常用 。
5.2(10)
题干: [2013] 假设变址寄存器 R 的内容为 1000H,指令中的形式地址为 2000H;地址 1000H 中的内容为 2000H,地址 2000H 中的内容为 3000H,地址 3000H 中的内容为 4000H,则变址寻址方式下访问到的操作数是__________。
A. 1000H B. 2000H C. 3000H D. 4000H
答案:D
解析:
变址寻址有效地址为:
已知 ,,所以 。
操作数是地址 3000H 中的内容:。
- A [错误]:这是变址寄存器 R 的内容。
- B [错误]:这是形式地址,也是地址 1000H 中的内容。
- C [错误]:这是有效地址,不是操作数。
- D [正确]:地址 3000H 中的内容为 4000H。
5.2(11)
题干: [2017] 下列寻址方式中,最适合按下标顺序访问一维数组元素的是__________。
A. 相对寻址 B. 寄存器寻址 C. 直接寻址 D. 变址寻址
答案:D
解析:
数组访问通常具有如下形式:数组元素地址 = 数组首地址 + 下标偏移量。变址寻址正适合这种访问方式。
- A [错误]:相对寻址主要用于程序转移。
- B [错误]:寄存器寻址只能访问寄存器中的操作数,不适合遍历主存数组。
- C [错误]:直接寻址适合访问固定地址,不适合下标变化的数组访问。
- D [正确]:变址寻址适合数组、字符串、循环结构中的顺序访问。
5.2(12)
题干: [2019] 某计算机采用大端方式,按字节编址。某指令操作数的机器数为 1234 FF00H,该操作数采用基址寻址方式,形式地址用补码表示为 FF12H,基址寄存器的内容为 F000 0000H,则该操作数的 LSB 所在的地址是__________。
A. F000 FF12H B. F000 FF15H C. EFFF FF12H D. EFFF FF15H
答案:D
解析:
形式地址 FF12H 是 16 位补码,FF12H 对应的真值为 。
基址寄存器内容为 F0000000H,有效地址为:
操作数机器数为 1234FF00H,共 4 字节。大端方式下,最高有效字节放在低地址,最低有效字节 LSB 放在最高地址:
| 地址 | 内容 |
|---|---|
| EFFFFF12H | 12H |
| EFFFFF13H | 34H |
| EFFFFF14H | FFH |
| EFFFFF15H | 00H |
LSB 为 00H,所在地址为 EFFFFF15H。
- A [错误]:没有正确处理 FF12H 的补码负偏移,也没有考虑 LSB 在最高地址。
- B [错误]:没有正确处理补码负偏移。
- C [错误]:这是操作数最高有效字节 MSB 的地址。
- D [正确]:LSB 所在地址为 EFFFFF15H。
5.2(13)
题干: [2018] 按字节编址的计算机中,某 double 型数组 A 的首地址为 2000H,使用变址寻址和循环结构访问数组 A,保存数组下标的变址寄存器初值为 0,每次循环取一个数组元素,其偏移地址为变址值乘以 sizeof(double),取完后变址寄存器内容自动加 1。若某次循环所取元素的地址为 2100H,则进入该次循环时变址寄存器的内容是__________。
A. 2 B. 32 C. 64 D. 100
答案:B
解析:
double 类型通常占 sizeof(double) = 8 字节。
数组元素地址:
已知 ,所以 。
- A [错误]:2 对应偏移 16 字节。
- B [正确]:32 对应偏移 字节。
- C [错误]:64 对应偏移 512 字节。
- D [错误]:100 若按十进制,对应偏移 800 字节;若按十六进制,也不符合题意。
5.2(14)
题干: [2011] 某计算机有一个标志寄存器,其中有进位/借位标志 CF、零标志 ZF、符号标志 SF 和溢出标志 OF,条件转移指令 bgt 无符号整数比较大于时转移的转移条件是__________。
A. B. C. D.
答案:C
解析:
无符号数比较通常通过减法实现。若 ,对于无符号整数, 的条件是:
- 没有借位:;
- 结果不为 0:。
因此 且 ,等价于 。
- A [错误]: 表示有借位或结果为 0,对应小于或等于。
- B [错误]:SF 是有符号数符号标志,不适合无符号大于判断。
- C [正确]:无符号大于要求 且 。
- D [错误]:SF 不用于无符号大小比较。
5.2(15)
题干:
[2018] 减法指令 sub R1, R2, R3 的功能为 ,该指令执行后将生成进位/借位标志 CF 和溢出标志 OF。若 ,,则该减法指令执行后,CF 与 OF 分别为__________。
A. , B. , C. , D. ,
答案:A
解析:
计算:
从无符号数角度看:,所以减法时没有借位,。
从有符号数角度看:,,所以 。255 在 32 位有符号整数范围内,没有溢出,。
- A [正确]:无借位、无溢出。
- B [错误]:CF 不应为 1,因为无符号减法没有借位。
- C [错误]:OF 不应为 1,因为结果 255 可表示。
- D [错误]:CF 和 OF 都不应为 1。
5.2(16)
题干: [2009] 下列关于 RISC 的叙述中,错误的是__________。
A. RISC 普遍采用微程序控制器 B. RISC 中的大多数指令在一个时钟周期内完成 C. RISC 的内部通用寄存器数量比 CISC 的多 D. RISC 的指令数、寻址方式和指令格式种类比 CISC 的少
答案:A
解析:
- A [错误,故选]:RISC 指令简单、格式规整,通常采用硬布线控制器,而不是普遍采用微程序控制器。
- B [正确]:RISC 的多数简单指令可在一个时钟周期内完成。
- C [正确]:RISC 通常设置较多通用寄存器,以减少访存次数。
- D [正确]:RISC 的指令数、寻址方式和指令格式种类通常少于 CISC。
习题5.3 简答题
5.3(1)
题干: 什么叫指令?什么叫指令系统?
解析:
指令是计算机能够识别和执行的一条机器命令。
一条指令通常包括:
其中:
- 操作码说明执行什么操作;
- 地址码说明操作数在哪里或结果存放在哪里。
指令系统是一台计算机所能执行的全部指令的集合。它规定了指令格式、操作类型、操作数类型、寻址方式、寄存器组织、指令执行对标志位的影响等。因此,指令系统是软件和硬件之间的接口。
5.3(2)
题干: 计算机中为什么要设置多种操作数寻址方式?
解析:
设置多种寻址方式的原因主要有以下几点:
第一,提高程序设计的灵活性。 不同程序结构需要不同的数据访问方式。例如数组访问适合变址寻址,程序转移适合相对寻址。
第二,缩短指令长度。 如果每条指令都直接给出完整主存地址,指令会很长。使用寄存器寻址、基址寻址、变址寻址等方式,可以减少地址字段长度。
第三,扩大寻址范围。 通过基址寄存器、变址寄存器、PC 等寄存器与形式地址相加,可以访问比形式地址字段本身更大的地址空间。
第四,便于程序浮动和重定位。 基址寻址和相对寻址可以让程序装入到不同内存位置后仍能正确运行。
第五,提高访问效率。 寄存器寻址比主存寻址快,合理使用寄存器可以减少访存次数,提高执行速度。
5.3(3)
题干: 操作数寻址方式在指令中如何表示?
解析:
操作数寻址方式通常通过指令中的寻址方式字段表示。常见做法有两种:
第一,设置专门的寻址方式字段。 例如指令中包含字段 M:
其中 OP 表示操作码,M 表示寻址方式,A 表示形式地址或寄存器编号。
第二,由操作码隐含规定寻址方式。 有些指令系统不设置独立寻址方式字段,而是由操作码本身确定操作数在哪里。例如某些机器中,访存指令、寄存器运算指令、立即数指令分别使用不同操作码。
5.3(4)
题干: 基址寻址和变址寻址的作用是什么?分析它们的异同点。
解析:
基址寻址的有效地址通常为 ,其中 是基址寄存器内容, 是形式地址或位移量。基址寻址的主要作用是程序重定位和扩大寻址范围。程序装入内存后,只需要改变基址寄存器的内容,就可以让程序在新的内存区域中正确运行。
变址寻址的有效地址通常为 ,其中 是变址寄存器内容, 通常是数组首地址或形式地址。变址寻址的主要作用是访问数组、字符串、表格等连续存储结构。
二者相同点:
- 都采用”寄存器内容 + 形式地址”的方式形成有效地址;
- 都能扩大寻址范围;
- 都属于偏移寻址。
二者不同点:
| 比较项目 | 基址寻址 | 变址寻址 |
|---|---|---|
| 寄存器内容 | 通常是基地址 | 通常是下标或偏移量 |
| 形式地址 | 通常是位移量 | 通常是数组首地址 |
| 主要用途 | 程序重定位、存储区定位 | 数组、循环、表格访问 |
| 使用特点 | 基址寄存器一般在程序运行期间相对稳定 | 变址寄存器常随循环不断变化 |
5.3(5)
题干: RISC 处理器有什么特点?
解析:
RISC 处理器的主要特点如下:
- 指令数量少,指令功能简单。
- 指令格式规整,通常采用定长指令。
- 寻址方式少。
- 大多数指令在一个时钟周期内完成。
- 访存操作通常只由 load/store 指令完成,算术逻辑运算主要在寄存器之间进行。
- 通用寄存器数量较多。
- 控制器多采用硬布线控制。
- 适合流水线执行,有利于提高指令吞吐率。
- 编译器承担较多优化任务。
5.3(6)
题干: 比较定长指令与变长指令的优缺点。
解析:
定长指令是指所有指令长度相同。
优点:
- 指令格式规整;
- 取指和译码简单;
- 便于流水线设计;
- 控制逻辑简单。
缺点:
- 对简单指令可能浪费位数;
- 指令表示不够灵活;
- 在指令种类很多或寻址方式复杂时,编码效率较低。
变长指令是指不同指令长度可以不同。
优点:
- 编码灵活;
- 简单指令可以较短,复杂指令可以较长;
- 指令编码空间利用率较高;
- 有利于支持复杂寻址方式。
缺点:
- 取指和译码复杂;
- 指令边界不容易判断;
- 不利于流水线设计;
- 控制逻辑复杂。
5.3(7)
题干: 指令的地址码与指令中的操作码含义有何不同?
解析:
操作码说明”做什么操作”,例如加法、减法、传送、转移、读存储器、写存储器等。
地址码说明”操作数在哪里”或”结果放在哪里”,例如操作数在寄存器中、操作数在主存中、操作数就是指令中的立即数、结果写回某个寄存器或存储单元等。
因此:
习题5.4 根据操作数所在的位置填写寻址方式
题干: 根据操作数所在的位置,在空格处填写其寻址方式。 (1)操作数在指令中为__________寻址方式。 (2)操作数地址(主存)在指令中为__________寻址方式。 (3)操作数在寄存器中为__________寻址方式。 (4)操作数地址在寄存器中为__________寻址方式。
解析:
| 小题 | 答案 | 解析 |
|---|---|---|
| (1) | 立即寻址方式 | 操作数直接放在指令中,因此是立即寻址。 |
| (2) | 直接寻址方式 | 指令中直接给出主存地址,因此是直接寻址。 |
| (3) | 寄存器寻址方式 | 操作数在寄存器中,因此是寄存器寻址。 |
| (4) | 寄存器间接寻址方式 | 寄存器中存放的是操作数地址,因此是寄存器间接寻址。 |
习题5.5
题干: 某计算机字长为 16 位,运算器为 16 位,有 16 个通用寄存器,8 种寻址方式,主存为 128KW,指令中操作数地址码由寻址方式字段和寄存器号字段组成。请回答下列问题。 (1)单操作数指令最多有多少条? (2)双操作数指令最多有多少条? (3)直接寻址的范围多大? (4)变址寻址的范围多大?
解析:
已知有 8 种寻址方式,因此寻址方式字段需要 位。
有 16 个通用寄存器,因此寄存器号字段需要 位。
所以每个操作数地址码长度为 位。
(1)单操作数指令最多有多少条?
单操作数指令需要 1 个操作数地址码,即 7 位。
指令字长为 16 位,所以操作码位数为 位。
因此单操作数指令最多有 条。
答案:512 条。
(2)双操作数指令最多有多少条?
双操作数指令需要 2 个操作数地址码: 位。
指令字长为 16 位,所以操作码位数为 位。
因此双操作数指令最多有 条。
答案:4 条。
(3)直接寻址的范围多大?
按题干”操作数地址码由寻址方式字段和寄存器号字段组成”理解,直接地址可由寄存器号字段位置给出,其位数为 4 位。
因此直接寻址范围为 ,即 。
答案:0~15。
(4)变址寻址的范围多大?
运算器为 16 位,通用寄存器也按 16 位考虑。
变址寄存器可提供 16 位变址量,因此变址寻址范围为 。
答案:64K。
习题5.6
题干: 假设某计算机的指令长度固定为 16 位,具有双操作数、单操作数和无操作数 3 类指令,每个操作数地址规定用 6 位表示。 (1)若操作码字段不固定,现已设计出 条双操作数指令、 条无操作数指令,在此情况下,这台计算机最多可以设计出多少条单操作数指令? (2)若操作码字段不固定,当双操作数指令争取最大数时,且在此基础上,单操作数指令条数也取最大值,试计算这 3 类指令最多可拥有多少条指令?
(1)求最多单操作数指令条数
双操作数指令需要两个地址字段: 位。
所以双操作数指令的基本操作码字段为 位。
4 位操作码共有 种编码。
已经设计出 条双操作数指令,所以还剩 个 4 位前缀可用于扩展。
单操作数指令需要保留一个 6 位地址字段,因此还可以用另一个 6 位字段扩展操作码。
所以可形成的单操作数扩展编码数为 。
但还需要设计 条无操作数指令。无操作数指令没有地址字段,因此可在单操作数扩展编码的基础上继续使用最后 6 位扩展。每保留 1 个单操作数扩展编码,可扩展出 条无操作数指令。
为了容纳 条无操作数指令,需要保留 个单操作数扩展编码。
所以最多单操作数指令条数为:
(2)三类指令最多各有多少条?
要让双操作数指令尽可能多,但还必须保留编码空间给单操作数和无操作数指令。
双操作数指令最多不能占满全部 16 个 4 位操作码,否则无法再扩展出单操作数和无操作数指令。
所以双操作数指令最多为 条。
剩下 1 个 4 位前缀可用于单操作数扩展。单操作数扩展编码数为 。但还要保留 1 个单操作数扩展编码继续扩展为无操作数指令。
所以单操作数指令最多为 条。
剩下 1 个单操作数扩展编码可继续扩展为无操作数指令: 条。
因此:
| 指令类型 | 最多条数 |
|---|---|
| 双操作数指令 | 15 |
| 单操作数指令 | 63 |
| 无操作数指令 | 64 |
总数为 。
答案:三类指令最多共 142 条,其中双操作数 15 条,单操作数 63 条,无操作数 64 条。
习题5.7
题干: 设相对寻址的转移指令占 3 个字节,第一个字节是操作码,第二个字节是相对位移量补码表示的低 8 位,第三个字节是相对位移量补码表示的高 8 位,每当 CPU 从存储器取出一个字节时,便自动完成 。请回答下列问题。 (1)若 PC 当前值为 256(十进制),要求转移到 290(十进制),则转移指令第二、三字节的机器代码是什么? (2)若 PC 当前值为 128(十进制),要求转移到 110(十进制),则转移指令第二、三字节的机器代码又是什么?
(1)PC = 256,目标地址 = 290
转移指令长度为 3 字节。取完该指令后,PC 自动增加 3:
相对位移量应满足:
31 的 16 位十六进制补码为 001FH。题目规定第二字节放低 8 位,第三字节放高 8 位。
答案:第二字节为 1FH,第三字节为 00H。
(2)PC = 128,目标地址 = 110
取完 3 字节指令后:
位移量为 。
将 表示为 16 位补码。先求 的 16 位十六进制:。
16 位补码:。
所以 的 16 位补码为 FFEBH。
第二字节放低 8 位(EBH),第三字节放高 8 位(FFH)。
答案:第二字节为 EBH,第三字节为 FFH。
习题5.8
题干: 计算机的指令格式包括操作码 OP、寻址方式特征位 I 和形式地址 D 等 3 个字段,其中 OP 字段为 6 位,寻址方式特征位字段 I 为 2 位,形式地址字段 D 为 8 位。I 的取值与寻址方式的对应关系如下:
- I = 00:直接寻址。
- I = 01:用变址寄存器 X1 进行变址。
- I = 10:用变址寄存器 X2 进行变址。
- I = 11:相对寻址。
设 ,,,以下 4 条指令均采用上述指令格式,请确定这些指令的有效地址。 (1)4420H;(2)2244H;(3)1322H;(4)3521H。
解析:
指令格式为:
因此高 6 位为 OP,中间 2 位为 I,低 8 位为 D。
(1)4420H
所以 ,。I = 00 表示直接寻址,。
答案:20H。
(2)2244H
所以 ,。I = 10 表示用 X2 变址,。
答案:1166H。
(3)1322H
所以 ,。I = 11 表示相对寻址,。
答案:1256H。
(4)3521H
所以 ,。I = 01 表示用 X1 变址,。
答案:0058H。
习题5.9
题干: 某计算机 A 有 60 条指令,指令的操作码字段固定为 6 位,从 000000~111011,该计算机的后续机型 B 中需要增加 32 条指令,并与 A 保持兼容。 (1)试采用扩展操作码为计算机 B 设计指令操作码。 (2)求出计算机 B 中操作码的平均长度。
(1)设计扩展操作码
6 位操作码共有 种编码。
计算机 A 已使用 60 条(000000~111011),剩余 4 个 6 位编码为:111100、111101、111110、111111。
计算机 B 要新增 32 条指令。可将这 4 个剩余编码作为扩展操作码前缀,每个前缀再扩展 3 位:,刚好满足新增 32 条指令。
可设计为:
| 扩展前缀 | 扩展后操作码范围 |
|---|---|
| 111100 | 111100000 ~ 111100111 |
| 111101 | 111101000 ~ 111101111 |
| 111110 | 111110000 ~ 111110111 |
| 111111 | 111111000 ~ 111111111 |
原有 60 条指令仍使用 6 位操作码,新增 32 条指令使用 9 位操作码。
(2)求平均操作码长度
原有 60 条指令,每条操作码长度为 6 位。新增 32 条指令,每条操作码长度为 位。
平均长度为:
答案:计算机 B 中操作码平均长度约为 7.04 位。
习题5.10
题干: 以下 MIPS 指令代表什么操作?写出它的 MIPS 汇编指令格式。
解析:
MIPS R 型指令格式为:
将题中机器码分段:
对应字段为:
| 字段 | 二进制 | 十进制/十六进制 | 含义 |
|---|---|---|---|
| op | 000000 | 0 | R 型指令 |
| rs | 00101 | 5 | 源寄存器 \5$ |
| rt | 01111 | 15 | 源寄存器 \15$ |
| rd | 10000 | 16 | 目的寄存器 \16$ |
| shamt | 00000 | 0 | 非移位指令 |
| funct | 100000 | 20H | add |
funct = 100000 表示 add 指令。
MIPS 汇编格式为:
add $16, $5, $15其功能为 。
答案:该指令表示把寄存器 $5 和 $15 的内容相加,结果送入寄存器 $16。
习题5.11
题干:
假定以下 C 语言语句中包含的变量 f、g、h、i、j 分别存放在寄存器 $11 $15 中,写出实现 C 语言语句
功能的 MIPS 汇编指令序列,并写出每条 MIPS 指令的十六进制数。
解析:
变量与寄存器对应关系为:
| 变量 | 寄存器 |
|---|---|
| f | $11 |
| g | $12 |
| h | $13 |
| i | $14 |
| j | $15 |
使用临时寄存器 \8$ 保存中间结果。
计算顺序:
MIPS 指令序列如下:
add $8, $12, $13 # $8 = g + hmult $8, $14 # HI/LO = $8 * imflo $8 # $8 = (g + h) * idiv $8, $15 # LO = $8 / jmflo $11 # f = LO对应机器码:
| 汇编指令 | 功能 | 十六进制机器码 |
|---|---|---|
add $8, $12, $13 | \8 \leftarrow $12 + $13$ | 018D4020H |
mult $8, $14 | HI/LO \leftarrow \8 \times $14$ | 010E0018H |
mflo $8 | \8 \leftarrow$ LO | 00004012H |
div $8, $15 | LO \leftarrow \8 / $15$ | 010F001AH |
mflo $11 | \11 \leftarrow$ LO | 00005812H |
答案:
add $8, $12, $13 # 018D4020Hmult $8, $14 # 010E0018Hmflo $8 # 00004012Hdiv $8, $15 # 010F001AHmflo $11 # 00005812H习题5.12
题干: 某计算机字长为 16 位,主存地址空间大小为 128KB,按字节编址。采用单字长指令格式,指令各字段定义如下:
转移指令采用相对寻址方式,相对偏移量用补码表示。寻址方式包括:寄存器直接寻址、寄存器间接寻址、寄存器间接加自增寻址、相对寻址。请回答下列问题。
(1)该指令系统最多可有多少条指令?该计算机最多有多少个通用寄存器?
(2)MAR 和 MDR 至少各需要多少位?
(3)转移指令的目标地址范围是多少?
(4)若操作码 0010B 表示加法操作 add,R4 和 R5 编号分别为 100B 和 101B,R4 = 1234H,R5 = 5678H,地址 1234H 中的内容为 5678H,地址 5678H 中的内容为 1234H,则汇编语言 add (R4), (R5)+ 对应的机器码是什么?该指令执行后,哪些寄存器和存储单元会改变?改变后的内容是什么?
(1)最多指令条数和通用寄存器个数
OP 字段为 4 位:,所以该指令系统最多有 16 条指令。
寄存器字段 Rs 或 Rd 为 3 位:,所以最多有 8 个通用寄存器。
答案:最多 16 条指令;最多 8 个通用寄存器。
(2)MAR 和 MDR 至少需要多少位?
主存地址空间为 ,按字节编址,因此需要 17 位地址。MAR 至少需要 17 位。
计算机字长为 16 位,MDR 至少要能存放一个机器字,所以 MDR 至少需要 16 位。
答案:MAR 至少 17 位,MDR 至少 16 位。
(3)转移指令的目标地址范围
相对偏移量用补码表示,寄存器字长为 16 位,因此相对偏移量范围为 ,即 。
目标地址 = ,则目标地址范围为 。
又因为主存地址空间为 128KB,即地址范围 ,所以实际目标地址还要限制在此范围内。
答案:理论相对范围为 ,实际地址需落在 0~1FFFFH 内。
(4)求 add (R4), (R5)+ 的机器码与执行结果
指令格式为 。
已知:
- add 的操作码 OP = 0010B;
- 源操作数
(R4)为寄存器间接寻址,Ms = 001B; - R4 编号为 100B;
- 目的操作数
(R5)+为寄存器间接 + 自增寻址,Md = 010B; - R5 编号为 101B。
因此机器码字段为:
拼接:,按 4 位分组:,转为十六进制:2315H。
机器码答案:2315H。
执行过程:
源操作数为 (R4):,源操作数地址为 1234H,源操作数为 。
目的操作数为 (R5)+:,目的操作数地址为 5678H,目的操作数原值为 。
执行加法:,结果写回目的操作数所在存储单元:。
自增寻址执行:,所以 R5 = 5678H + 1 = 5679H。
改变的内容:
| 对象 | 原内容 | 新内容 | 原因 |
|---|---|---|---|
| R5 | 5678H | 5679H | 目的操作数采用 (R5)+,执行后自增 |
| 存储单元 5678H | 1234H | 68ACH | 加法结果写回目的操作数位置 |
R4 不变,存储单元 1234H 不变。
习题5.13
题干: 某计算机采用 16 位定长指令字格式,其 CPU 中有一个标志寄存器,其中包括 CF、ZF 和 NF。条件转移指令格式为:
其中 00000 为操作码;C、Z、N 分别为 CF、ZF、NF 的对应检测位。某检测位为 1 时表示需检测对应标志,需检测的标志位中只要有一个为 1 就转移,否则不转移。OFFSET 是相对偏移量,用补码表示。转移执行时:
顺序执行时:
请回答下列问题。 (1)该计算机存储器按字节编址还是按字编址?该条件转移指令向后最多可跳转多少条指令? (2)某条件转移指令地址为 200CH,指令内容中 C = 0,Z = 1,N = 1,OFFSET = 11100011。若执行时 CF = 0,ZF = 0,NF = 1,则 PC 为多少?若执行时 CF = 1,ZF = 0,NF = 0,则 PC 为多少? (3)实现”无符号数比较小于等于时转移”功能的指令中,C、Z、N 应各是什么?
(1)编址方式与最多反向跳转条数
题中说明顺序执行时:下条指令地址 = 。
指令长度为 16 位,即 2 字节。如果按字编址,下一条指令地址应加 1;但题中加 2,说明地址单位是字节。
所以该计算机按字节编址。
OFFSET 为 8 位补码,范围为 。
转移目标地址为 。
最大反向跳转时 ,相对顺序下一条指令地址最多后退 128 条指令。
答案:按字节编址;相对于顺序下一条指令,最多可向后跳转 128 条指令。
(2)求两种情况下 PC 的值
已知指令地址 PC = 200CH,顺序下一条指令地址为 。
OFFSET = 11100011B = E3H,这是 8 位补码。因为最高位为 1,所以是负数:
所以 OFFSET = -29。
若发生转移:
指令检测位为 C = 0,Z = 1,N = 1,说明只检测 ZF 和 NF,不检测 CF。
情况一: CF = 0,ZF = 0,NF = 1
检测 ZF 和 NF:ZF = 0,NF = 1。检测的标志位中有一个为 1,所以发生转移。
答案:PC = 1FD4H。
情况二: CF = 1,ZF = 0,NF = 0
仍然只检测 ZF 和 NF,不检测 CF。ZF = 0,NF = 0,检测的标志位都不是 1,所以不转移。
顺序执行:。
答案:PC = 200EH。
(3)无符号数比较小于等于时转移
无符号数比较通常通过减法实现。
若比较 ,无符号数 的条件为:
- :减法产生借位,;
- :结果为 0,。
因此无符号小于等于转移条件为 或 。
题中规定检测位中只要有一个对应标志为 1 就转移,因此应检测 CF 和 ZF,不检测 NF。
所以 ,,。
答案:C = 1,Z = 1,N = 0。
习题5.14
题干: 假定计算机 M 字长为 16 位,按字节编址,连接 CPU 和主存的系统总线中地址线为 20 位、数据线为 8 位,采用 16 位定长指令,指令格式及其说明如下:
R 型:
功能:
I 型:
J 型:
功能:PC 的低 10 位 target
其中 op1~op3 为操作码,rs、rt、rd 为通用寄存器编号,R[r] 表示寄存器 r 的内容,imm 为立即数,target 为转移目标的形式地址。请回答下列问题。 (1)ALU 的宽度是多少位?可寻址主存空间大小为多少字节?IR、MAR、MDR 分别应有多少位? (2)R 型格式最多可定义多少种操作?I 型和 J 型格式总共最多可定义多少种操作?通用寄存器最多有多少个? (3)假定 op1 为 0010 和 0011 时,分别表示带符号整数减法和带符号整数乘法指令,则指令 01B2H 的功能是什么?若 1、2、3 号通用寄存器当前内容分别为 B052H、0008H、0020H,则分别执行指令 01B2H 和 01B3H 后,3 号通用寄存器内容各是什么?各自结果是否溢出? (4)若采用 I 型格式的访存指令中 imm 为带符号整数,则地址计算时应对 imm 进行零扩展还是符号扩展? (5)无条件转移指令可以采用上述哪种指令格式?
(1)ALU、主存空间、IR、MAR、MDR 位数
计算机字长为 16 位,所以 ALU 宽度通常为 16 位。
地址线为 20 位,且按字节编址,因此可寻址主存空间为 字节,即 1MB。
采用 16 位定长指令,所以指令寄存器 IR 需要 16 位。
地址线 20 位,所以 MAR 需要 20 位。
数据线 8 位,所以 MDR 至少需要 8 位。
答案:ALU 为 16 位;可寻址主存空间为 字节(1MB);IR 为 16 位,MAR 为 20 位,MDR 为 8 位。
(2)最多操作数和寄存器个数
R 型中 op1 为 4 位,因此最多可定义 种 R 型操作。
I 型和 J 型使用 6 位主操作码 op2/op3。6 位操作码共有 种编码。其中 000000 已用于 R 型指令格式,所以剩余 种主操作码可分配给 I 型和 J 型。因此 I 型和 J 型格式总共最多可定义 63 种操作。
寄存器编号字段 rs、rt、rd 都是 2 位,因此通用寄存器最多有 个。
答案:R 型最多 16 种操作;I 型和 J 型总共最多 63 种操作;通用寄存器最多 4 个。
(3)分析 01B2H 和 01B3H
先将 01B2H 写成二进制:
按 R 型格式划分:
| 字段 | 值 | 含义 |
|---|---|---|
| 000000 | R 型 | R 型指令 |
| rs | 01B | 1 号寄存器 |
| rt | 10B | 2 号寄存器 |
| rd | 11B | 3 号寄存器 |
| op1 | 0010B | 带符号整数减法 |
因此 01B2H 的功能是:,即 R3 R1 - R2。
已知 R1 = B052H,R2 = 0008H,R3 = 0020H。
执行 01B2H: R3 R1 - R2 = B052H - 0008H = B04AH。
从带符号数角度看:B052H = ,0008H = 8,。16 位补码范围为 , 在范围内,因此不溢出。
执行 01B2H 后:R3 = B04AH,且不溢出。
执行 01B3H: 01B3H = 0000 0001 1011 0011,按 R 型格式划分:
op1 = 0011B 表示带符号整数乘法,功能为 。
R1 = B052H = ,R2 = 0008H = 8,。
16 位带符号整数范围为 , 超出范围,因此发生溢出。
若只保留低 16 位:B052H 0008H = 8290H(低 16 位)。
所以执行 01B3H 后,R3 中保存的低 16 位结果为 8290H,但结果溢出。
| 指令 | 功能 | 执行后 R3 | 是否溢出 |
|---|---|---|---|
| 01B2H | B04AH | 不溢出 | |
| 01B3H | 8290H | 溢出 |
(4)imm 应零扩展还是符号扩展?
题目说明 I 型访存指令中的 imm 是带符号整数。带符号整数在扩展位数时必须保持数值符号不变,因此应采用符号扩展。例如 6 位 imm 的最高位为 1,表示负数,扩展到 16 位或 20 位地址计算宽度时,高位应补 1。
答案:应进行符号扩展。
(5)无条件转移指令采用哪种格式?
J 型格式的功能为:PC 的低 10 位 target。它直接修改 PC,因此最适合实现无条件转移。
答案:无条件转移指令可采用 J 型格式。
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时


















