私は現在、このコードを持っています:
// takes a table reference as an argument
.macro load_table_into_r0_to_r8
ldi ZL, low(2*@0)
ldi ZH, high(2*@0)
lpm r25, Z+
mov r0, r25
lpm r25, Z+
mov r1, r25
lpm r25, Z+
mov r2, r25
lpm r25, Z+
mov r3, r25
lpm r25, Z+
mov r4, r25
lpm r25, Z+
mov r5, r25
lpm r25, Z+
mov r6, r25
lpm r25, Z+
mov r7, r25
lpm r25, Z+
mov r8, r25
.endm
ご覧のとおり、本当によく似たコードがたくさん繰り返されています。
.irp
これを withや Maybe .if
s のように短く書く方法がないとばかげています。しかし、私はそれを機能させることができません。私は.irp
これを試しました:
.irp i, 0,1,2,3,4,5,6,7,8
lpm r25, Z+
mov r\i, r25
.endr
Atmel Studio は強調表示しますが.irp
(a で始まるすべてを強調表示するわけ.
ではありません)、動作しません:Invalid directive: '.irp'
私の他の関連する質問も参照してください: MOV into a register specified by macro argument。