【发布时间】:2017-04-08 05:06:20
【问题描述】:
我有一个 C 代码如下:
int fibonacci(int n){
int a, b, c;
int i;
a = 1;
b = 1;
c = 2;
if(n == 1) return 1;
else if(n == 2) return 1;
else if(n == 3) return 2;
for(i = 3; i < n; i++){
a = b;
b = c;
c = a + b;
}
return c;
}
我像这样编译这段代码。
addi $sp, $sp, -32
sw $t0, 28($sp)
sw $t1, 24($sp)
sw $t2, 20($sp)
sw $t3, 16($sp)
li $t0, 1
li $t1, 1
li $t2, 2
li $t3, 3
move $t4, $a0
beq $a0, 1, FIRSTL
beq $a0, 1, SECONDL
beq $a0, 2, THIRDL
FIRSTL:
li $v0, 1
j FOR
SECONDL:
li $v0, 1
j FOR
THIRDL:
li $v0, 2
j FOR
FOR:
beq $t3, $a0, ENDL
addi $t1, $t1, 1
j FOR
move $s0, $s1
move $s1, $s2
add $s2, $s1, $s0
ENDL:
lw $t1, 16($sp)
lw $s2, 20($sp)
lw $s1, 24($sp)
lw $s0, 28($sp)
addi $sp, $sp, -32
add $v1, $0, $s2
它只显示了第 0 个斐波那契,而另一个的斐波那契从未发生过。 我的 Mips 代码有什么问题?我很困惑。
【问题讨论】:
-
我认为您的 C 或 MIP 代码没有问题。你能解释一下吗?哪个输入会产生不正确的输出?
-
你是如何编译代码的?如果您手动执行此操作,例如作为家庭作业,我印象深刻(没有讽刺)。但如果不是,你为什么要提供汇编代码?请创建一个 MCVE stackoverflow.com/help/mcve。而且,@Arash 评论的更通用版本:请阅读stackoverflow.com/help/how-to-ask