これは、私が取り組んでいる C プロジェクトから逆アセンブルされた AVR コードのスニペットです。この奇妙なコードが生成されていることに気付きましたが、それがどのように機能するのか理解できません。私はそれがある種のばかげた最適化であると仮定しています...
説明は何ですか?
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
具体的には、2 番目の命令が R25 から 0xFF だけではなく 0xFF を減算するのはなぜINC R25
ですか?