ARM程序集 - 因子递归程序计数器超出有效的内存范围

时间:2017-04-11 23:14:55

标签: recursion assembly arm factorial program-counter

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

0 个答案:

没有答案