NOP

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Mnemonic: NOP
Opcode: $EA
Anzahl der Bytes: 1
Befehlsgruppe: Spezialbefehl
Adressierung: implizit
Beeinflusste Flags im Statusregister:
keine
Taktzyklen: 2


Der Assembler-Befehl NOP hat, bis auf zwei verbrauchte Taktzyklen, keine Funktion. Er verändert weder Register noch Speicherzellen.
Der Befehl wird für Timing-Zwecke und als Platzhalter im Code verwendet.

Funktionsprinzip

Ass befehl ea.gif

Bedeutung der Buchstaben im Befehl

NOP No OPeration
keine Funktion

Beispiel

; Dieses Programm erzeugt schräge schwarz-weiß-Balken, die sich am Bildschirm bewegen.
; Programmstart mit SYS 49152

*=$c000   ; Startadresse des Programms

           sei              ; Interrupts sperren
           lda $d020        ; VIC-Register für Rahmenfarbe
           pha              ; Rahmenfarbe am Stapel sichern

           lda #$0b         ; VIC-Steuerregister, Bit 4 gelöscht: Bildschirm aus
           sta $d011        ; (Achtung, verstellt ggf. Rasterzeilen-Interrupts)

init       ldx #$00         ; Rahmenfarbe schwarz
loop       stx $d020

           lda $dc01        ; CIA 1 Datenport B (Tastatur-Matrix)
           cmp #$ff         ; Warte auf Tastendruck
           bne taste

           inx              ; Rahmenfarbe weiß
           nop              ; 2 Taktzyklen verbrauchen
           nop              ; 2 Taktzyklen verbrauchen
           nop              ; 2 Taktzyklen verbrauchen
           nop              ; 2 Taktzyklen verbrauchen
           nop              ; 2 Taktzyklen verbrauchen
           cpx #$02         ; prüfe, ob Rahmenfarbe rot
           bne loop         ;   nein -> loop
           jmp init         ;   ja   -> init

taste      lda #$1b         ; VIC-Steuerregister, Bit 4 gesetzt: Bildschirm an
           sta $d011

           pla              ; Rahmenfarbe holen ...
           sta $d020        ; ... und wiederherstellen
           cli              ; Interrupts freigeben 
           rts              ; Rücksprung

Speicherauszug:

.c:c000  78          sei
.c:c001  ad 20 d0    lda $d020
.c:c004  48          pha
.c:c005  a9 0b       lda #$0b
.c:c007  8d 11 d0    sta $d011
.c:c00a  a2 00       ldx #$00
.c:c00c  8e 20 d0    stx $d020
.c:c00f  ad 01 dc    lda $dc01
.c:c012  c9 ff       cmp #$ff
.c:c014  d0 0d       bne $c023
.c:c016  e8          inx
.c:c017  ea          nop
.c:c018  ea          nop
.c:c019  ea          nop
.c:c01a  ea          nop
.c:c01b  ea          nop
.c:c01c  e0 02       cpx #$02
.c:c01e  d0 ec       bne $c00c
.c:c020  4c 0a c0    jmp $c00a
.c:c023  a9 1b       lda #$1b
.c:c025  8d 11 d0    sta $d011
.c:c028  68          pla
.c:c029  8d 20 d0    sta $d020
.c:c02c  58          cli
.c:c02d  60          rts

Beispielprogramme