我目前正在使用流水线为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中得到零?有人熟悉这个符号吗?

最佳答案

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

另外,RD不是常数,在这种情况下,cmd1 == RDcmd2 == RD是什么?

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

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

关于c - 循环精确的模型指针和数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16594814/

10-11 21:31