题目
8.一台模型机共有九条指令 I1~I9,各指令的使用频度为 30%、24%、20%、7%、7%、6%、3%、2%、1%。该模型机有8位和16位两种指令字[1]长。8位指令字长为R-R二地址类型,16位指令字长为R-M二地址类型,主存地址可变址[2]寻址[3]。(1)仅根据使用频度,不考虑其他要求,设计全 Huffman 操作码[4],并计算其平均码长;(2)考虑题目其他要求,设计优化实用的操作码形式,并计算其操作码的平均码长;(3)该机允许使用多少个可编址[5]的通用寄存器[6];(4)画出该机两种指令字格式,标出各字段的位数;(5)指出访存操作数[7]地址寻址的最大相对位移量为多少个字节。
8.一台模型机共有九条指令 I1~I9,各指令的使用频度为 30%、24%、20%、7%、7%、6%、3%、2%、1%。该模型机有8位和16位两种指令字[1]长。8位指令字长为R-R二地址类型,16位指令字长为R-M二地址类型,主存地址可变址[2]寻址[3]。
(1)仅根据使用频度,不考虑其他要求,设计全 Huffman 操作码[4],并计算其平均码长;
(2)考虑题目其他要求,设计优化实用的操作码形式,并计算其操作码的平均码长;
(3)该机允许使用多少个可编址[5]的通用寄存器[6];
(4)画出该机两种指令字格式,标出各字段的位数;
(5)指出访存操作数[7]地址寻址的最大相对位移量为多少个字节。
题目解答
答案
### 问题解析
#### (1) 仅根据使用频度,不考虑其他要求,设计全 Huffman 操作码,并计算其平均码长
**Huffman 编码**是一种基于字符出现频率的编码方法,频率高的字符用较短的编码,频率低的字符用较长的编码。具体步骤如下:
1. **构建频率表**:
- I1: 30%
- I2: 24%
- I3: 20%
- I4: 7%
- I5: 7%
- I6: 6%
- I7: 3%
- I8: 2%
- I9: 1%
2. **构建 Huffman 树**:
- 将频率最低的两个节点合并,生成一个新的节点,其频率为两个节点频率之和。
- 重复上述步骤,直到所有节点合并成一个根节点。
3. **生成 Huffman 编码**:
- 从根节点到每个叶子节点的路径,左分支为0,右分支为1。
根据上述步骤,构建 Huffman 树并生成编码:
```
(100)
/ \
(54) (46)
/ \ / \
(30) (24) (20) (26)
/ \
(7) (19)
/ \
(7) (12)
/ \
(6) (6)
/ \
(3) (3)
/ \
(2) (1)
```
生成的 Huffman 编码如下:
- I1: 0
- I2: 10
- I3: 110
- I4: 11100
- I5: 11101
- I6: 11110
- I7: 1111100
- I8: 1111101
- I9: 111111
**计算平均码长**:
\[
\text{平均码长} = 0.30 \times 1 + 0.24 \times 2 + 0.20 \times 3 + 0.07 \times 5 + 0.07 \times 5 + 0.06 \times 5 + 0.03 \times 7 + 0.02 \times 7 + 0.01 \times 7
\]
\[
\text{平均码长} = 0.30 + 0.48 + 0.60 + 0.35 + 0.35 + 0.30 + 0.21 + 0.14 + 0.07 = 2.80
\]
#### (2) 考虑题目其他要求,设计优化实用的操作码形式,并计算其操作码的平均码长
根据题目要求,8位指令字长为R-R二地址类型,16位指令字长为R-M二地址类型。为了满足这些要求,我们可以设计如下操作码:
- 8位指令字长:3位操作码 + 5位地址码
- 16位指令字长:4位操作码 + 12位地址码
为了尽量减少操作码的长度,我们可以将使用频度较高的指令分配给较短的操作码。
假设我们分配如下:
- 8位指令字长:I1, I2, I3
- 16位指令字长:I4, I5, I6, I7, I8, I9
**8位指令字长**:
- I1: 000
- I2: 001
- I3: 010
**16位指令字长**:
- I4: 0000
- I5: 0001
- I6: 0010
- I7: 0011
- I8: 0100
- I9: 0101
**计算平均码长**:
\[
\text{平均码长} = 0.30 \times 3 + 0.24 \times 3 + 0.20 \times 3 + 0.07 \times 4 + 0.07 \times 4 + 0.06 \times 4 + 0.03 \times 4 + 0.02 \times 4 + 0.01 \times 4
\]
\[
\text{平均码长} = 0.90 + 0.72 + 0.60 + 0.28 + 0.28 + 0.24 + 0.12 + 0.08 + 0.04 = 3.50
\]
#### (3) 该机允许使用多少个可编址的通用寄存器
根据题目,8位指令字长为R-R二地址类型,16位指令字长为R-M二地址类型。假设寄存器编号用5位表示,最多可以有 $2^5 = 32$ 个寄存器。
#### (4) 画出该机两种指令字格式,标出各字段的位数
**8位指令字格式**:
```
| 3位操作码 | 5位地址码 |
| 000 | 00000 |
```
**16位指令字格式**:
```
| 4位操作码 | 12位地址码 |
| 0000 | 000000000000 |
```
#### (5) 指出访存操作数地址寻址的最大相对位移量为多少个字节
16位指令字长的地址码为12位,最大相对位移量为 $2^{12} = 4096$ 个字节。
### 最终答案
1. **Huffman 编码的平均码长**:2.80
2. **优化实用的操作码的平均码长**:3.50
3. **可编址的通用寄存器数量**:32
4. **指令字格式**:
- 8位指令字格式:3位操作码 + 5位地址码
- 16位指令字格式:4位操作码 + 12位地址码
5. **访存操作数地址寻址的最大相对位移量**:4096 字节