2014-10-10 93 views
0

我在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的值如果$s2在开始时设置为零?

我试图解决这个问题的答案,我得到了20.但是,解决方案手册说它的200.谁能告诉我什么我错过了吗? $s2会不会递增2,直到$t1为0?

+2

我很肯定你是正确的,即答案是20而不是200. – 2014-10-10 01:01:17

+0

任何想法我怎么能输出$ s2在这个? – user3701204 2014-10-10 01:21:17

+0

只需使用调试器/模拟器。它是20. – Jester 2014-10-10 01:31:42

回答

2

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

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

看起来像你的工作出的书“计算机组成与设计:硬件/软件接口“我只能设法找到第3版和第4版的勘误表,而且我也没有看到这两个错字。你正在使用哪个版本?

+0

是的,这正是我的想法。 现在使用第5版,这是最新的(2014) – user3701204 2014-10-10 01:27:50

+0

研究,我意识到解决方案手册充满错误..关于浪费纸币 – user3701204 2014-10-10 02:01:18

1

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