【问题标题】:Why this code run into infinite loop in ARM为什么这段代码在 ARM 中会陷入无限循环
【发布时间】:2014-03-21 07:34:34
【问题描述】:

我正在学习 ARM 汇编并编译了一个代码,它只是运行了一个循环 5 次,但运行时它进入了无限循环

.global main
main:
push {ip.lr}
sub r1,r1,r1
well:
ldr r0,=message
bl printf
add r1,r1,#1
cmp r1,#6
bne well
pop {ip,pc}
message:
       .ascii "Amit Singh Tomar\n"

为什么这段代码会陷入无限循环?

【问题讨论】:

  • 学习曲线有一个点,你应该在提问之前多学习。
  • @auselen: +1 - StackOverflow 不应替代脑力消耗。
  • 好的@auselen,但我在问之前尝试了不同的东西,有点沮丧。所以把我的问题放在这里。我会照顾你的cmets。
  • @AmitSinghTomar 确保这不是侮辱。有时要了解更多,您需要推动自己。无需询问即可学习是一项很棒的技能,它对专业也有帮助。
  • 好的@auselen,我确实采纳了你的建议并继续努力。

标签: linux assembly arm


【解决方案1】:

printf 调用会破坏您的r1。将循环不变量保存在非临时寄存器中。

【讨论】:

    【解决方案2】:

    R1 被 printf 调用破坏了 - 改用非易失性寄存器或在 printf 调用周围保存/恢复 R1。

    【讨论】:

    • 感谢 Paul R,将 r1 替换为 r5 有效。我猜 printf 调用会破坏 (r0-r4)。
    • @AmitSinghTomar r0-r3, r4 不包括在内。
    猜你喜欢
    • 2022-08-19
    • 1970-01-01
    • 2019-12-23
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-13
    • 2021-09-18
    相关资源
    最近更新 更多