assembly For循环中MIPS pow(x,y)函数的问题

67up9zun  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(62)

我一直在编写一个MIPS程序,使用泰勒级数实现sin(x)函数。要做到这一点,我必须创建factorial(x!)和power(x^y),它们自己工作得很好(在For循环之外),但在循环中示例化它们的那一刻,有些东西失败了,无论是什么都不打印还是无限打印结果。我试过各种方法让它工作,但似乎没有什么工作。该循环在求和和减法时工作正常,求和工作正常,但每当在其中调用幂函数时就会失败。下面是我的代码:

.text
main:
    jal loop
    
    addi $v0, $0, 10
    syscall

loop:
    
    addi $t0, $0, 0   # i = 0
    addi $t1, $0, 8   # n = 8
    add $t2, $0, 0   # sum = 0

for:
    beq $t0, $t1, endFor

    addi $a1, $0, 2   # x = 2
    addi $a2, $0, 3   # y = 3
    jal power
    add $t2, $t2, $v0 # sum += power(2**3)

    addi $t0, $t0, 1

    j for

endFor:
    addi $v0, $0, 1
    addi $a0, $t2, 0
    syscall

    addi $v0, $0, 10
    syscall

power:

    addi $t0, $0, 1   # result = 1
    add $t1, $a1, $0  # x
    add $t2, $a2, $0  # y

while:
    beq $t2, $0, endWhile

    mul $t0, $t0, $t1
    addi $t2, $t2, -1

    j while

endWhile:
    add $v0, $t0, $0
    jr $ra

字符串

感谢您的回复,毫无疑问,他们将是真实的的帮助!!

qlckcl4x

qlckcl4x1#

您熟悉函数的堆栈框架吗?为了维护变量的局部性和从被调用方返回到调用方的地址,必须有。
您可以查看下面的帖子,查看堆栈指针$sp和函数堆栈帧的使用示例。
MIPS: relevant use for a stack pointer ($sp) and the stack

相关问题