Ceci est un extrait de code AVR démonté d'un projet C sur lequel je travaille. J'ai remarqué que ce curieux code était généré, et je ne peux pas comprendre comment cela fonctionne. Je suppose que c'est une sorte d'optimisation ridicule ...Pourquoi ce code est-il généré par avr-gcc et comment ça marche?
Quelle est l'explication?
92: ticks++; // unsigned char ticks;
+0000009F: 91900104 LDS R25,0x0104 Load direct from data space
+000000A1: 5F9F SUBI R25,0xFF Subtract immediate
+000000A2: 93900104 STS 0x0104,R25 Store direct to data space
95: if (ticks == 0) {
+000000A4: 2399 TST R25 Test for Zero or Minus
+000000A5: F009 BREQ PC+0x02 Branch if equal
+000000A6: C067 RJMP PC+0x0068 Relative jump
Plus précisément, pourquoi la deuxième Soustraire d'instruction de 0xFF R25 au lieu de simplement INC R25
?
Dans le cas où ce n'est pas évident, je fais référence à la deuxième ligne: Soustraire 0xFF de R25 ... pourquoi ne pas simplement "INC R25"? –
Quel est le type de données C? – Inshallah
char non signée (8 bits) –