Sie sorgt dafür, wie Du richtig erkannt hast, dass eine 0 addiert und das Carry übernommen wird.
Doch, R31 muss sich ändern, da der Fontblock nicht aligned ist, siehst Du wenn Du Dir den Pointer ausgeben lässt, bei mir startete der bei 0x26.r31 verändert sich doch nicht, welche Rolle spielt das Carry?
Wenn Du dem Compiler klarmachen kannst, dass er für den Font auf ein Alignement auf einen 256 Byte Block macht, dann sparst Du Dir den ADC, 1 Takt, mehr aber nicht, da das MOVW gleichviel wie ein MOV braucht.
Und sollte Dir der Code nicht zu hässlich werden und wenn Du genügend Flash über hast, dann kannst Du diese innere Schleife entrollen und einfach 40 mal wiederholen, das spart Dir dann mehr, nämlich 2 Takte pro Durchlauf.
Lesezeichen