【计算机组成原理】指令系统

指令格式设计和计算

组成

  • OP(操作码)
  • Ad(地址码)
  • M(寻址特征)
  • Ri、Rj(寄存器编号)
  • A(偏移量)

长度的计算

操作码长度 = ceil(log2(操作码数))
寻址特征长度 = ceil(log2(寻址方式的个数))
同理,Ri的长度与通用寄存器的长度有关,A的长度与偏移量的范围有关等等。一个指令中可能有多个Ad,它们的长度不一定相同。

设计原则

  • 一般指令条数少的安排在低地址,即设计的时候从指令条数少的开始设计。
  • 一般从多地址指令开始设计。
  • 一般指令长应设计成机器字长的整数倍

书写步骤

书写时先写出指令结构,然后标出各个部分的长度。对于长指令,可能涉及多个字节(每个字节一行),一般要边界对其。

扩展操作码的计算

一定要注意各位全1留做扩展操作码前缀之用。但最后一组指令的全1不需要留作前缀。这是显然的,因为它是最后一组指令,后面没有指令需要它保留前缀。

指令个数计算

可以将任意一种指令的个数计算当做是广义的扩展操作码
比如在扩展操作码中,OP有4位,A1、A2、A3分别也有4位,那么我们可以设计15条(2^4-1)条三地址指令,15条[1 * (2^4-1)]条二地址指令…16条(前面说到的,最后一组不需要预留前缀)零地址指令。
由上面我们可以得出规律。
假设n地址指令的操作码空间剩下k个值没有使用。它紧跟的地址码长为l
n-1地址指令的最多可以有k * 2^l条指令。(当取最大值时,它不再预留地址,这时候n-2地址指令无法编码
上面的扩展操作码可以看做n取3,k取1的情况。

存储空间占用计算

指令格式1存储空间占用/指令格式2存储空间占用=指令格式1平均字长/指令格式2平均字长
见[《王道》P154t1]

指令寻址方式

寻址方式 有效地址 访存次数
隐含寻址 程序制定 0
立即寻址 A即是操作数 0
直接寻址 EA=A 1
一次间接寻址 EA=(A) 2
寄存器寻址 EA=Ri 0
寄存器间接一次寻址 EA=(Ri) 1
相对寻址 EA=(PC)+A 1
基址寻址 EA=(BR)+A 1
变址寻址 EA=(IX)+A 1

转移指令、相对寻址的计算

首先计算(PC)+1->PC。这里的"1"指的是当前指令的字长。也就是这些寻址方式相对的是下一条指令的地址,而不是当前指令的地址。
对于转移指令的跳转范围的计算,尤其注意向后(反向)跳转。
例如:
相对偏移量用8位补码表示,此时相对偏移量绝对值最大的负数时-128。但是考虑到转移指令相对的是下一条指令的地址。还要加1。所以最大可以转移 ∣ 1 − 128 ∣ = ∣ − 127 ∣ = 127 |1-128|=|-127|=127 1128=127=127条指令也就是最多向后转移127条指令。
向前最多可以转移 ∣ 127 + 1 ∣ = 128 |127 + 1| = 128 127+1=128条指令。

知识点

  • 程序控制类指令的功能是改变程序执行的顺序
  • 零地址的运算类指令又称堆栈运算指令,参与的两个操作数来自栈顶和次栈顶单元。注意:堆栈指令的访存次数,取决于采用的是软堆栈还是硬堆栈,若是软堆栈(堆栈区由内存实现),则对于双目运算符需要四次访存:取指、取源数1、取源数2、存结果。若是硬堆栈(堆栈区由寄存器实现),则
  • 存取指令仅有LOAD和STORE的指令系统,通常将寻址得到的操作数的地址装入ACC中。
  • 指令字长等于存储字长的前提下,取指周期等于机器周期。

往年真题

选择题

  • 指令字长的计算。首先考虑是定长指令编码还是变长指令编码。如果是定长指令编码,类似扩展操作码格式的计算。最后需要将其转化为字长的倍数。[《王道》P154t14]
  • 寻址方式的类别。[《王道》P162t1]
  • 寻址方式的特点。[《王道》P162t2]
  • 转移指令地址的计算和取得的操作数。[《王道》P163t15、《王道》P164t21]。注意:转移指令、间址寻址、相对寻址、寄存器间接寻址偏移量是相对下一条指令的地址

综合题

  • 指令格式能定义多少种指令。
  • 最多有多少个通用寄存器。
  • 寄存器的位数。
  • 转移指令的目标范围。
  • 计算转移指令执行后PC的值。
    1. 是否转移,是则跳到第2步,否则跳到第三步。
    2. 不跳转(PC)+1->PC。
    3. 计算偏移量的机器码表示。
    4. 根据转移目标的计算表达式得出PC的值。

你可能感兴趣的:(#,计算机组成原理)