在MIPS(汇编)中需要帮助解决这个循环

时间:2014-10-10 00:49:19

标签: loops assembly 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为0之前,不会$t1继续增加2?

2 个答案:

答案 0 :(得分:2)

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

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

看起来你已经开始工作了这本书"计算机组织与设计:硬件/软件界面"我只设法找到第3版和第4版的勘误表,我也没有看到这个错字。您使用的是哪个版本?

答案 1 :(得分:1)

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

相关问题