虽然循环在Mips(新到Mips)

时间:2013-10-03 01:59:03

标签: loops while-loop mips

如何将此代码转换为Mips?

    int n = 100; int sum = 0; while (n>0) {
    sum = sum + n;
    n--; }

到目前为止,我有这个,我不知道该怎么做才能完成这个。

    .data

    n: .word 100

    .text

    main:

    la $t0, n   
    lw $t1, 0(t0)
    li $so, 0

    Loop:
       bgt $t1, $zero, EXIT
       add $t1, $s0, $t1
       addi $t1, $t1, -1

       j Loop

    exit:

4 个答案:

答案 0 :(得分:3)

更改行:

add $t1, $s0, $t1

要:

add $s0, $s0, $t1

此外,不需要使用数据段。只需使用:

设置$ t1即可
li $t1, 100

答案 1 :(得分:1)

“Mips”不是一种语言。 MIPS指令集架构(ISA)。您是否想知道如何将C代码转换为MIPS汇编代码?

这看起来像是Patterson和Hennessy教科书的作业。如果是这样,你应该去教授的办公时间寻求帮助。几乎每所大学都在其学术手册中包含一条声明,即在线寻求家庭作业帮助是不道德的。

如果您的请求不是家庭作业,那么将该C代码转换为MIPS汇编代码的最佳方法是使用编译器。对于简单的循环,编译器将生成比手动生成的更有效的代码。例如,“gcc -march = native -O3”将生成代码,以优化您正在编译的确切CPU,同时考虑管道深度和缓存延迟。

如果您绝对需要查看汇编代码,请使用“gcc -S”生成汇编文件。

答案 2 :(得分:0)

Mips没有循环,而是你要做的是使用带有条件的循环语句并循环使用。

答案 3 :(得分:0)

我认为bgt $ t1,$ 0,EXIT与你想要的相反。看起来你想要转换while(n> 100),如果你使用另一种方法在while循环中执行代码,那么它会有所帮助,然后是bgt $ t1,$ 0 ,.如我错了请纠正我。