0

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

4

0 回答 0