我一直在编写一个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
字符串
感谢您的回复,毫无疑问,他们将是真实的的帮助!!
1条答案
按热度按时间qlckcl4x1#
您熟悉函数的堆栈框架吗?为了维护变量的局部性和从被调用方返回到调用方的地址,必须有。
您可以查看下面的帖子,查看堆栈指针$sp和函数堆栈帧的使用示例。
MIPS: relevant use for a stack pointer ($sp) and the stack