将 C 程序转换为 MIPS 汇编

发布于 2025-01-20 03:27:23 字数 708 浏览 2 评论 0原文

我有一个作业,但我不明白如何将 C 代码转换为汇编语言。

假设您有一个 12 的数组。重新排列数组的内容,使它们按从小到大排序(从 A[0] 到 A[12])。**

地址:12,8,4,0

数据:1、6、4、2

所以最终结果应该是: A[0]==1, A[4]==2, A[8]==4, A[12]==6

这是我的 C 代码:

int x, i=12;
while(A[i] < A[i-4])
{
x = A[i];
A[i] = A[i-4];
A[i-4] = x;
i -= 4;
}

所以现在我必须翻译该代码到 mips 但我被困住了。这就是我到目前为止所做的:

addi $t1, $t1, 12   #$t1 = i
sll $t0, $t1, 2
add $t0, $t0, $s6   #$s6 = A[]

lw $t2, 0($s6)
lw $t3, 4($s6)
lw $t4, 8($s6)
lw $t5, 12($s6)
loop: 
slt $t6, $t5, $t4
bne $t6, 1 END
lw $t6, $t5
lw $t5, $t4
lw $t4, $t6
addi $t5, $t5, -4
addi $t4, $t4, -4
j loop
END

我知道这是不正确的,但我不知道如何让它发挥作用。

I have an assignment and I don't understand how to turn C code to assembly.

Suppose you have an array of 12. Rearrange the contents of the array so they are sorted from smallest to largest (from A[0] to A[12]).**

Address: 12, 8, 4, 0

Data: 1, 6, 4, 2

So the end result should be: A[0]==1, A[4]==2, A[8]==4, A[12]==6

This is my C code:

int x, i=12;
while(A[i] < A[i-4])
{
x = A[i];
A[i] = A[i-4];
A[i-4] = x;
i -= 4;
}

So now I have to translate that code to mips but I'm stuck. This is what I've made so far:

addi $t1, $t1, 12   #$t1 = i
sll $t0, $t1, 2
add $t0, $t0, $s6   #$s6 = A[]

lw $t2, 0($s6)
lw $t3, 4($s6)
lw $t4, 8($s6)
lw $t5, 12($s6)
loop: 
slt $t6, $t5, $t4
bne $t6, 1 END
lw $t6, $t5
lw $t5, $t4
lw $t4, $t6
addi $t5, $t5, -4
addi $t4, $t4, -4
j loop
END

I know this isn't correct but I don't know how to make it work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文