您好,我对编写汇编非常陌生,并且对我尝试编写递归函数来计算 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 的第三个循环时,lr 我收到一条错误消息:“PC 超出有效内存范围”,但我不确定为什么会这样。任何指向正确方向的指针都将不胜感激,因为我是一个绝对的初学者,无法理解为什么会发生这个错误。感谢您的时间!