我如何在汇编器中从 4 开始倒计时并停在 0

how do i count down from 4 and stop at 0 in assembler

如何在汇编程序中从 4 开始倒计时并停在 0。到目前为止我已经试过了。我希望在 3210 之后显示文本。但是它会打印 3333333333333。 我试图在减法后使用 STR 存储新结果,然后再次使用新数字减去 1。但是好像一直在用4

        B main

    verses  DEFW    4
    temp    DEFW    0
    text    DEFB    " men went to mow a meadow ",0

        ALIGN

main    ADR R0,verses
        SWI 4

        ADR R0,text
        SWI 3



loop    ADR R0,verses
        SUB R0,R0,#1
        STR R0,verses
        SWI 4

        B loop



        SWI 2

这是错误的:

ADR R0,verses

SWI 4 期望 打印在 R0 中,而不是 值的 地址。因此,您应该改用 LDR R0,verses 之类的东西。当你做 ADR R0,verses 时得到 4 的原因是因为 verses 恰好位于地址 4。但是通过使用 ADR 你将得到 4 无论你存储什么 verses.

此外,您的 loop 是无限的,因为您没有添加任何退出循环的代码。它应该看起来像这样:

LDR R0, verses
loop    SUBS R0,R0,#1
        BMI done
        SWI 4
        B loop
done

注意:我不知道 SWI 是否保留了 R0 的值。如果他们不这样做,您将不得不自己处理,例如通过在堆栈上保存 R0