MIPS程序集用于简单的for循环

时间:2012-02-06 03:40:23

标签: assembly mips mips32

我需要将此C代码转换为MIPS程序集。 这是C代码:

int tmp = 0; 
for (int  j = 0; j < 15; ++j) 
     tmp = tmp * 2 + 3

这是我的MIPS汇编代码。这是正确的翻译吗?如果你发现任何错误,我真的很想知道。

# tmp = $v0
# j = $t0

.globl main

 main:
    li $v0,0

loop:
    bgt $t0,15,exit
    addi $t0,$t0,1
    mul $t1,$v0,2
    add $v0,$t1, 3
    j loop  

exit:

3 个答案:

答案 0 :(得分:8)

你的循环从0到14,所以你的bgt指令应该是:bgt $t0,14,exit我认为。

答案 1 :(得分:2)

在循环之前,不要将j($ t0)设置为零。

答案 2 :(得分:0)

我也不知道你正在运行什么MIPS模拟器,但我知道 其中一些不是常量,他们要求你分配它们 寄存器。所以像bgt Rsrc1,Src2,label,通常如果你放一个 src2中的整数,计算机将翻译,但我知道 有些你会在添加$ v0,$ t1,3时遇到错误,因为它不会 翻译添加到addi。与mul相同。我知道我的SPIM模拟器没有 允许它。