计算机组成原理-指令系统


指令的基本格式

一条指令就是机器语言的一个语句,是一组有意义的二进制代码。一条指令通常包括操作码字段和地址码字段两部分:

零地址指令

只给出操作码OP,没有显式地址,这种地址有两种可能:

  1. 不需要操作数的指令,如空操作指令、停机指令、关中断指令等。
  2. 零地址的运算类指令仅用在堆栈计算机(例如后缀表达式)中。

一地址指令

  1. 只有目的操作数的单操作数指令,按$A_1$地址读取操作数,进行OP操作后,结果存回原地址。

    指令含义:$OP(A_1)->A_1$

    如操作码含义是加1、减1、求反、求补等。

  2. 隐含约定目的地址的双操作数指令,

    例ACC,

    指令函数:(ACC)OP$(A_1)$->ACC

    若指令字长为32位,操作码占8位,1个地址码字段占24位,则指令操作数的直接寻址范围位$2^{24}=16M$。

二地址指令

常用于两个操作数的算数运算、逻辑运算相关指令

指令含义:$(A_1)OP(A_2)->A_1$

三地址指令

常用于序列两个操作数的算数运算、逻辑运算相关指令,结果用地址保存。

指令含义:$(A_1)OP(A_2)->A_3$

四地址指令

指令含义$(A_1)OP(A_2)->A_3, A_4=$下一条将要执行指令的地址。

完成指令需要访存4次,取指->读A1->读A2 ->写A3

指令长度分类

指令字长:一条指令的总长度。

机器字长:CPU进行依次整数运算所能处理的二进制数据的位数(通常与ALU有关)。

存储字长:一个存储单元中二进制代码位数(通常和MDR位数相同)。

半字长指令、单字长指令、双字长指令——通常指指令长度是机器字长的多少倍。

定长指令字结构:指令系统所有指令长度都相等

变长指令字结构:指令系统中指令长度不等

操作类型分类

  1. 数据传送

    LOAD :把存储器中的数据放到寄存器中。

    STORE :把寄存器中的数据放到存储器中。

  2. 算数逻辑操作

    加减乘除,逻辑就是与或非等运算。

  3. 移位操作

    算术移位、逻辑移位、循环移位等。

  4. 转移操作

    有无条件转移(JMP)、条件转移(BRANCH)、调用(CALL)、返回(SET)等。

  5. 输入输出操作

    CPU寄存器与IO端口之间的数据传达。

拓展操作码指令格式

例:

设指令字长为16位,每个地址码占4位;

前4位位基本操作码字段OP,另外3个4位长做地址字段。

4位基本操作码全用于三地址指令,则有16条。

但至少需将1111留作拓展操作码用,即三指令为15条、

而1111 1111也需留作拓展操作码用,二指令条为15条、

1111 1111 1111也需留作拓展操作码用,一指令条为15条、

零地址指令为16条。

在设计拓展操作码需注意

  1. 不允许短码是长码的前缀,即短操作码不能与长操作码的前面部分的代码相同。
  2. 各指令的操作码一定不能重复。

通常情况下,对使用频率较高的指令分配较短的操作码,对使用频率较低的指令分配较长的操作码。

设地址长度为n,上一层流出m种状态,下一层可拓展出$m \times 2^n$种状态。


文章作者: LsWorld
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LsWorld !
评论
  目录