Следующий код:
.EQU MEM = 0x0200
...
STS MEM, R16
INC MEM
... фактически означает:
STS 0x200, R16
INC 0x200
... и, конечно, вы не можете увеличить константу 0x200.Константа 0x200 всегда будет 0x200;оно никогда не будет 0x201.
Инструкция STS
позволяет сохранять данные только по постоянному постоянному адресу .
Однако инструкция ST
позволяет вамуказать адрес в регистрах пар X
(R27: R26), Y
(R29: R28) или Z
(R31: R30).
В случае X
you может , а в случае Y
и Z
вы должны увеличить адрес после операции или уменьшить его перед операцией.(И приращение - это именно то, что вам нужно.)
Пример:
ST Y+, R16
Если R29 = 2 и R28 = 0x34 перед инструкцией, эта инструкция сохранит R16 в 0x234, а R28 будет0x35 после инструкции.
Так что следующая программа должна работать (к сожалению, я не знаком с AVR, поэтому я не уверен):
LDI R29, 2 # High byte of "MEM"
LDI R28, 0 # Low byte of "MEM"
L1: INC R16
ST Y+, R16
DEC R17
BRNE L1