將內存 0x400800 起始的 100 個 32 位字相加,結果高 32 位存 R3,低 32 位存 R2。
LDR 讀取內存,支持自增寻址ADDS 加法並更新狀態位 (C 標誌)ADCCS 帶進位條件加法,處理高 32 位累加SUBS 計數器遞減並更新 Z 標誌BNE 條件跳轉實現循環AREA code, CODE, READONLY
ENTRY
CODE32
START
MOV R0, #0x0
MOV R4, #count
LDR R1, =start
LOOP
LDR R0, [R1, #step]! @ 讀取並自增 R1
ADDS R2, R0, R2 @ 低32位累加,更新C標誌
ADCCS R3, R3, #0x0 @ 進位時高32位累加1
SUBS R4, #0x1 @ 計數器-1,更新Z標誌
BNE LOOP @ Z=0繼續循環
AREA data, DATA, READONLY
start EQU 0x400800
step EQU 0x10
count EQU 100
END
大量使用條件執行 (CS, NE 等) 避免分支指令,代碼緊湊高效。展示了 ARM 條件碼與狀態寄存器配合的精妙。