1

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

将以下 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;
}
4

1 回答 1

4

我认为你想太多了。

该代码的作用是这样的

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

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

}

不打算解释为什么,因为这看起来很像家庭作业。

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

你把事情搞混了。看到i结尾了slti吗?这意味着它使用中间操作数,在这种情况下是256. 所以slti $t5, $t4, 256指令的作用是,如果 的内容低于 256,则1在寄存器中设置 a 。否则,得到 a 。$t5$t4$t50

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

于 2011-08-10T14:17:39.347 回答