从MIPS转换为C的问题

时间:2011-08-10 14:02:53

标签: architecture mips computer-architecture

我试图解决这项家庭作业但无法提出解决方案。以下是问题,

  

将以下MIPS代码翻译成高级语言程序。   假设$ t0,$ t1和$ t2包含数组A,B的基址   和C.分别。

add $t4, $zero, $zero
Loop:
add $t5, $t4, $t1
lw $t6, 0($t5)
add $t5, $t4, $t2
lw $t7, 0($t5)
add $t6, $t6, $t7
add $t5, $t4, $t0
sw $t6, 0($t5)
addi $t4, $t4, 4
slti $t5, $t4, 256
bne $t5, $zero, Loop
Also find the decimal value in the offset field of bne
     

指令。

这是我尝试过的,但我还没有找到256的位置。

int *temp4 = 0;
while(1)
{
    *int temp5 = temp4 +B[0];
    a:
        *int temp6 = temp5;
        temp5 = C[0] + temp4;
        *temp7 = temp5;
        temp6 = temp6 + temp7;
        temp5 = temp4 + A[0];
        temp6 = temp5;
        temp4 += 4;
        if(temp5 < temp4)
            goto __;
        if(temp5 != 0)
            goto a;
}

1 个答案:

答案 0 :(得分:4)

我认为你是在过度思考。

该代码的作用是这样的

for (int i =0 ; i< 64; i++){

   A[i] = B[i] + C[i];

}

不解释原因,因为看起来很像是作业。

  

这是我尝试过的,但我还没有找到256的位置。

你正在混淆。在i结束时看到slti?这意味着它使用中间操作数,在本例中为256。那么slti $t5, $t4, 256指令正在做什么,如果1的内容低于256,则在寄存器$t5中设置$t4。否则,$t5会获得0

因此,循环将进行256/4次迭代,因为只有当bne的内容大于$t4时,256才会通过(即不跳转)。