题目
一处理器中共有32个寄存器[1], 使用16位立即数, 其指令系统街工中共有142条指令, 在某个给定的程序中, 20%的指令带友一个输入寄存器和一个输出寄存器;30%的指令带有两个输入寄存器和一个输出寄存器;25%的指令带有一个输入寄存器、一个输出寄存器、一个立即数寄存器;其余25%的指令带有一个立即数输入寄存器和一个输出寄存器。 (1)对于以上4中指令类型中的任意一种指令类型来说, 共需要多少位?家庭指令系统结构要求所有指令长度必须是8的整数倍; (2)与使用定长指令集编码相比,当采用变长指令集编码时, 该程序能够少占用多少存储器[2]空间?
一处理器中共有32个寄存器[1], 使用16位立即数, 其指令系统街工中共有142条指令, 在某个给定的程序中, 20%的指令带友一个输入寄存器和一个输出寄存器;30%的指令带有两个输入寄存器和一个输出寄存器;25%的指令带有一个输入寄存器、一个输出寄存器、一个立即数寄存器;其余25%的指令带有一个立即数输入寄存器和一个输出寄存器。 (1)对于以上4中指令类型中的任意一种指令类型来说, 共需要多少位?家庭指令系统结构要求所有指令长度必须是8的整数倍; (2)与使用定长指令集编码相比,当采用变长指令集编码时, 该程序能够少占用多少存储器[2]空间?
题目解答
答案
(1)由于有142条指令,故至少需要8位才能确定各条指令的操作码[3]。 由于该处理器有32个寄存器, 也就说要用5位对寄存器ID编码。 而每个立即数需要16位。因此有:20%的一个输入寄存器和一个输出寄存器指令需要8+5+5=18位。 长度对齐到8的倍数, 即24位。 30%的两个输入寄存器和一个输出寄存器指令需要8+5+5+5=23位, 对齐到24位。 25%的一个输入寄存器、一个输出寄存器、一个立即数寄存器指令需要8+5+5+16=34位,对齐到40位。 25%的一个立即数输入寄存器和一个输出寄存器指令需要8+16+5=29位, 对齐到32位。 (2) 由于变长指令最长的长度为40位, 所以定长指令编码每条指令的长度均为40位。而采用变长编码[4], 将各个指令程度和其概率相乘, 得出平均长度为30位,所以该城中, 变长编码能比定长编码少占用25%的存储空间。
解析
步骤 1:确定指令操作码的位数
由于有142条指令,至少需要8位才能确定各条指令的操作码^{[3]}。
步骤 2:确定寄存器ID的位数
由于该处理器有32个寄存器,也就说要用5位对寄存器ID编码。
步骤 3:确定立即数的位数
每个立即数需要16位。
步骤 4:计算每种指令类型的位数
- 20%的一个输入寄存器和一个输出寄存器指令需要8+5+5=18位,对齐到8的倍数,即24位。
- 30%的两个输入寄存器和一个输出寄存器指令需要8+5+5+5=23位,对齐到24位。
- 25%的一个输入寄存器、一个输出寄存器、一个立即数寄存器指令需要8+5+5+16=34位,对齐到40位。
- 25%的一个立即数输入寄存器和一个输出寄存器指令需要8+16+5=29位,对齐到32位。
步骤 5:计算变长指令集编码的平均长度
变长指令最长的长度为40位,所以定长指令编码每条指令的长度均为40位。而采用变长编码^{[4]},将各个指令程度和其概率相乘,得出平均长度为30位,所以该程序中,变长编码能比定长编码少占用25%的存储空间。
由于有142条指令,至少需要8位才能确定各条指令的操作码^{[3]}。
步骤 2:确定寄存器ID的位数
由于该处理器有32个寄存器,也就说要用5位对寄存器ID编码。
步骤 3:确定立即数的位数
每个立即数需要16位。
步骤 4:计算每种指令类型的位数
- 20%的一个输入寄存器和一个输出寄存器指令需要8+5+5=18位,对齐到8的倍数,即24位。
- 30%的两个输入寄存器和一个输出寄存器指令需要8+5+5+5=23位,对齐到24位。
- 25%的一个输入寄存器、一个输出寄存器、一个立即数寄存器指令需要8+5+5+16=34位,对齐到40位。
- 25%的一个立即数输入寄存器和一个输出寄存器指令需要8+16+5=29位,对齐到32位。
步骤 5:计算变长指令集编码的平均长度
变长指令最长的长度为40位,所以定长指令编码每条指令的长度均为40位。而采用变长编码^{[4]},将各个指令程度和其概率相乘,得出平均长度为30位,所以该程序中,变长编码能比定长编码少占用25%的存储空间。