首页 > 解决方案 > 如何在 ARM 汇编中使用 push{lr} pop{pc}

问题描述

我已经尝试了几天并且在网上到处寻找但没有得到解决方案所以我会在这里尝试问:我有这个简化的代码作为示例 - 它应该在没有操作系统的情况下闪烁覆盆子上的 LED (独立)。到目前为止,LED 会亮起并且永远不会再次熄灭。延迟循环不是问题,因为它在代替“bl delayloop”时起作用,问题在于推送弹出。为了让我将其翻译成更复杂的项目,需要使用这些,bx lr 不是一个选项。非常感谢任何帮助!


_run_morse:

_short_blink:
    
    str r1,[r0,#GPSET0]

    mov r10,#0

    bl delayloop
    
    str r1,[r0,#GPCLR0]
    
    mov r10,#0

    bl delayloop

b _run_morse

delayloop:

    push {lr}

    delayloop2:

    add r10,r10,#4

    cmp r10,r2

    bne delayloop2

    pop {pc}

标签: assemblyarm

解决方案


您似乎没有将堆栈指针 ( sp/ r13) 设置为指向合适内存的指针,并且该程序未在为您初始化它的操作系统下运行。

您应该设置sp为指向您希望用作堆栈的内存区域的正上方。


推荐阅读