Hallo @monkye
Leider ist es in der Wirklichkeit nicht immer so trivial.
Zum Einen kann man den ADIW nur mit den geraden Registern ab r24 aufwärts machen,
zum Anderen ist die Instruktion nicht bei jedem Controller vorhanden.
Deswegen macht man für Inkrementierung
SUBI r,$FF
SBIC r+1,$FF
Dann muss der Wert noch in das Register geladen und nach dem Incrementieren wieder gespeichert werden. Sind schon 6 Anweisungen.
In Post #9 findest du das Disassembling, was der Compiler aus Incr wordVariable macht (kein CLI, SEI, SAFE wird ignoriert).
In Post #11 das Disassembler-Listing was der Compiler aus wordVariable = wordVariable + 1 macht (CLI, SEI wird verwendet wie mit Attribut SAFE beabsichtigt).
Leider ist es in der Wirklichkeit nicht immer so trivial.
Zum Einen kann man den ADIW nur mit den geraden Registern ab r24 aufwärts machen,
zum Anderen ist die Instruktion nicht bei jedem Controller vorhanden.
Deswegen macht man für Inkrementierung
SUBI r,$FF
SBIC r+1,$FF
Dann muss der Wert noch in das Register geladen und nach dem Incrementieren wieder gespeichert werden. Sind schon 6 Anweisungen.
In Post #9 findest du das Disassembling, was der Compiler aus Incr wordVariable macht (kein CLI, SEI, SAFE wird ignoriert).
In Post #11 das Disassembler-Listing was der Compiler aus wordVariable = wordVariable + 1 macht (CLI, SEI wird verwendet wie mit Attribut SAFE beabsichtigt).