gpt4 book ai didi

c - 在 MIPS 程序集中交换数组中的元素? (比较清楚的)

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:05 25 4
gpt4 key购买 nike

我知道有一个类似的问题here .我想将其视为该问题的延续,但更彻底。

这是我想转换为 MIPS 的 C 代码的相关部分:

int a = [100];
...
j = 0;
while (j<50){
if (a[j] > a[99-j]) {
tmp = a[99-j];
a[99-j] = a[j];
a[j] = tmp;
}
j = j+1;
}

(所以它基本上像反向一样工作)

到目前为止,我在 MIPS 中完成了:

    .data
array: .word 99, 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87, 86, 85, 84, 83, 82, 81, 80,
79, 78, 77, 76, 75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60,
59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40,
39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20,
19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1,0
.text
.globl main
main:
la $s1, array # $s1 = array address
la $s3, array
li $s0, 0 # j = 0
lw $t0, 0($s1) # $t0 = a[0]
lw $t1, 396($s3) # $t1 = a[99]

while: beq $s0, 50, end # break from while loop once j = 50

if: blt $t0, $t1, iterj # if the if statement not satisfied, branch to iterj
sw $t1, 0($s1) # write to a[99-j]
sw $t0, 396($s1) # write to a[j]

iterj: addi $s0, $s0, 1 # increment j
addi $s1, $s1, 4 # increment source address starting with j = 0
addi $s3, $s3, -4 # decrement source address starting with j = 99
lw $t0, 0($s1)
lw $t1, 396($s3)
j while
end:

总结我在 MIPS 中所做的事情:

基本上,我尝试在 $s1 中初始化数组,并尽力在其上进行交换。然后我意识到我还需要在 a[0] 处递增源地址,同时在 a[99] 处递减源地址。所以我在想我不能只使用 1 个数组,然后我在 $s3 中创建了一个相同的数组来处理它:

addi    $s1, $s1, 4 # increment source address starting with j = 0
addi $s3, $s3, -4 # decrement source address starting with j = 99

现在是我需要帮助的部分:

代码工作(正确交换)从 0 到 31(全部以 MARS 中显示的十六进制形式)然后 31 到 1 然后突然从 63 到 47。显然我做错了什么。 我只需要它通过交换返回 0 到 63(十六进制)或 0 到 99(十进制)。有什么提示吗?

最佳答案

好吧,您关于需要两个数组的说法是错误的,但正是您得出了这样的结论。请记住,任何可以用 C 编写的东西当然也可以用汇编编写,因此您提供的 C 代码应该作为一个模型。

---编辑

我首先建议的是加载数组的地址,并计算结束地址。

la   $t0 array
addi $t1 $t0 396 #last element of array

然后在循环体中:

lw  $t2 0($t0)
lw $t3 0($t1)
sw $t2 0($t1)
sw $t3 0($t0)

addi $t0 $t0 4
addi $t1 $t1 -4
blt $t0 $t1 loop

关于c - 在 MIPS 程序集中交换数组中的元素? (比较清楚的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17785863/

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