2015-04-08 70 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