我目前正在使用流水线技术为 RISC 处理器开发一个周期精确模型。我使用讲师的一些代码示例编写了管道衬里方法的代码,但它不起作用。我对以下功能有点困惑:
void rf (int RS1, int RS2, int RD, dramcmdT cmd1, dramcmdT cmd2, dramcmdT cmd3, int din, int *dout1, int *dout2)
{
static int array[32];
if (cmd1 == RD)
*dout1 = array[RS1];
if (cmd2 == RD)
*dout2 = array[RS2];
if (cmd3 == WR)
array[RD] = din;
}
RS1、RS2、RD 是我发送的一些整数值,cmd1 和 cmd2 始终为 RD,cmd3 始终为 WR。所以基本上所有的 if 语句都应该被执行,但它们没有。我在 dout1 和 dout2 中总是得到零。我问我的讲师 *dout1 = array[RS1] 是否是正确的表示法,他说这是正确的,但我不明白它的作用是什么以及为什么我在 doout1 和 dout2 中得到零?有人熟悉这个符号吗?
最佳答案
如何设置数组
中的值?唯一可以写入的值是array[RD]
。根据您的描述,RD
是一个常量。因此,您只能初始化数组的一个元素。
或者,RD
不是常量,在这种情况下,cmd1 == RD
和 cmd2 == RD
是关于什么的?
重复使用RD
作为命令和数组索引是非常不寻常和令人困惑的。
哦,顺便说一句,*dout1 = array[RS1]
是正确的表示法。这不是问题所在。
关于循环精确模型指针和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16594814/