【发布时间】:2023-03-10 22:21:01
【问题描述】:
代码是用于计算数字的阶乘的递归块。我在 PC 上遇到异常(文本中的地址错误)。我正在查看跟踪但不确定问题出在哪里,除了我的 PC 显示垃圾值这一事实。我在下面附上代码。
.data
prompt: .asciiz "Enter the n"
.text
main:
#User I/O
li $v0, 4
la $a0, prompt
syscall
li $v0, 5
syscall
add $a0, $v0, $zero
jal fact
j finish
fact:
addi $sp, $sp, -8 #adding two elements (reserve space), since stacks start from higher mem address
sw $ra, 0($sp)
sw $a0, 4($sp)
slti $t0, $a0, 1
beq $t0, $zero, loop
addi $sp, $sp, 8
addi $v0, $zero, 1
jr $ra
loop:
addi $a0, $a0, -1
jal fact #stores address of the lw instruction and goes to label-->fact
lw $a0, 0($sp)
lw $ra, 4($sp)
addi $sp, $sp, 8 #deleting 2 elements
mul $v0, $v0, $a0
jr $ra #until main ra, recursively go through fact(n)=fact(n-1)*n
finish:
使用的模拟器:QtSpim
感谢任何帮助。谢谢!我还附上了 PC 和寄存器值以防万一。 Register values at the time of the error
【问题讨论】:
-
当你用冒泡排序尝试删除了你的另一个问题时,当我试图写一个为了我自己的乐趣时,我把它贴在这里,对不起:pastebin.com/bHFPdgbr
-
对不起,想重写整个代码。感谢您的贡献,这里是 GitHub 存储库的链接,如果我发布了 MIPS 基础的代码,如果您喜欢它(PR),我可以在那里添加您的代码。链接:github.com/rahulkrishnan98/…
-
如果您认为值得,请随意将其包含在您的 git 中(我没有指定许可证,但是通过将其发布在 SO 上,它当然可以被视为 PD 或 copyleft 代码段(我应该在那个 pastebin 中提到这一点)。但尤其要尝试了解它的作用/方式,如果您对此有任何疑问,请随时在这里问我(使用@Ped7g 通知我)。GL。:)