我的代码应接受来自用户的值n以输出Fibonacci系列。该代码不适用于4及以上版本。另外,如何修复代码,使fib系列从0开始,而不是1.如果用户输入4,则代码输出应如下所示
0 1 1 2
这是代码
.data
string:.asciiz "Enter N: " # space to insert between numbers
space:.asciiz " " # space to insert between numbers
.text
la $a0, string
li $v0, 4
syscall # print the string
li $v0,5 #read inetger in $t0
syscall
move $t0,$zero
addi $t0,$v0,-1
move $t1,$zero
addi $t1,$t1,1
move $s0,$zero
addi $s0,$s0,1
move $a0,$s0
li $v0, 1 # $integer to print
syscall
la $a0, space
li $v0, 4
syscall # print the string
loop:
move $a0,$s0
li $v0, 1 # $integer to print
syscall
la $a0, space
li $v0, 4
syscall # print the string
addi $t0,$t0,-1
beq $t0,$zero,stop
add $s0,$s0,$t1
sub $t1,$a0,$t1
j loop
stop:
li $v0, 10 # system call for exit
syscall # Exit!
答案 0 :(得分:0)
您错误地实施了算法。你写的内容翻译成这样的东西:
int prev1 = 1, fn = 1;
for (int n = 0; n < input; ++n) {
printf("%d ", fn);
fn += prev1;
prev1 = &space - prev1;
}
但你应该做的更像是:
int prev2 = 0, prev1 = 1;
for (int n = 0; n < input; ++n) {
int fn = prev1 + prev2;
printf("%d ", prev2);
prev2 = prev1;
prev1 = fn;
}
关于标题中的问题(“如何调试?”):SPIM(及其变体)和MARS都为您提供了许多调试功能。
有代码,数据和寄存器查看器。
您可以单步执行代码(通常使用F10,但可能在不同的模拟器之间有所不同),还可以在特别感兴趣的代码位置设置断点。