我目前正在使用流水线为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 == RD
和cmd2 == RD
是什么?RD
作为命令和数组索引的这种重复使用非常不寻常且令人困惑。
哦,顺便说一句,*dout1 = array[RS1]
是正确的符号。那不是问题。
关于c - 循环精确的模型指针和数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16594814/