Hallo Besucher, der Thread wurde 966 mal aufgerufen und enthält 3 Antworten

letzter Beitrag von DMHas am

BMI & BPL prüfen Bit 7 automatisch

  • Hallo zusammen,


    da ich meine Routine zur CIA-Uhrzeitausgabe fertig habe (und endlich läuft, wie ich es mir vorstelle), bin auf Verhalten gestoßen, welches nur in der Magic Disk CIA Kurs gestoßen bin. "Alles über Maschinensprache" bzw die C64-Wiki erwähnen das Verhalten nicht. Die beiden Befehle BMI & BPL prüfen auf ein gesetzes 7 Bit einer Speicherstelle und springen entsprechend - bis jetzt wußte ich nur, dass der BIT-Befehl das 7. Bit "prüfbar macht". In meinem Beispiel wird bei gesetzten 7. Bit zu .am gesprungen.


    Hat jemand eine Erkärung hierfür oder habe ich einen Denkfehler?



    Code
    1. ;Stunden anzeigen
    2. lda $DD0B ;Stundenbyte laden (Uhr wird gleichzeitig angehalten / läuft intern weiter)
    3. bpl .am ;N-Flag nicht gesetzt springe nach .am (24H-Flag gesetzt PM / ansonsten AM)
    4. and #%00011111 ;Bit 4-7 ausblenden
  • Die beiden Befehle BMI & BPL prüfen gesetzen 7 Bit einer Speicherstelle und springen entsprechend

    Nicht BMI und BPL prüfen die Speicherstelle, sondern der vorausgegangene LDA-Befehl setzt/löscht das N-Bit wie auch LDX, LDY und die mathematischen/logischen Befehle ADC, AND usw.


    vgl. Beschreibung des LDA-Befehls unter "Beeinflusste Flags im Statusregister: Negativ-Flag"

  • Das ist absolut nichts ungewöhnliches. Insofern das N-Flag von einem Befehl beeinflußt werden kann, wird das immer von Bit 7 des Ergebnisses gemacht.


    Allerdings prüfen in deinem Beispiel nicht BPL oder BMI die Speicherzelle, das macht der LDA-Befehl und setzt das N-Flag beim Transfer "Speicher" -> "Akku" entsprechend Bit 7.


    Edit: M.J. war schneller. ^^

  • Danke für die Erklärung! Das habe ich so nicht heraus gelesen aus der Wiki. Jetzt ist mir einiges klarer.


    Update: Hier (C64-Wiki - Statusregister) wird es sehr schön erklärt. Hätte ich eher mal nachlesen sollen. :haue: