gpt4 book ai didi

C转MIPS的麻烦

转载 作者:行者123 更新时间:2023-12-02 00:23:38 24 4
gpt4 key购买 nike

所以我已经为此工作了几天,我已经设法完成了所有的工作,除了一部分让我受不了。

int mystery(int a0)
{
if (a0 == 0)
{
return 0;
}
else
{
return mystery(a0 - 1) + a0;
}
}

我有这个递归函数和一些 MIPS 代码。 C 代码有效,但我的 MIPS 代码中某处存在问题,导致除了输入 2 之外无法正确输出。

.text

main:

li $a0, 2
jal mystery
move $a0, $v0
jal putDec
li $a0, '\n'
li $v0, 11
syscall

li $a0, 3
jal mystery
move $a0, $v0
jal putDec
li $a0, '\n'
li $v0, 11
syscall

li $v0, 10
syscall

putDec:
li $v0, 1
syscall
jr $ra

mystery:
bne $0, $a0, recur
li $v0, 0
jr $ra

recur:
sub $sp, $sp, 8
sw $ra, 4($sp)
sub $a0, $a0, 1
jal mystery
sw $v0, 0($sp)
jal mystery
lw $t0, 0($sp)
addu $v0, $v0, $t0
addu $v0, $v0, 1
add $a0, $a0, 1
lw $ra, 4($sp)
add $sp, $sp, 8
jr $ra

直到标签“神秘”为止的一切都很好,它只是作为一种形式实际放入参数并在之后打印。我遇到的问题是获取大于 3 的值以打印出正确的数字。如果有人能看到我在哪里犯了错误,我们将不胜感激。谢谢

最佳答案

尝试退后一步,比较 C 代码和汇编代码的结构,不要太担心细节。

在 C 代码中,有一个条件,导致基本情况(只返回一个值)或递归情况。递归情况执行减法、对 mystery 的递归调用和加法。

现在看看汇编版本:这也有一个条件导致基本情况或递归情况。但是看看递归案例的结构:那里有 两个mystery 的递归调用!这是一个强烈的暗示,它不太可能做同样的事情......

关于C转MIPS的麻烦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9864219/

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