指令格式设计和计算
组成
- 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存