0

我目前正在使用流水线为 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] 是否是正确的表示法,他说它是正确的,但我不明白它的作用以及为什么我在 dout1 和 dout2 中得到零?有人熟悉这个符号吗?

4

1 回答 1

1

你如何设置值array?唯一可以写入的值是array[RD]. 根据您的描述,RD是一个常数。因此,您只能初始化数组的一个元素。

或者,RD不是一个常数,在这种情况下什么是cmd1 == RDcmd2 == RD关于?

RD这种作为命令和数组索引的重复使用是非常不寻常且令人困惑的。

哦,顺便说一句,*dout1 = array[RS1]是正确的符号。那不是问题。

于 2013-05-16T19:06:48.463 回答