gpt4 book ai didi

c - 将 C 代码转换为 MIPS 汇编——使用数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:02 24 4
gpt4 key购买 nike

我正在做一个项目,但似乎无法弄清楚我做错了什么。我正在将一段 C 代码翻译成 MIPS 汇编语言。

C代码如下:

int A[10];
int sum = 0;
int i = 0;

while(i < 10){
sum += A[i++];
sum *= 2;
}

我已经生成了以下 MIPS 代码

where $s1 is base address of A    
$s2 is sum
$s3 is i
s4 is 10

loop:
beq $s3, $s4, exit #if s3 and s4 equal, go to else
add $t0, $s3, $s3 #2i
add $t0, $t0, $t0 #4i
add $s1, $s1, $t0 #A[i]
lw $t2, 0($s1) #t2 = A[i]
add $s2, $s2, $t2 #sum = sum + A[i]
addi $s3, $s3, 1 #i = i + 1
add $s2, $s2, $s2 #sum = sum * 2
j loop

虽然我的代码产生了一个值,但它与预期值不匹配。几个小时以来,我一直在用头敲 table ,想看看我做错了什么,但我想不通。非常感谢任何帮助

最佳答案

每次循环时,您都将 $t0 添加到 $s1。因此,不是每次都将数组指针递增 4,而是每次递增 i*4

因此,您实际上得到的不是 A[0]、A[1]、A[2]、A[3]、...,而是 A[0]、A[1]、A[3]、 A[6], ...

我的建议是删除前两个 add 指令,只执行 add $s1, $s1, 4

关于c - 将 C 代码转换为 MIPS 汇编——使用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26620109/

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