需要帮助解决MIPS(程序集)中的此循环



我在MIPS(汇编)中有一个循环,看起来像这样:

LOOP: 
      slt $t2, $0, $t1
      beq $t2, $0, DONE
      subi $t1, $t1, 1
      addi $s2, $s2, 2
      j LOOP
DONE:

如果$t1的值在开始时设置为10,那么如果$s2在开始时被设置为ZERO,$s2的值是多少?

我试图解决这个问题的答案,结果得了20分。但是,解决方案手册上说是200。有人能告诉我我在这里错过了什么吗?$s2不会一直增加2,直到$t1为0?

我同意@Joe Farrell的观点,这个循环基本上等同于这个C风格的循环:

while(t1 > 0)
{
  --t1;
  s2 += 2;
}

看起来你在读《计算机组织与设计:硬件/软件界面》一书。我只找到了第三版和第四版的勘误表,但我也没有看到这个拼写错误。你用的是哪一个版本?

答案是22。因为如果u重复循环直到t1=-1,s2将是22,并且当循环再次开始时,t2变为0,这导致打印DONE,这是循环退出的地方。

最新更新