BIT Befehl
Moderator: Rockford
- Dr. Irata
- Beiträge: 1265
- Registriert: 24.08.2021 14:40
- Has thanked: 182 times
- Been thanked: 417 times
- Kontaktdaten:
BIT Befehl
der BIT Befehl ist irgendwie mystisch… wozu genau braucht man den eigentlich? Also welche zwingend praktischen Anwendung gibt es, wo man BIT einsetzen muss??
-
- Beiträge: 190
- Registriert: 17.08.2021 11:03
- Wohnort: Salzburg, Austria
- Has thanked: 20 times
- Been thanked: 96 times
- Kontaktdaten:
Re: BIT Befehl
BIT ist sehr praktisch wenn man nur checken möchte ob bit 7 oder 6 einen gewissen Wert haben oder ob das AND Ergebnis mit dem Wert im Akkumulator 0 ist oder nicht - ohne den Wert im Akkumulator zu ändern.
Es ist quasi ein AND Befehl mit Zusatzfunktion (N und V werden auf Bit 7/6 des operands gesetzt) ohne den Nachteil dass der Akkumulator dadurch verändert wird.
Ich hab den Befehl oft verwendet um zB bit 7/6 eines Hardware-Registers zu checken.
Auch sehr praktisch: BIT ZP-Adresse bzw BIT 16bit-Adresse kann man verwenden um fast ohne Nebenwirkungen (bis auf die Flags) 1 oder 2 bytes Code zu überspringen ohne ein BEQ/BNE/JMP zu brauchen (spart Speicherplatz).
zB:
Wenn die Routine normal durchläuft macht sie "LDA #0", "BIT $01A9", "RTS" - bei einem Fehler aber "LDA #1", "RTS" - somit kriegt man einfach konsistente Fehlercodes als Returnwert in A.
Das kann man natürlich auch weiter kaskadieren, siehe zB meinen Highspeed SIO code https://github.com/HiassofT/highspeed-s ... rc#L80-L93
so long,
Hias
Es ist quasi ein AND Befehl mit Zusatzfunktion (N und V werden auf Bit 7/6 des operands gesetzt) ohne den Nachteil dass der Akkumulator dadurch verändert wird.
Ich hab den Befehl oft verwendet um zB bit 7/6 eines Hardware-Registers zu checken.
Auch sehr praktisch: BIT ZP-Adresse bzw BIT 16bit-Adresse kann man verwenden um fast ohne Nebenwirkungen (bis auf die Flags) 1 oder 2 bytes Code zu überspringen ohne ein BEQ/BNE/JMP zu brauchen (spart Speicherplatz).
zB:
Code: Alles auswählen
... irgendeine Routine die bei fehler JMP/BEQ/BNE ERROR macht
LDA #0
.BYTE $2C
ERROR:
LDA #1
RTS
Das kann man natürlich auch weiter kaskadieren, siehe zB meinen Highspeed SIO code https://github.com/HiassofT/highspeed-s ... rc#L80-L93
so long,
Hias
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast