2015-04-08 69 views
0

我正在尝试使计算机数到某个较高的数字,以便为该程序的其他部分创建延迟。但是,由于某些原因,我无法将计数值设置得太高,这给我带来了“表达式超出范围”的错误。在程序集中添加延迟

代码:

delay:  

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

     B  delay 

如何设置数量限制,比方说,999999(DEC)?

谢谢!

回答

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 
+0

谢谢!它的工作,虽然为什么我不能直接将值设置到注册表?将相同的值加载到内存或寄存器中有什么区别? – Kurt

+0

这里没有涉及到的内存(除了指令内存)... – nneonneo

-1

通过

ADDS  R5, R5, #1 
+1

OP使用'CMP',所以问题与'ADD'没有更新状态寄存器无关。问题是关于如何将寄存器与大常量进行比较。 – Michael

0

ARM替换

ADD  R5, R5, #1 

支持可以通过连旋转8位图案位数< 32作为第二个操作数的立即数。首先在其他寄存器中加载该值,然后进行比较。请参阅链接的解释: link1link2

试试这个代码:

LDR R6,=999999 
delay:  

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

    B  delay 
+0

这也适用,谢谢! – Kurt