您好,我对编写程序集非常陌生,并对我尝试编写递归函数以计算n的阶乘有疑问。
这是我尝试编写阶乘函数:
.global main
main:
MOV r1, #3
fact:
SUB sp, sp, #8
STR lr, [sp, #0]
STR r1, [sp,#4]
CMP r1, #1
BGT Else
ADD sp, sp, #8
MOV pc, lr
Else:
SUB r1, r1, #1
BL fact
MOV r2, r1
LDR r1, [sp, #4]
LDR lr, [sp, #0]
ADD sp, sp, #8
MUL r1, r2, r1
MOV pc, lr
MOV r0, #1
SWI 0x6b
SWI 0x11
问题在于:我成功地计算出3阶乘是6并且它在程序结束时存储在r1中;但是,我永远无法通过最后一个" MOV pc,lr"循环的第三次执行中的语句,我无法理解为什么背后的逻辑。
当我到达MOV pc的第三个循环时,我得到一个错误说明:" PC超出有效的内存范围"但我不确定为什么会这样。任何指向正确方向的人都会非常感激,因为我是一个绝对的初学者,无法理解为什么会发生这种错误。谢谢你的时间!