第四章 指令系统

【复习提示】

指令系统是表征一台计算机性能的重要因素。读者应注意扩展操作码技术,各种寻址方式的特点及有效地址的计算,相对寻址有关的计算,CISC 与 RISC 的特点与区别。本章知识点出选择题的概率较大,但也有可能结合其他章节出有关指令的综合题。2014 年、2015 年已连续两次出现指令系统和指令流水线的大题。指令系统格式和指令寻址方式与 CPU 指令执行过程部分紧密结合,希望读者引起重视。

在学习本章时,请读者思考以下问题

    1. 什么是指令?什么是指令系统?为什么要引入指令系统?
    1. 一般来说,指令分为哪些部分?每部分有什么用处?
    1. 对于一个指令系统来说,寻址方式多和少有什么影响?

请读者在本章的学习过程中寻找答案,本章末尾会给出参考答案。

4.1 指令格式

4.1.1 指令的基本格式










4.2 指令寻址方式



4.2.1 指令的寻址方式


4.2.2 常见的数据寻址方式




隐含寻址

立即寻址

直接寻址


间接寻址

寄存器寻址

寄存器间接寻址

偏移寻址








堆栈寻址


4.3 CISC 和 RISC 的基本概念




4.4 本章开头提出的问题回答

1) 什么是指令?什么是指令系统?为什么要引入指令系统?

    1. 什么是指令?什么是指令系统?为什么要引入指令系统?
      指令就是要计算机执行某种操作的命令,一台计算机中所有机器指令的集合,称为这台计算机的指令系统。引入指令系统后,避免了用户与二进制代码直接接触,使得用户编写程序更为方便。另外,指令系统是表征一台计算机性能的重要因素,它的格式与功能不仅直接影响到机器的硬件结构,而且也直接影响到系统软件,影响到机器的适用范围。

2) 一般来说,指令分为哪些部分?每部分有什么用处?

    1. 一般来说,指令分为哪些部分?每部分有什么用处?
      一条指令通常包括操作码字段和地址码字段两部分。其中,操作码指出指令中该指令应该执行什么性质的操作和具有何种功能,它是识别指令、了解指令功能与区分操作数地址内容的组成和使用方法等的关键信息。地址码用于给出被操作的信息(指令或数据)的地址,包括参加运算的一个或多个操作数所在的地址、运算结果的保存地址、程序的转移地址、被调用子程序的入口地址等。

3) 对于一个指令系统来说,寻址方式多和少有什么影响?

    1. 对于一个指令系统来说,寻址方式多和少有什么影响?
      寻址方式的多样化能让用户编程更为方便,但多重寻址方式会造成 CPU 结构的复杂化(详见下章),也不利于指令流水线的运行。而寻址方式太少虽然能够提高 CPU 的效率,但对于用户而言,少数几种寻址方式会使编程变得复杂,很难满足用户的需求。

4.5 常见问题

1. 简述各常见指令寻址方式的特点和适用情况

    1. 简述各常见指令寻址方式的特点和适用情况
      立即寻址操作数获取便捷,通常用于给寄存器赋初值。
      直接寻址相对于立即寻址,缩短了指令长度
      间接寻址扩大了寻址范围,便于编制程序,易于完成子程序返回。
      寄存器寻址的指令字较短,指令执行速度较快
      寄存器间接寻址扩大了寻址范围。
      基址寻址扩大了操作数寻址范围,适用于多道程序设计,常用于为程序或数据分配存储空间。
      变址寻址主要用于处理数组问题,适合编制循环程序。
      相对寻址用于控制程序的执行顺序、转移等。
      基址寻址和变址寻址的区别:两种方式有效地址的形成都是寄存器内容 + 偏移地址,但是在基址寻址中,程序员操作的是偏移地址,基址寄存器的内容由操作系统控制,在执行过程中是动态调整的;而在变址寻址中,程序员操作的是变址寄存器,偏移地址是固定不变的。

2. 一个操作数在内存可能占多个单元,怎样在指令中给出操作数的地址?

    1. 一个操作数在内存可能占多个单元,怎样在指令中给出操作数的地址?
      现代计算机都采用字节编址方式,即一个内存单元只能存放一字节的信息。一个操作数(如 char、int、foat、 double) 可能是 8 位、16 位、32 位或 64 位等,因此可能占用 1 个、2 个、4 个或 8 个内存单元。也就是说,一个操作数可能有多个内存地址对应。
      有两种不同的地址指定方式:大端方式和小端方式。
      大端方式:指令中给出的地址是操作数最高有效字节 (MSB) 所在的地址
      小端方式:指令中给出的地址是操作数最低有效字节 (LSB) 所在的地址。

3. 装入 / 存储 (Load/ Store) 型指令有什么特点?

    1. 装入 / 存储 (Load/ Store) 型指令有什么特点?
      装入 / 存储型指令是用在规整型指令系统中的一种通用寄存器型指令风格。这种指令风格在 RISC 指令系统中较为常见。为了规整指令格式,使指令具有相同的长度,规定只有 Load/Store 指令才能访问内存。而运算指令不能直接访问内存,只能从寄存器取数进行运算,运算的结果也只能送到寄存器。因为寄存器编号较短,而主存地址位数较长,通过某种方式可使运算指令和访存指令的长度一致。
      这种装入 / 存储型风格的指令系统的最大特点是,指令格式规整,指令长度一致,一般为 32 位。由于只有 Load/Store 指令オ能访问内存,程序中可能会包含许多装入指令和存储指令,与ー般通用寄存器型指令风格相比,其程序长度会更长。