BNE $hhll

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Mnemonic: BNE $hhll
Opcode: $D0
Operand(en): $nn
Anzahl der Bytes: 2
Befehlsgruppe: Sprungbefehl
Adressierung: relativ
Beeinflusste Flags im Statusregister:
keine
Taktzyklen: 2
1 Extratakt bei Sprung
1 Extratakt bei Überschreitung einer Page-Grenze


Der Assembler-Befehl BNE $hhll verzweigt zur Adresse $hhll (als neuer Wert des Programmzählers PC), wenn das Ergebnis der letzten Operation ungleich $00 ist, was mit Zero-Flag = 0 angezeigt wird.
Es ist bei der relativen Adressierung darauf zu achten, dass sich das Sprungziel innerhalb des gültigen Adressbereiches befindet!

Funktionsprinzip

Ass befehl d0.gif

Bedeutung der Buchstaben im Befehl

BNE Branch on Not Equal
Verzweige bei Ungleichheit (<>0)

Beispiel

; Dieses Programm wartet bis die Taste "S" gedrückt wurde.
; Programmstart mit SYS 49152

*=$c000                  ; Startadresse des Programms

PRA  =  $dc00            ; CIA#1 (Port Register A)
DDRA =  $dc02            ; CIA#1 (Data Direction Register A)

PRB  =  $dc01            ; CIA#1 (Port Register B)
DDRB =  $dc03            ; CIA#1 (Data Direction Register B)


start    sei             ; Interrupts sperren

         lda #%11111111  ; CIA#1 Port A = Ausgänge 
         sta DDRA             

         lda #%00000000  ; CIA#1 Port B = Eingänge
         sta DDRB             

         lda #%11111101  ; Spalte 1 (COL1) der Matrix testen
         sta PRA
            
loop     lda PRB
         and #%00100000  ; Reihe 5 (ROW5) maskieren
         bne loop        ; Warte bis "S" gedrückt

         cli             ; Interrupts zulassen

ende     rts             ; Zurück zu BASIC

Speicherauszug:

.c000  78         sei
.c001  a9 ff      lda #$ff
.c003  8d 02 dc   sta $dc02
.c006  a9 00      lda #$00
.c008  8d 03 dc   sta $dc03
.c00b  a9 fd      lda #$fd
.c00d  8d 00 dc   sta $dc00
.c010  ad 01 dc   lda $dc01
.c013  29 20      and #$20
.c015  d0 f9      bne $c010
.c017  58         cli
.c018  60         rts

Vergleichbare BASIC-Anweisung

Für BASIC V2:

10 IF ER <> 0 GOTO 50  : REM Wenn Ergebnis ungleich 0, springe nach 50

Beispielprogramme