2009 组成原理 寄存器类型组成原理 解答题
第 44 题

(13分)某计算机字长16位,采用16位定长指令字结构,部分数据通路结构如下图所示,图中所 有控制信号为1时表示有效、为0时表示无效。例如控制信号 MDRinE 为 1 表示允许数据从 DB 打 入 MDR,MDRin 为 1 表示允许数据从内总线打入 MDR。假设 MAR 的输出一直处于使能状态。加法 指令“ADD (R1),RO”的功能为(R0)+(R1))→(R1), 即将 R0 中的数据与 R1 的内容所指主存单元的数 据相加,并将结果送入 R1 的内容所指主存单元中保存。

2009_Q44_8

下表给出了上述指令取指和译码阶段每个节拍(时钟周期)的功能和有效控制信号,请按表中描述方式用表 格列出指令执行阶段每个节拍的功能和有效控制信号。

[tag_link]

[tag_link]

题干已给出取值和译码阶段每个节拍的功能和有效控制信号,我们应以弄清楚取指阶段中数据通路的信息流动作为突破口,读懂每个节拍的功能和有效控制信号。然后应用到解题思路中,包括划分执行步骤、确定完成的功能、需要的控制信号。

先分析题干中提供的示例(本部分解题时不做要求): 取指令的功能是根据 PC 的内容所指主存地址,取出指令代码,经过 MDR,最终送至 R。这部分和后面的指令执行阶段的取操作数、存运算结果的方法是相通的。

C1: (PC)→MAR 在读写存储器前,必须先将地址(这里为 PC)送至 MAR。

C2: M(MAR)→MDR, (PC)+1→PC 读写的数据必须经过 DR,指令取出后 PC 自增 1。

C3: (MDR)→IR 然后将读到 MDR 中指令代码送至 IR 进行后续操作。

指令 “ADD(R1),R0” 的操作数一个在主存中,一个在寄存器中,运算结果在主存中。根据指令功能,要读出 R1 的内容所指的主存单元,必须先将 R1 的内容送至 MAR,即 (R1)→MAR。而读出的数据必须经过 MDR,即 M(MAR)→MDR。

因此,将 R1 的内容所指主存单元的数据读出到 MDR 的节拍安排如下:

C5: (R1)→MAR

C6: M(MAR)→MDR

ALU 一端是寄存器 A,MDR 或 R0 中必须有一个先写入 A 中,如 MDR。

C7: (MDR)→A

然后执行加法操作,并将结果送入寄存器 AC。

C8: (A)+(R0)→AC

之后将加法结果写回到 R1 的内容所指主存单元,注意 MAR 中的内容没有改变。 C9: (AC)→MDR

C10: (MDR)→M(MAR)

有效控制信号的安排并不难,只需看数据是流入还是流出,如流入寄存器 X 就是 Xin,流出寄存器 X 就是 Xout。还需注意其他特殊控制信号,如 PC+1、Add 等。

于是得到参考答案如下: 时钟 功能 有效控制信号

C5 MAR ← (R1) R1out, MARin

C6 MDR ← M(MAR) MemR, MDRinE

C7 A ← (MDR) MDRout, Ain

C8 AC ← (A) + (R0) R0out, Add, ACin

C9 MDR ← (AC) ACout, MDRin

C10 M(MAR) ← (MDR) MDRoutE, MemW

本题答案不唯一,如果在 C6 执行 M(MAR)→MDR 的同时,完成 (R0) → A(即选择将 (R0) 写入 A),并不会发生总线冲突,这种方案可节省 1 个节拍。