12

我需要将此 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:
4

4 回答 4

11

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

.

于 2012-02-06T03:49:09.880 回答
2

您没有在循环之前将 j ($t0) 设置为零。

于 2012-02-06T03:50:30.430 回答
0
.data
mensage: asciiz "Text Test"
newline: asciiz "\n"
.text

# tmp = $v0
# j = $t0
 
main:
    li $t0,0
    li $t1,0
    li $t3,0
loop:
    bgt $t0,15,exit
    addi $t0,$t0,1
    j loop
    mul $t1,$t1,2
    add $t3,$t1,3  
exit:
    li $v10,0
    syscall
于 2016-04-13T22:31:31.783 回答
0

我也不知道您正在运行什么 MIPS 模拟器,但我知道其中一些不是常量,它们要求您将它们分配给寄存器。所以就像 bgt Rsrc1, Src2, label 一样,通常如果你在 src2 中输入一个整数,计算机会翻译它,但我知道对于某些人来说,你会得到一个错误 add $v0, $t1, 3 因为它不会将 add 翻译成加迪。与 mul 相同。我知道我的 SPIM 模拟器不允许这样做。

于 2018-04-04T00:40:53.160 回答