在装配中添加延迟

时间:2015-04-08 05:28:48

标签: assembly

我正在尝试使计算机计数到某个较高的数字,以便为程序的其他部分创建延迟。但是,出于某种原因,我无法将计数值设置为非常高,它会给我一个“表达式超出范围”错误。

代码:

delay:       

        CMP     R5, #0x0009 ;THIS is the value that needs to be high
        BEQ     loop
        ADD     R5, R5, #1

        B       delay

如何将计数限制设置为999999(十进制)?

谢谢!

3 个答案:

答案 0 :(得分:1)

将值加载到寄存器中,然后与该寄存器进行比较:

    MOV R4, #999999 ; assuming ARM syntax and support for the MOV pseudo-op

delay:

    CMP R5, R4
    BEQ loop
    ADD R5, R5, #1
    B delay

答案 1 :(得分:0)

ARM支持8位模式,可以在第二个操作数中以偶数位数< 32作为立即值旋转。最好首先在其他寄存器中加载该值然后进行比较。参考链接以获得解释: link1link2

试试这段代码:

    LDR R6,=999999
delay:       

    CMP     R5, R6 
    BEQ     loop
    ADD     R5, R5, #1

    B       delay

答案 2 :(得分:-1)

替换

ADD     R5, R5, #1

通过

ADDS     R5, R5, #1