C 在mips中使用“";推;没有「;“流行音乐”;

C 在mips中使用“";推;没有「;“流行音乐”;,c,assembly,mips,C,Assembly,Mips,c代码: int recursive_power (int base, int power) { if (power <=0) return (-1); else if (power ==1) return (base); else return (base*recursive_power (base, power-1)); } int递归幂(int-base,int-power) { 如果(power您将

c代码:

int recursive_power (int base, int power) 
{
    if (power <=0)
        return (-1);
    else    if (power ==1)
        return (base);
    else
        return (base*recursive_power (base, power-1)); } 
int递归幂(int-base,int-power)
{

如果(power您将pop放置在错误的位置。您每次进入函数时都会将两个寄存器推到堆栈上,因此每次从函数返回时都应该将它们弹出:

    jal recursive_power #call recursive_power (base,power-1)
    mul $v0, $a0, $v0   #return value is $v0*base
    j return2

return1:    addi $v0,$a0, 0 #$v0=base
return2:
    lw $ra, 0($sp)  #Restore original return address
    lw $a1, 4($sp)  #Restore original value of power
    addi $sp, $sp, 8    #Restore stack
    jr $ra      #Return to caller address

您将pop放置在错误的位置。每次进入函数时,您都会将两个寄存器推到堆栈上,因此每次从函数返回时都应该将它们弹出:

    jal recursive_power #call recursive_power (base,power-1)
    mul $v0, $a0, $v0   #return value is $v0*base
    j return2

return1:    addi $v0,$a0, 0 #$v0=base
return2:
    lw $ra, 0($sp)  #Restore original return address
    lw $a1, 4($sp)  #Restore original value of power
    addi $sp, $sp, 8    #Restore stack
    jr $ra      #Return to caller address