第六章 指令系统

6.1 指令系统概述

6.1.1 指令系统

物理的计算机只能够执行机器语言程序,组成程序的每一条语句称作一条机器指令,一种计算机能够执行的机器指令的集合就是这种计算机的指令系统。

6.1.2 机器指令格式

指令的一般格式

计算机组成原理完整学习笔记(六):指令系统

操作码

操作码位数反映机器指令数目,内容反映机器做什么操作。

操作码类别:

  • 长度固定,如 RISC 机器,指令规整,译码简单
  • 长度可变,操作码分散在指令字的不同字段中,控制器设计复杂

地址码

地址码用来指定该指令操作数的地址、结果的地址,以及(可能有的)下一条指令的地址。

例如指令: MOV AX, [40],其中 “40” 指明了要操作的源操作数的地址,AX 指明了目的操作数的地址。

操作码扩展技术

通过操作码扩展(对应的地址码长度收缩)技术,能够有效地缩短指令的平均长度。

6.1.3 操作码设计举例

例题

假设一台计算机指令字长 16 位,操作码与地址码都为 4 位,请列出几种可能的操作码设计方法。

固定操作码

计算机组成原理完整学习笔记(六):指令系统

扩展操作码

扩展方案非常多,下面给出两种扩展方式。

计算机组成原理完整学习笔记(六):指令系统

计算机组成原理完整学习笔记(六):指令系统

6.1.3 指令字长

  • 指令字长取决于操作码长度、地址码长度和地址码个数。指令按照字长是否可变分为两种:

    • 指令字长固定: 指令字长 = 存储字长
    • 指令字长可变: 按字节的倍数变化
  • 指令字长可变,导致控制电路复杂,多字长指令需要多次访存,应尽量把常用指令设计为单字长或短字长指令。

6.2 操作类型

6.2.1 数据传送类指令

数据传送类指令主要分为 “源地址” 和 “目的地址” 两个部分。

  1. 寄存器-寄存器 MOV AX, BX
  2. 寄存器-存储器 MOV [20], AX(STORE指令)
  3. 存储器-寄存器 MOV AX, [20](LOAD指令)
  4. 存储器-存储器 MOV [20], [30]
  5. 堆栈操作: PUSH AX(入栈),POP AX(出栈)
  6. 清零、置1: MOV AX,0(清零),MOV AX,1(置1)

6.2.2 运算类指令

算术运算

加、减、乘、除、求补、浮点、十进制运算

  • ADD AX, 20
  • DIV AX, 3

逻辑运算

与、或、非、异或

  • AND AX, 30
  • XOR AX, 30

其他运算

位测试、位清楚、位求反

6.2.3 移位指令

一般来说,有 8 种移位指令:
算术左移、算术右移、逻辑左移、逻辑右移、小循环左移、小循环右移、大循环左移、大循环右移

6.2.4 转移指令

无条件转移指令

直接跳转到某处,不取决于任何条件。类似 C 中的 goto 语句,例如 JMP LOOP。

条件转移指令

根据机器当前的程序状态字中的某位来决定是否执行转移,例如 JZ LOOP。

JZ LOOP: 如果当前指令运算结果为0,则会跳转到 LOOP 标号处。

调用与返回指令

类比 C 程序中的函数调用,以及函数返回。例如 CALL PRO1、RET

子程序调用特点:

  1. 子程序可以在多处被调用
  2. 子程序调用可以嵌套
  3. CALL 与 RET 指令配对使用
  4. 要妥善保存子程序的返回地址

计算机组成原理完整学习笔记(六):指令系统

陷阱(TRAP)指令

  • 一旦机器运行出现意外故障(未定义指令、除0、设备故障、电压不稳),计算机发出陷阱信号(陷阱隐指令),暂停当前指令的执行,转入故障处理程序。陷阱指令不提供给用户使用,由机器自动执行。
  • 也有某些机器提供陷阱指令,例如 IBM-PC 提供的 INT xx 软中断指令,用来完成系统调用。

6.2.5 输入输出指令

对 I/O 单独编址对计算机,设置有专门的输入输出指令,用来操纵外设,如下所示。

  • IN AX, [20](外设端口 \rightarrow CPU 的寄存器)
  • OUT DX, AX(CPU 的寄存器 \rightarrow 外设端口)

6.2.6 其他指令

  1. 停机指令、空操作指令、开中断指令、关中断指令、置条件码指令
  2. 字符串传送、字符串比较、字符串查询
  3. 特权指令(操作系统用)
  4. 向量指令
  5. 多处理机指令

6.3 数据寻址方式

数据寻址有多种,需要在指令中明确指出采用哪一种寻址方式,可以专门设置一个寻址方式特征字段,或纳入地址码中。

计算机组成原理完整学习笔记(六):指令系统

形式地址 A: 指令字中的地址
有效地址 EA: 操作数的真实地址

有效地址由形式地址根据寻址方式来确定。

在大多数机器中,指令字长 = 存储字长 = 机器字长。

6.3.1 立即寻址

又称为立即数寻址,即指令中的形式地址部分不是一个操作数的地址,而是操作数本身,因此该指令的执行过程不需要寻址。

