BIT $ll
Mnemonic: | BIT $ll |
Opcode: | $24 |
Operand(en): | $ll |
Anzahl der Bytes: | 2 |
Befehlsgruppe: | Arithmetik- und Logikbefehl |
Adressierung: | Zeropage |
Beeinflusste Flags im Statusregister: | |
Negative-Flag | |
Overflow-Flag | |
Zero-Flag | |
Taktzyklen: | 3 |
Der Assembler-Befehl BIT $ll macht eine bitweise UND-Verknüpfung des Akkumulators mit dem Inhalt der Zeropage-Adresse $ll und setzt die Flaggen (Zero-Flag, Negative-Flag und Overflow-Flag) entsprechend.
Das Ergebnis wird nicht wie bei dem Befehl AND $ll in den Akkumulator geschrieben.
Dieser Befehl ideal zum Abfragen einzelner Bits (siehe Beispiel 1 von BIT $hhll) und im Vergleich zu einer Kombination aus LDA $ll und AND #$nn hinsichtlich Speicherbedarf und Ausführungszeit effizienter, wenn auf das Eintreten eines Ereignisses in einer Warteschleife gewartet wird.
Eine weitere trickreiche Einsatzmöglichkeit des BIT-Befehls ist das Überspringen von Befehlen, indem ein Byte lange Befehle als Parameter versteckt werden und dabei gewährleistet ist, dass dabei der BIT-Befehl sich neutral verhält, also sonst keine Register (abgesehen vom Statusregister) verändert, wie im Beispiel 2 von BIT $hhll gezeigt wird.
Der BIT-Befehl besteht aus 2 Teilen:
- Zunächst werden die Bits 7 und 6 der Zeropage-Adresse $ll ins Negative-Flag und das Overflow-Flag übertragen,
- dann wird eine bitweise UND-Verknüpfung zwischen dem Akkumulator und dem Inhalt der Speicherzelle $ll in der Zeropage durchgeführt, wodurch nun das Zero-Flag beeinflusst wird, also gesetzt ist, wenn es das Ergebnis 0 ergab.
Es ist somit möglich, dass sich nach der Ausführung des Befehls alle drei genannten Flaggen verändert haben und sogar alle drei gesetzt sind. Im Gegensatz dazu kann beim Assemblerbefehl AND $ll das Negative-Flag und das Zero-Flag niemals gleichzeitig gesetzt sein, da ein negatives Ergebnis nicht gleichzeitig 0 sein kann.
Funktionsprinzip
Bedeutung der Buchstaben im Befehl
BIT | BIT test |
Teste Bits |
Beispiel
Vergleiche Beispiele von BIT $hhll.