Loops 循环堆栈迭代斐波那契组合

Loops 循环堆栈迭代斐波那契组合,loops,assembly,stack,mips,fibonacci,Loops,Assembly,Stack,Mips,Fibonacci,我试图用汇编语言在一个循环中编写斐波那契函数,但我找不到按特定顺序找到的值,并将它们添加到堆栈中 用户将向我们询问堆栈序列范围,对于n>1 F(n)=F(n-1)+F(n-2),循环应采用方程的形式 我不明白什么是我的错 示例程序应该是这样的;输入序列号:6,F(6)=8 .data str:.asciiz“输入序列号:\n” f:.字0,1 .文本 主要内容: la$s0 f#f的地址 lw$s10($s0) addi$a0$0 0#int a0=f[0]:0(s1) lw$s2 4($s0)

我试图用汇编语言在一个循环中编写斐波那契函数,但我找不到按特定顺序找到的值,并将它们添加到堆栈中

用户将向我们询问堆栈序列范围,对于n>1 F(n)=F(n-1)+F(n-2),循环应采用方程
的形式

我不明白什么是我的错

示例程序应该是这样的;输入序列号:6,F(6)=8

.data
str:.asciiz“输入序列号:\n”
f:.字0,1
.文本
主要内容:
la$s0 f#f的地址
lw$s10($s0)
addi$a0$0 0#int a0=f[0]:0(s1)
lw$s2 4($s0)
addi$a1$zero 1#int a1=f[1]:1(s2)
李$V04
la$a0 str#打印字符串
系统调用
li$V05
系统调用
移动$t0$v0#读取整数t0=n
日航菲波
addi$t1$v0 0#t1=v0=总和
加上$t2$a0$a1#t2=a0+a1=f[0]+f[1];
加上$t3$t2$t1#t3=t1+t2
li$v0 1#打印(t3)
addi$a0$t3 0
li$v0 10#退出计划
系统调用
菲波:
addi$t1$0 1#常数1
addi$t2$t0 0#i:t2=n:t0
addi$t3$0#f(i)=0:总和:t3;
#f(n)
#对于(i=n,i>1,i--)
#f(i):和=f(i-1)+f(i-2);
#返回f(i)
菲波洛普:

slt$t4$t1$t2#t1:1斐波那契不需要任何堆栈空间,只需
x+=y
并交换x和y即可。(或者按2展开并执行
x+=y;y+=x;
谢谢,这个等式对我有效,我看到了我的错误。
.data
str: .asciiz "Enter the sequence number: \n"
f:  .word 0,1
.text
main:
la $s0 f        #address of f
lw $s1 0($s0)       
addi $a0 $zero 0    #int a0 = f[0]:0(s1) 
lw $s2 4($s0)       
addi $a1 $zero 1    #int a1 = f[1]:1(s2)

li $v0 4
la $a0 str      #print string
syscall

li $v0 5        
syscall
move $t0 $v0        #read integer t0=n
jal FIBO

addi $t1 $v0 0      #t1=v0=sum
add $t2 $a0 $a1     #t2=a0+a1=f[0]+f[1];
add $t3 $t2 $t1     #t3=t1+t2

li $v0 1        #print(t3)
addi $a0 $t3 0

li $v0 10       #exit program
syscall

FIBO:

addi $t1 $zero 1    #constant 1
addi $t2 $t0 0      #i:t2=n:t0
addi $t3 $zero 0    #f(i)=0:sum:t3;

#f(n)
#for (i=n, i>1, i--)
#   f(i):sum = f(i-1)+f(i-2);
#return f(i)
FIBOLOOP:
slt $t4 $t1 $t2     #t1:1<t2:i
beq $t4 $zero EXIT_LOOP
addi $t4 $t2 -1
addi $t5 $t2 -2
add $t3 $t4 $t5
sub $sp $sp -24
sw $t3 0($sp)       #BACKUP-STORING t3----1 
sw $t3 4($sp)   
sw $t3 8($sp)   
sw $t3 12($sp)
sw $t3 16($sp)
sw $t3 20($sp)          
subi $t2 $t2 1      # i--: we could write "addi t2 t2 -1" too
j FIBOLOOP

EXIT_LOOP:
add $sp $sp 24      #RESTORE t3---------2
lw $t3 0($sp)
lw $t3 4($sp)
lw $t3 8($sp)
lw $t3 12($sp)
lw $t3 16($sp)
lw $t3 20($sp)
addi $t4 $t3 0
move $v0 $t4
jr $ra