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 innerhal b 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