Das ganze "wird ausgeführt ja/nein" ist mit Sicherheit nur Simulator/Debugger-Verwirrung, die daher rührt, dass bei eingeschalteter Optimierung keine eindeutige Zuordnung von C und ASM Code mehr möglich ist.
Dass der Code nicht macht was du willst, liegt an zwei vergessenen volatiles.
Lesezeichen