【问题标题】:What does bx lr do in ARM assembly language?bx lr 在 ARM 汇编语言中做了什么?
【发布时间】:2015-01-20 23:39:39
【问题描述】:

我似乎无法理解 bx lr 的作用以及它与 bl(标签)有何不同。我知道 bl (label) 将该函数的返回地址存储在链接寄存器中,但我不知道 bx lr 做了什么。

【问题讨论】:

    标签: assembly arm


    【解决方案1】:

    bx 代表branch and exchange instruction set,这意味着根据要跳转到的地址的 lsb(最低有效位),处理器会将下一条指令视为 ARM 或拇指。

    由于lr通常持有返回地址,说明这是一个函数的返回,如果lr的lsb为1,则将该地址处的代码视为thumb,否则,它将将其视为 ARM。

    【讨论】:

    • 你能不能简化一下这个解释,我对 ARM 架构的了解并不高。
    • @user2177940 第 1 部分:模式切换。 ARMv7 CPU 以两种模式之一运行(称为 ARM 或 Thumb),它们在指令编码方面有所不同(主要是“完整”但大型 4 字节指令与“受限”但小型 2 字节指令)。 在与bx/blx 通话时根据要跳转到的地址是偶数还是奇数来确定接下来要切换到哪种模式(这会导致分别切换到ARM 或Thumb 模式)。跨度>
    • @user2177940 第 2 部分:呼叫和呼叫返回。在 ARMv7 上,bl nameOfFunction 指令通常用于调用子例程。 bl 指令将下一条指令的地址和当前模式保存到链接寄存器(lr)中,然后跳转到请求的子程序。自然,当那个子程序要返回时,它通过跳转到lr中的地址就知道要返回到哪里,而且由于lr还保存了调用函数的模式,所以也可以恢复。完成这项工作的指令是bx
    • @IwillnotexistIdonotexist - 我认为如果你把你的 cmets 作为答案会更好。
    • 我可以自己回答我的评论:“请注意,最低位实际上从未用作地址的一部分,因为所有指令都是 4 字节对齐(如 Arm)或 2 字节对齐(如拇指)。” (community.arm.com/processors/b/blog/posts/…)
    猜你喜欢
    • 2014-03-28
    • 2016-04-02
    • 2022-12-09
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 2013-12-28
    相关资源
    最近更新 更多