这道题我个人认为书上给出的AR和DR是不完全的,书中图截图如下:
在这其中,AR是数据地址寄存器,DR是数据缓冲寄存器。其实,在书中的图5.15中,有个关于LAD的流程图
在红框部分,如果只是按照书中给出的cpu来看的话,是不合常理的,为什么一个数据地址寄存器要和ABUS相连呢,ABUS不是和PC相连吗?所以,这里我们要补充一下:AR是地址寄存器(不仅是数据cache对应的地址寄存器,还可以是指令cache对应的地址寄存器)
有了上面的补充,我们可以来完善第一题中的内容了
保存当前正在执行的指令寄存器是:IR
保存当前正在执行的指令地址寄存器是:AR
算术逻辑运算结果通常放在:DR和通用寄存器中
在这里我们需要明确一下取指周期这样的公操作,还记得我刚在放在上面那张增添过AR和DR的图吗,仔细看看那个图,你就知道如何去取址以及书上的答案是如何来的了。(好吧,我再放一遍)
取指操作就是由pc里面的指令地址在M(指存)中去寻址
注意:棱形部分是一个地址逻辑判断即下一个取址是直接PC++中去取还是要进行一个判别,“~”是执行公操作,比如中断操作等
取值周期:pc–ar m–dr dr–ir
执行周期:(r3)–>ar (m)–>DR DR–>r0
我们来总结一下这两个题,看看有没有什么规律可言。前者呢是将通用寄存器中的数放进了数存中,后者反之。但无论如何,首先被访问的一定是数存(AR),AR作为一个地址寄存器,放的就是指令中数存相关的地址,我们的目的是让数存读出AR存放地址对应的那个数据吧,即(M)–>DR,DR是数据缓冲寄存器,是专门用来存放数据的,最有将DR中的数写入到R0中,就完成了数存向通用寄存器的写入了。那么反过来呢,还是先访问数存(R2)–>AR,再访问通用寄存器R1–>DR,最后写回到数存DR–>M
这道题的难点就在微指令有几条。我们再仔细读读上面的题目,每条指令是由四条微指令构成,其中一条取值微指令是指令公用的,这说明了理论上我每条指令都要用到四条微指令,但是呢为了节省空间,我把那条公用的微指令给提取出来后,就只这一条,但每个指令都可以来用。所以,这里共有指令:
80
×
(
4
−
1
)
+
1
80 \times (4-1) +1
80×(4−1)+1
然后用指令数乘上长度,就是存储器容量了(略)
M
=
G
M=G
M=G
S
3
=
H
+
D
S_3=H+D
S3=H+D
S
2
=
A
+
B
+
H
+
D
+
E
+
F
+
G
S_2=A+B+H+D+E+F+G
S2=A+B+H+D+E+F+G
S
1
=
A
+
B
+
F
+
G
S_1=A+B+F+G
S1=A+B+F+G
C
=
H
+
D
+
E
y
+
F
y
C=H+D+E_y+F_y
C=H+D+Ey+Fy
仔细想想为什么不是
×
\times
×而是+呢,因为ABD。。这些都表示不同的指令,这些指令执行任意一条
S
2
S_2
S2都会为1的
审题,控制字段仅限8位,这里的控制字段就是指的操作码字段,一共有10位,但这里仅限8位,故我们要位个别的微操作进行编码了,如何编码,哪些微操作呢—互斥操作
我们可以发现 d i j 是互斥的,e f h是互斥的,于是,这两组互斥操作我们分别用两位来表示,故这里一共占了4位了,我们还发现还剩了4位,这样一来,刚好8位了
当然,不止一种操作了。理解思路最重要。
容量为512*48位,下址字段为9位,判别字为4位,故操作控制位 为48-9-4
操作周期:max{100,100,80,50}
第2条指令要在第1条指令完成送结果后才可取数
- 取址 取数 运算 送结果
- —— —— —— ——
-
取址 译码 取数 送结果
-
—— —— —— ——
延迟两个周期 200ns
加以改进,可以在运算的时候就进行取数了
延迟100ns
这里只说两个概念:吞吐率:是单位时间执行完的指令数;加速比:是不同的吞吐率之比