【问题标题】:ARM Assembly loop using PC?使用 PC 的 ARM 汇编循环?
【发布时间】:2016-02-13 22:32:09
【问题描述】:

我目前正在学习手臂组装,我有一些问题。在阅读文档时,我发现寄存器 nº 15 是存储下一条指令地址的程序计数器,当一条指令完成时,它会增加 4(字节,或拇指模式下的 2)。

所以,我的问题是,如果我运行一条指令,将 PC 本身更改少于 4 个字节,它会返回到之前的指令,不是吗?然后来来回回,这样就成了无限循环?

谢谢,如果这是一个明显的问题,我们很抱歉。 问候, 佩德罗。

【问题讨论】:

  • 是的,你可以编写一个无限循环。你可以在调试器中尝试这种东西。

标签: loops assembly arm


【解决方案1】:

您必须逐条查看指令,因为有些对 PC 的修改是不可预测的,但对于那些合法修改程序计数器的情况,基本上会导致跳转到您保存在程序计数器中的地址。您不必担心前面的两条指令(它是 8 和 4 字节而不是 4 和 2,两条指令前面)。

【讨论】:

    【解决方案2】:

    是的 - 跳转/分支指令正是您所描述的 - 它是修改 PC 的指令。如果你安排跳转的结果将程序计数器放回原来的位置,是的,你会当场循环。

    【讨论】:

      【解决方案3】:

      请注意,这实际上并不是下一条指令的地址,而是当前指令的地址 +4(在 Thumb 模式下)或 +8(在 ARM 模式下)。所以在 ARM 中这是 2 条指令,但在 Thumb 中可能不是(因为指令可以是 16 位或 32 位)

      【讨论】:

        猜你喜欢
        • 2012-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-26
        • 1970-01-01
        相关资源
        最近更新 更多