gpt4 book ai didi

C 代码到 MIPS 汇编

转载 作者:行者123 更新时间:2023-12-02 21:10:39 24 4
gpt4 key购买 nike

我试图将 C 代码转换为 MIPS 汇编。有以下两个 C 代码片段。问题是我的解决方案与标准解决方案不同。另外,我不明白标准解决方案。我希望有人可以向我解释以下两个 mips 汇编代码片段。

首先,该任务的一些附加信息。仅允许使用以下 MIPS 指令:lw、add、beq、bne 和 j
寄存器:
$s3 包含 i
$s4 包含 j
$s5 包含 k
A是一个32位整数数组,A的起始地址在$s6中强>
$t0$t1 可用于存储临时变量

第一个是一个简单的 do-while 循环:

do {
i = i + j;
} while(A[i] == k);

MIPS 组装

loop: add $s3, $s3, $s4   // this is i = i+j
add $t1, $s3, $s3 // from now on
add $t1, $t1, $t1 // I cant follow anymore
add $t1, $t1, $s6 // What happens in these three lines?
lw $t0, 0($t1) // 0($t1) is new for me. What does this zero do?
beq $t0, $s5, loop

现在是第二个 C 代码:

if ( i == j )
i = i + A[k];
else if( i == k )
i = i + A[j];
else
i = i + k;

这是 MIPS 汇编代码:

       bne $s3, $s4, Else1  // this line is if(i==j)
add $t1, $s5, $s5 // from here on
add $t1, $t1, $t1 // till
add $t1, $t1, $s6 //
lw $t0, 0($t1) //
add $s3, $s3, $t0 // here I don't understand
j done
ELSE1: bne $s3, $s5, Else2 // this line is if(i==k)
add $t1, $s4, $s4 // The same game as above
add $t1, $t1, $t1
add $t1, $t1, $s6
lw $t0, 0($t1)
add $s3, $s3, $t0 // till here
j done
ELSE2: add $s3, $s4, $s5

谁能给我解释一下到底发生了什么?这将非常有帮助

最佳答案

好的。最有趣且难以理解的代码如下:add $t1,

add $t1, $s5, $s5
add $t1, $t1, $t1
add $t1, $t1, $s6

此代码将 $s5 乘以四,并将其存储在 $t1 中,然后添加到 $t1 $s6。这相当于:

$t1 = A[k]

理解了这一点后,代码看起来就清晰多了。

关于lw $t0, 0($t1):

您可以在地址中使用偏移点。这里偏移量是0。

关于C 代码到 MIPS 汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21029702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com