我的MIPS汇编代码中的错误

时间:2014-01-07 18:29:05

标签: assembly mips

我有这个代码,但是它没有按照我想要的方式执行。 它正确地计算数学但在某些点打印出错误的值。

例如,如果我输入15,它应该打印出以下内容:

15 46 23 70 35 106 53 160 80 40 20 10 五 16 8 4 2 1

我期待这个输出,因为它是根据这个

编码的
start : if (n == 1) stop ;
else if (n is even ) n = n/2;
else n = 3*n+1;
go to start ;

但它确实

15 46 46 70 106 160 80 40 20 10 16 16 8 4 2

它也没有打印出1值,有人可以帮忙吗?我也很喜欢MIPS,所以请保持基本水平

1 个答案:

答案 0 :(得分:1)

如上一个问题中所述,问题是原始C程序中的一个错误 - 即在输出后你将n除以2。

解决此举动

# n = n / 2
srl $t0 $t0 1

以上:

# print n
move $a0 $t0
addi $v0 $zero 1
syscall

我可以验证这会为您提供所需的结果。