0

我如何将此代码转换为 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

4 回答 4

3

换行:

add $t1, $s0, $t1

至:

add $s0, $s0, $t1

此外,不需要使用数据段。只需设置 $t1 使用:

li $t1, 100
于 2013-10-03T07:33:18.517 回答
1

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

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

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

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

于 2013-10-03T02:10:01.430 回答
0

我认为 bgt $t1, $zero, EXIT 与您想要的相反。似乎您想转换 while(n > 100),如果您使用另一种方法在 while 循环内执行代码,然后 bgt $t1, $zero, 将会有所帮助。如我错了请纠正我。

于 2013-12-09T19:44:51.837 回答
0

Mips 没有单独的循环,而是您要做的是使用带有条件的跳转语句并使用它进行循环。

于 2013-10-03T02:12:36.083 回答