CPU 所能完成的操作是由其执行的指令决定的,这些指令称为机器指令。CPU 能执行的所有机器指令的集合称为该 CPU的指令系统。
指令系统设计的好坏、功能的强弱,会对整个计算机产生很大的影响,指令系统是计算机中硬件与软件之间的接口。
1. 指令格式
指令是指挥计算机完成各种操作的基本命令。一般来说,一条指令包括两个基本组成部分:操作码和地址码。基本格式如下:
操作码用二进制编码来表示,该字段越长,所能表示的指令就越多。若操作码的长度为 n,则可表示的指令为2"条。根据指令中地址码的数量,指令格式分为以下几种:
-
三地址指令格式
其中,OP 为操作码;A1、A2、A;分别是源操作数 1、源操作数 2 和目的操作数的地址。该类指令实现的操作是:(A1)OP(A2)→(A3)。 -
二地址指令格式
-
一地址指令格式
在一地址指令中,只给出一个操作数的地址。若操作是针对一个操作数的指令,其操作为:OP(A)→(A);若操作是针对两个操作数的一地址指令,通常另一个操作数是隐含的(另个操作数在累加器 AC 中),其操作为:(AC)OP(A)→(AC)。 -
零地址指令格式:零地址指令只有操作码,不含操作数地址。
零地址指令在操作上分两种情况:一种是无操作数的控制操作,如空操作指令NOP、停机指令HLT 等;另一种是隐含有操作数,在指令中不体现。
2. 寻址方式
寻址方式就是如何对指令中的地址字段进行解释,以获得操作数的方法或获得程序转移地址的方法,操作数的位置可能在指令中、寄存器中、存储器中或 IO 端口中。
- 立即寻址。操作数就包含在指令中。如ADD AX, 3048H
- 直接寻址。操作数存放在内存单元中,指令中直接给出操作数所在存储单元的地址。如ADD AX,[2000H]
- 寄存器寻址。操作数存放在某一寄存器中,指令中给出存放操作数的寄存器名。
- 寄存器间接寻址。操作数存放在内存单元中,操作数所在存储单元的地址在某个寄存器中。
- 间接寻址。操作数存放在内存单元中。
- 基址寻址。操作数存放在内存单元中。指令中操作数地址码给出基址寄存器和一个偏移量(可正可负),操作数的有效地址为基址寄存器的内容加上偏移量。
- 变址寻址。操作数存放在内存单元中。操作数的有效地址等于变址寄存器的内容加偏移量。
3. 指令种类
-
数据传送类指令;将数据从一个地方传送到另一个地方。包括:数据传送指令、数据交换指令和堆栈操作指令。
-
输入/输出类指令
这类指令用于实现主机与外设间的信息传送,包括数据的输入/输出、主机向外设发出控制命令以及输入外设的状态。 -
算术运算类指令
这类指令支持 CPU 实现加、减、乘、除等算术运算。主要包括加法、减法、乘法、除法、求补、加 1、减1和比较等指令。 -
逻辑运算类指令
这类指令支持 CPU 实现各种逻辑运算。一般的 CPU 都会设置逻辑运算指令,主要包括与、或、异或、取反等指令。 -
移位操作指令
根据移位的方向,当操作数的各位顺序向左移动一位称为左移,同样,当操作数的各位顺序向右移动一位称为右移。移位指令一般可分为算术移位、逻辑移位和循环移位3种类型。-
算术移位:对带符号操作数进行移位。
-
逻辑移位:对无符号操作数进行移位
-
循环移位:分为不带进位的循环移位和带进位的循环移位
-
-
程序控制类指令
程序控制类指令用于改变指令执行的顺序和控制流的方向。包括:跳转指令、子程序调用和返回指令、陷阱指令。 -
串操作类指令:用于处理大量的字符串信息。
-
处理机控制类指令:对CPU实施控制。
-
数据转换类指令:设置数据转换。