assembly 我不清楚MIPS中的哪些指令有危险

bxfogqkk  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(112)

我一直在研究这个问题,经过我自己的尝试,我发现了3个数据危险。然而,其他消息来源却另有说法。
在以下说明中查找所有危险(MIPS Pipeline):

add $t3, $t1, $t2
sub $t3, $t2, $t1
and $t4, $t3, $t1
or $t0, $t3, $t4
xor $t1, $t4, $t3
sw $t4, 4($t0)

字符串
不仅如此,即使是chatGPT也没有给出任何结论性的解释:

nwlqm0z1

nwlqm0z11#

这是一个人为的和愚蠢的代码序列。

add $t3, $t1, $t2
sub $t3, $t2, $t1

字符串
在上面的例子中,$t3add写入,但随后被sub覆盖,并且没有使用add s $t3。就其本身而言,这不会产生危险,数据危险也称为RAW危险,代表写后读。在上文中,仅存在写入后写入,MIPS管线不会遭受危险。
在下一个指令中:

and $t4, $t3, $t1


$t3上存在一个数据RAW危险。
当我们考虑下一条指令时:

or $t0, $t3, $t4


我们在一条指令中有两个危险,一个在$t3上,一个在$t4上。由于一个指令中有两个危险,我们必须成为阅读问题陈述的Maven来确定答案。因为它仍然只有一条指令,如果你计算有危险的指令,它算作一条,但如果你计算危险本身,它算作两条。
与:

xor $t1, $t4, $t3


我们在$t4上有一个危险,但是$t3已经通过管道并返回到寄存器文件,如果您使用寄存器文件可以读取当前周期写入结果的常见实现细节。
最后:

sw $t4, 4($t0)


$t0上存在RAW数据危险。
所以,我数了5个RAW危险,和4个至少有一个RAW危险的指令。

相关问题