MIPS汇编 - 子程序和函数查询

时间:2018-02-10 14:04:50

标签: assembly mips cpu-architecture

我对这种类型的“编程”相当新,所以在创建程序时遇到了一些问题。我正在尝试创建的程序接受两个整数,n和r。如果n等于r,OR r等于0,则输出值为1.否则,它将实现f(n-1,r)+ f(n-1,r-1)函数。

这是我的代码:

 .data 0x1001000C
 x: .word 4
 y: .word 2

 .text
 main: 
     sub $t3, $t3, $t3
     sub $t4, $t4, $t4
     lui $t0, 0x1001 
     lw $t1, 0($t0)      #this is your initial n 
     lw $t2, 4($t0)     #this is your initial r
     addi $a0, $t1, 0
     addi $a1, $t2, 0
     jal form_base 
     addi $t3, $v0, 0
     sw $t3, 0($t0)
     j main_exit

 main_exit:
     li $v0, 10
     syscall  

 form_base:                                   #this part checks the (n==r ||      r==0) OR otherwise 
    beq $a0,$a1, IF 
    bne $a1, $zero, form_recurse 
 IF:     
     addi $t4, $t4, 1
     addi $v0, $t4, 0  
     jr $ra

 form_recurse: 
     subu $sp, $sp, 20
     sw $ra, 4($sp)
     sw $a0, 8($sp)
     sw $a1, 12($sp)

     addi $a0, $a0, -1         #this is the n-1 part
     addi $a1, $a1, 0          #this is the r part 
     jal form_base
     sw $v0, 0($sp)

     addi $a0, $a0, -1        #this is the n-1 part
     addi $a1, $a1, -1        #this is the r-1 part 
     jal form_base

     lw $t0, 0($sp)
     add $v0,$t0,$v0         #final value of function 

     lw $ra, 4($sp)
     lw $a0, 8($sp)
     lw $a1, 12($sp)
     addu $sp, $sp, 20

         jr $ra 

GIVEN: n始终大于或等于r

问题:对于4和2,答案应该是6.但是,这个程序输出1代替,这意味着它在f(n-1,r)函数之后终止而没有进入f(n-1,r-1)函数等。

我该怎么做才能解决这个问题?有帮助吗?谢谢!

0 个答案:

没有答案