计算机组成原理完整学习笔记(六):指令系统

如指令 “MOV AX, 20H”,将 20H 放入 AX 寄存器中,其中立即数可正可负,负数需要用补码来表示。

特点

  • 立即寻址的指令执行阶段不访存
  • A 的位数限制了立即数的范围

6.3.2 直接寻址

指令中的形式地址部分即为有效地址,即 EA = A。

例如指令 “MOV AX, [20H]”,即是将 [20H] 地址中的数据传输到 AX 寄存器中。

计算机组成原理完整学习笔记(六):指令系统

特点

  • 执行阶段访问一次存储器
  • A 的位数限制了该指令操作数的寻址范围
  • 操作数的地址不易修改

6.3.3 隐含寻址

指令中不直接给出操作数地址,操作数地址通常隐含在操作码或某个(约定)寄存器中。

如 ADD 操作,即是默认另一个操作数在 ACC 中。将 A 地址中的数取出与 ACC 中的数进行加法运算。

计算机组成原理完整学习笔记(六):指令系统

6.3.4 间接寻址

指令中的形式地址不是操作数的地址,而是 “操作数地址的地址”。

计算机组成原理完整学习笔记(六):指令系统

其中在多次间址时,需要查看数据单元格中的第一位数据,如果为 1 则表示继续间址,如果为 0 则为真正地址。

特点

  1. 可以扩大寻址范围
  2. 便于编制转移程序

计算机组成原理完整学习笔记(六):指令系统

JMP @A 指令,表示跳转到 A 单元中所指示的地址,为间接寻址。正因为这条间址指令,我们转入子程序时只需修改 A 单元中数据,即可实现从子程序再跳转回主程序的功能。

6.3.5 寄存器寻址

指令中的形式地址直接指出寄存器的编号,操作数存储于寄存器中,即 EA=RiEA=R_i,有效地址即为寄存器编号。

如 “MOV AX, BX” 指令,即是将 BX 寄存器中的数据送到 AX 中。

计算机组成原理完整学习笔记(六):指令系统

特点

  • 执行阶段不访存,只访问寄存器,执行速度快
  • 寄存器个数有限,可缩短指令字长

6.3.6 寄存器间接寻址

指令中的形式地址为寄存器的编号,寄存器的内容是操作数的有效地址。

EA=(Ri)EA = (R_i),有效地址在寄存器中。

如指令 “MOV AX, [BX]”,就是根据 BX 寄存器中的地址,去主存中访问对应数据,并将数据存入 AX 寄存器中。

计算机组成原理完整学习笔记(六):指令系统

特点

有效地址在寄存器中,操作数在存储器中,执行阶段访存便于编制循环程序。

  • 可以访存一次,就将寄存器数值加1,实现类似于数组的访问。

6.3.7 基址寻址

指令中的形式地址与基址寄存器内容之和为有效地址。

  1. 采用专用寄存器作为基址寄存器(隐式)
  2. 采用通用寄存器作为基址寄存器(显式)

专用寄存器基地寻址

EA=(BR)+AEA=(BR)+A,其中 BR 为基址寄存器

计算机组成原理完整学习笔记(六):指令系统

通用寄存器基址寻址

需要给出寄存器编号作为基址寄存器。

计算机组成原理完整学习笔记(六):指令系统

  • 可指定由哪个通用寄存器作为基址寄存器。
  • 在程序的执行过程中 R0R_0 内容不变,形式地址 AA 可变。

特点

  • 可扩大寻址范围
  • 有利于多道程序
    • 将程序开头地址定位于某个寄存器中,即可实现更换通用寄存器,即实现程序切换。
  • 基址寄存器内容由操作系统或管理程序确定

6.3.8 变址寻址

指令中的形式地址与变址寄存器内容之和为有效地址。

EA = (IX) + A,与基地寻址非常相似。唯一的不同点在于基址寄存器中的值由操作系统或管理程序决定,而 IX 的内容由用户指定。

计算机组成原理完整学习笔记(六):指令系统

特点

  • 可以扩大寻址范围
  • 由于 IX 的内容由用户指定,因此在程序执行过程中,IX 内容可变,可以用于设计处理一些数组问题。

6.3.9 相对寻址

有效地址为程序计数器 PC 的值与形式地址之和。

EA = (PC) + A,A 的位数决定操作数的寻址范围,可编写浮动程序(程序放哪都能执行)。

计算机组成原理完整学习笔记(六):指令系统

6.3.10 堆栈寻址

堆栈有两个操作,分别是 PUSH(压栈) 与 POP(弹栈)。进栈与出栈的操作分别由 SP 指针的加减完成。

计算机组成原理完整学习笔记(六):指令系统

相关文章:

  • 2021-11-26
  • 2022-01-14
  • 2021-11-06
  • 2021-12-20
  • 2021-06-20
  • 2021-09-01
  • 2021-08-31
  • 2021-04-02
猜你喜欢
  • 2021-12-25
  • 2021-07-26
  • 2021-11-19
  • 2022-01-05
  • 2021-08-21
  • 2021-08-15
  • 2021-11-21
相关资源
相似解决方案