我如何从4开始倒数并在汇编程序中停在0

时间:2015-10-28 16:11:08

标签: assembly arm

如何从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

enter image description here

1 个答案:

答案 0 :(得分:2)

这是错误的:

ADR R0,verses

SWI 4期望R0中打印,而不是地址。因此,您应该使用类似LDR R0,verses的内容。你执行ADR R0,verses时获得4的原因是因为verses恰好位于地址4处。但是使用ADR你将得到4 at < / em> verses

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

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

注意:我不知道SWI是否保留R0的值。如果他们不这样做,你将不得不自己照顾,例如将R0保存在堆栈上。