我如何在汇编器中从 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
。
如何在汇编程序中从 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
。