我在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,这是循环退出的地方。