首页 文章

我的MIPS汇编代码中的错误

提问于
浏览
0

我有这个代码,但它没有完全按照我的要求执行 . 它正确地计算数学但在某些点打印出错误的值 .

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

15 46 23 70 35 106 53 160 80 40 20 10 5 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 回答

  • 1

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

    解决这个问题

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

    以上:

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

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

相关问题