第 43 题
(本题满分 10 分)某 16 位计算机按字节编址,通用寄存器 R0~R15 的编号为 0~15,存储器地址为 16 位,采用定长指令字,指令格式有 R 型、I 型、M 型三种,如下表所示。

其中:
- OP1 为 0001、0010 分别表示加、左移指令;
- OP2 为 0100 表示加立即数指令;
- OP3 为 1110、1111 分别表示取数、存数指令;
- R[r] 表示寄存器 r 中的内容;
- mm 表示移位位数;
- M[addr] 表示存储器地址 addr 中的内容。请回答下列问题:
(1) 主存单元和通用寄存器的宽度各为多少位?(2 分)
(2) op1 和 op2 的编码是否可以相同?op2 和 op3 的编码是否可以相同?(2 分)
(3) 若 R(2)=ABCDH,R(9)=F001H,则指令 0000 0010 1001 0001 执行后,R2 和 R9 中的内容分别是多少?(2 分)
(4) 若变量x、y均为 16 位带符号整数,在存储器中依次从低地址向高地址连续存放,x的地址在 R15 中。实现y=16x−5的 4 条指令 11–14 如题 43 表所示,写出 ①~④ 处的内容。(4 分)题 43 表:
| 地址 | 内容 |
|---|---|
| 11 | 1 0000 0000 0000 |
| 12 | 0000 2 0010 |
| 13 | 0100 0000 3 |
| 14 | 1111 4 |
[tag_link]
【答案】
(1) 主存单元和通用寄存器的宽度
该计算机是 按字节编址→ 所以主存单元存储的是字节即 8 位
通用寄存器R0∼R15用于参与算术、移位、访存等运算,且指令中的运算(如加法、移位、取数/存数)都是以“字”为基本操作单位→ 寄存器必须能容纳一个完整的字。
结论:
- 主存单元宽度:8 位
- 通用寄存器宽度:16 位
(2) op1 和 op2 可以相同,因为两者在指令中占据不同位。op2 和 op3 不能相同,因为两者在指令中占据相同位,若相同会导致指令冲突。 (3) 0000 0010 1001 0001 属于 R 型指令,下表中给出了每个字段的具体含义:
| 字段 1 | 字段 2 | 字段 3 | 字段 4 |
|---|---|---|---|
| 0000 | 0010 | 1001 | 0001 |
| R 型指令前缀 | 目标寄存器为 R[2] | 源寄存器为 R[9] | op 字段为加 |
| 所以这个指令的实际含义为: |
R[2] ← R[2] + R[9]-R[2] = ABCDH + F001H = 9BCEH
所以 R2 中的内容变为 98CEH,R9 中的内容保持不变为 F001H。
(4) y = x * 16 需要通过四个步骤得到:
- 从
x的地址中获取x的值:通过取数指令 - 通过移位指令实现
x * 16的乘法操作 - 通过减法指令实现
- 5的操作 - 将
x * 16 - 5的值存储到y中:通过存数指令所以四条指令的二进制如下: R[0] ← M[R[15]]:1110 0000 0000 0000R[0] ← R[0] << 4:0000 0000 0100 0010R[0] ← R[0] + (-5):0100 0000 1111 1011M[R[15] + 2] ← R[0]:1111 0000 0000 0010所以 ① = 1110,② = 0000 0100,③ = 1111 1011,④ = 0000 0000 0010。