4.5 本章小结
本章开头提出的问题的参考答案如下。
-
什么是指令?什么是指令系统?为什么要引入指令系统?
指令是控制计算机完成某种基本操作的命令。一台计算机所能执行的全部机器指令的集合,称为该机的指令系统。引入指令系统具有双重意义:对软件层面,它为程序员提供了统一的硬件抽象接口,无须直接操作物理电路或二进制编码,显著提升了编程效率;对硬件层面,指令系统的格式、功能和寻址能力直接决定了处理器的微架构设计、性能潜力和适用领域。 -
一般来说,指令由哪些部分组成?各部分的作用是什么?
一条典型指令由操作码和地址码两部分构成:
操作码指明指令的功能类型(如加法、转移、加载等),是CPU识别和执行指令的核心依据;地址码提供操作所需的地址信息,包括操作数的存储位置、运算结果的保存地址、程序转移的目标地址或子程序的入口地址等。通过操作码与地址码的组合,指令能够精确描述一次完整的计算或控制操作。 -
对一个指令系统而言,寻址方式多或少会带来什么影响?
寻址方式的设计需权衡编程灵活性与硬件效率。寻址方式丰富(如立即数、寄存器、直接、间接、变址、相对等)可使程序更简洁高效,便于表达复杂的数据访问模式;但会增加指令译码逻辑的复杂度,不利于流水线调度,并可能增大控制单元面积。寻址方式过少虽能简化硬件、提升执行速度,却会限制程序表达能力,迫使程序员用多条指令模拟复杂访问,降低代码效率。
4.6 常见问题和易混淆知识点
- 简述各常见指令寻址方式的特点和适用情况。
- 立即寻址:操作数直接嵌入指令,无须访存,常用于赋初值或常量。
- 直接寻址:指令中给出操作数的内存地址,访存一次,适用于固定地址访问。
- 间接寻址:指令给出地址的地址,需两次访存,扩大了寻址范围,易于完成子程序返回。
- 寄存器寻址:操作数在寄存器中,指令短、速度快,适合高频运算。
- 寄存器间接寻址:寄存器存放操作数地址,兼具灵活性与较大寻址范围。
- 基址寻址:EA=基址寄存器+偏移量,基址由系统设定,适用于多道程序的地址重定位。
- 变址寻址:EA=变址寄存器+偏移量,变址寄存器由用户控制,适合数组遍历和循环。
- 相对寻址:EA=PC+偏移量,主要用于转移指令。
基址寻址和变址寻址的区别:形成相同,都是EA=寄存器内容+偏移量。但基址寄存器由操作系统管理,偏移量可变;变址寄存器由程序员控制,偏移量固定。
-
一个操作数在内存可能占多个单元,怎样在指令中给出操作数的地址?
现代计算机普遍采用字节编址,即每个内存单元存储1字节(8位)。当操作数为多字节数据(如int占4字节,double占8字节)时,指令中仅给出该操作数的起始地址(第一个字节的地址),CPU根据操作数类型自动读取连续的多个字节。
-
装入/存储(LOAD/STORE)型指令有什么特点?
LOAD/STORE是RISC指令系统的核心设计原则之一,其主要特点包括:
- 访存与计算分离:只有LOAD(从内存读入寄存器)和STORE(从寄存器写入内存)指令能访问主存;所有运算指令(如加、减、移位)仅操作寄存器中的数据。
- 指令格式规整:由于寄存器编号位数远少于内存地址,通过固定字段分配,可实现定长指令,极大简化译码逻辑。
- 利于流水线执行:统一的指令长度和访存边界,使取指、译码、执行等阶段易于并行化。
- 潜在缺点:频繁的数据搬移可能导致程序中LOAD/STORE指令比例较高,增加指令条数;但现代编译器优化和高速缓存机制可有效缓解此问题。
