Вы можете использовать директивы .set
, .rept
/ .endr
и .set
для достижения желаемого.
Пример:
.set var, 0
.rept 5
LDR R4, [R7, #var*4]
EOR R4, R4, R5, LSL #16
STR R4, [R0, #var*4]
.set var,var+1
.endr
Результат какследует:
$ gcc test.s -o test.o -c
$ objdump -d test.o
test.o: file format elf32-littlearm
Disassembly of section .text:
00000000 <.text>:
0: e5974000 ldr r4, [r7]
4: e0244805 eor r4, r4, r5, lsl #16
8: e5804000 str r4, [r0]
c: e5974004 ldr r4, [r7, #4]
10: e0244805 eor r4, r4, r5, lsl #16
14: e5804004 str r4, [r0, #4]
18: e5974008 ldr r4, [r7, #8]
1c: e0244805 eor r4, r4, r5, lsl #16
20: e5804008 str r4, [r0, #8]
24: e597400c ldr r4, [r7, #12]
28: e0244805 eor r4, r4, r5, lsl #16
2c: e580400c str r4, [r0, #12]
30: e5974010 ldr r4, [r7, #16]
34: e0244805 eor r4, r4, r5, lsl #16
38: e5804010 str r4, [r0, #16]
См. также: Полезные директивы ассемблера и макросы для ассемблера GNU .