Solltest etwas mehr C++ lernen, damit das Denken in Assembler in Vergessenheit gerät.
Es gibt z.B. einen Unterschied zwischen Pointer und Referenz
void mirrorbits(byte &zeichenbyte); // Der Parameter ist hier eine Referenz, kein Pointer.
Natürlich kann man in C als Hardware-unabhängiger Sprache nicht mit Registern und Carry-Bits arbeiten und Befehle wie "relativen Sprung 'brne PC-3' " machen natürlich keinen Sinn.
(Heisst das Register EAX oder R23 ?)
byte mirrorbits(byte x) {
byte b = 0;
byte set = 0x80;
while (x!=0){
b |= (x &1)? set:0;
x >>= 1;
set >>= 1;
}
return b;
}
Wenn du es für besser hältst, kannst du auch mit Zeiger oder Referenz arbeiten und das Ergebnis in die gleiche Speicherstelle zurückschreiben. Klarer geht das aber ausserhalb
Eine solche Klacks-Funktion sollte selbstverständlich ohne globale Variable auskommen.
Wenn du das Spiegeln im gleichen Byte machen willst, schreibst du einfach
save = mirrorbits(save);