PIC-Assembler - Spezielle Befehle

einige spezielle Schreibweisen/Befehle erleichtern die Arbeit mit Assembler

zurück zu PIC-Prozessoren , Elektronik , Homepage

Spezielle Befehle?
Die Spezial-Assembler-Befehle

weiter zu 'Pseudo-Befehlen'

zurück


Spezial-Befehlsübersicht

ADDCF , ADDDCF , SUBCF , SUBDCF ,

B , BC , BDC , BNC , BNDC , BZ , BNZ ,

SKPC , SKPDC , SKPNC , SKPNDC , SKPNZ , SKPZ

CLRC , CLRDC , CLRZ , SETC , SETDC , SETZ ,

MOVFW , NEGF , TSTF ,


Befehlsübersicht nach Gruppen

Aritmetische Operationen (ADD.., SUB..)
Sprungbefehle
Skip-Befehle
Setzen und Löschen einzelner Flags (CL...,  SET...)
Kopierbefehle (MOV...)


Spezielle Befehle?

Auf der Seite über die Assembler-Befehle wurden bereits alle Befehle behandelt, die die PIC16F/PIC12F-Prozessoren beherrschen. Trotzdem wird man in vielen Listings scheinbar andere Befehle finden. Dafür gibt es zwei Gründe: Auch wenn solche Spezialbefehle nicht unbedingt nötig sind, können sie doch die Verständlichkeit und die Lesbarkeit von Assemblercode deutlich verbessern.
nach oben


 

Die Spezial-Befehle

  1. Aritmetische Operationen (ADD.., SUB..)
  2. Sprungbefehle (B..., SK...)
  3. Skip-Befehle
  4. Setzen und Löschen einzelner Flags (CL...,  SET...)
  5. Kopierbefehle (MOV...)

Aritmetische Operationen (ADD.., SUB..)

Das sind die Befehle zur "Datenverarbeitung". Hier wird also gerechnet.
 
ADDCF Addiere den Wert des Carry-Flags zum Register f
Syntax: ADDCF  f,d
echter Code BTFSC   STATUS, C
incf    f, d
Bedeutung: Der Inhalt des Registers f wird um 1 erhöht, falls das C-Flag gesetzt ist

wenn d=0:
Das Ergebnis wird Arbeitsregister W gespeichert. Die Speicherzelle f bleibt unverändert.

wenn d=1 
Das Ergebnis wird wieder in der Speicherzelle f gespeichert

Beispiel: ADDCF 0x20,1  ; Falls das C-Flag gesetzt ist, wird der Inhalt der Speicherzelle
              ;   20h um 1 erhöht. Die Summe wird in der 
              ;   Speicherzelle 20h abgelegt.
Flags: Z

 
ADDDCF Addiere den Wert des DigitCarry-Flags zum Register f
Syntax: ADDDCF  f,d
echter Code BTFSC   STATUS, DC
incf    f, d
Bedeutung: Der Inhalt des Registers f wird um 1 erhöht, falls das DC-Flag gesetzt ist

wenn d=0:
Das Ergebnis wird Arbeitsregister W gespeichert. Die Speicherzelle f bleibt unverändert.

wenn d=1 
Das Ergebnis wird wieder in der Speicherzelle f gespeichert

Beispiel: ADDDCF 0x20,1  ; Falls das DC-Flag gesetzt ist, wird der Inhalt der Speicherzelle
               ;   20h um 1 erhöht. Die Summe wird in der 
               ;   Speicherzelle 20h abgelegt.
Flags: Z

 
SUBCF Subtrahiere den Wert des Carry-Flags vom Register f
Syntax: SUBCF  f,d
echter Code BTFSC   STATUS, C
decf    f, d
Bedeutung: Der Inhalt des Registers f wird um 1 verringert, falls das C-Flag gesetzt ist

wenn d=0:
Das Ergebnis wird Arbeitsregister W gespeichert. Die Speicherzelle f bleibt unverändert.

wenn d=1 
Das Ergebnis wird wieder in der Speicherzelle f gespeichert

Beispiel: SUBCF 0x20,1  ; Falls das C-Flag gesetzt ist, wird der Inhalt der Speicherzelle
              ;   20h um 1 verringert. Das Ergebnis wird in der 
              ;   Speicherzelle 20h abgelegt.
Flags: Z

 
SUBDCF Subtrahiere den Wert des DigitCarry-Flags vom Register f
Syntax: SUBDCF  f,d
echter Code BTFSC   STATUS, DC
decf    f, d
Bedeutung: Der Inhalt des Registers f wird um 1 verringert, falls das DC-Flag gesetzt ist

wenn d=0:
Das Ergebnis wird Arbeitsregister W gespeichert. Die Speicherzelle f bleibt unverändert.

wenn d=1 
Das Ergebnis wird wieder in der Speicherzelle f gespeichert

Beispiel: SUBDCF 0x20,1  ; Falls das DC-Flag gesetzt ist, wird der Inhalt der Speicherzelle
               ;   20h um 1 vermindert. Das Ergebnis wird in der 
               ;   Speicherzelle 20h abgelegt.
Flags: Z


Sprungbefehle

Hier geht es in erster Linie um die Vereinfachung der berüchtigten Befehlskombinationen a'la:

BTFSC    STATUS, C
GOTO     nirwana
B Unbedingter Sprung (B steht für Branch=Verzweigung)
Syntax: B      k
echter Code GOTO   k
Bedeutung: Springe im Programm zur Adresse k. (k ist 11 Bit lang)
Normalerweise ist k eine Marke. Dadurch wird dann ein Bezeichner und keine nackte Zahl verwendet.
Beispiel: B      Marke1  ; Springe zur Marke1 im Programm.
  .
  .
Marke1
               ; hier geht es weiter.

 
BC Springe falls C-Flag gesetzt ist
Syntax: BC     k
echter Code BTFSC  STATUS, C
GOTO   k
Bedeutung: wenn das Carry-flag gesetzt ist, wird zur Adresse k gesprungen.
Beispiel: BC    Marke1    ; prüfe das Carry-Flag, bei C=1 wird zur Marke 1 gesprungen 
GOTO  Marke2    ; bei C=0 wird diese Zeile ausgeführt: Sprung zu Marke2 

 
BDC Springe falls DC-Flag gesetzt ist
Syntax: BDC    k
echter Code BTFSC  STATUS, DC
GOTO   k
Bedeutung: wenn das DigitCarry-flag gesetzt ist, wird zur Adresse k gesprungen.
Beispiel: BDC   Marke1    ; prüfe das DC-Flag, bei DC=1 wird zur Marke 1 gesprungen 
GOTO  Marke2    ; bei DC=0 wird diese Zeile ausgeführt: Sprung zu Marke2 

 
BNC Springe falls C-Flag nicht gesetzt ist
Syntax: BNC    k
echter Code BTFSS  STATUS, C
GOTO   k
Bedeutung: wenn das Carry-flag nicht gesetzt ist, wird zur Adresse k gesprungen.
Beispiel: BNC   Marke1    ; prüfe das Carry-Flag, bei C=0 wird zur Marke 1 gesprungen 
GOTO  Marke2    ; bei C=1 wird diese Zeile ausgeführt: Sprung zu Marke2 

 
BNDC Springe falls DC-Flag nicht gesetzt ist
Syntax: BNDC   k
echter Code BTFSS  STATUS, DC
GOTO   k
Bedeutung: wenn das DigitCarry-flag nicht gesetzt ist, wird zur Adresse k gesprungen.
Beispiel: BNDC  Marke1    ; prüfe das DC-Flag, bei DC=0 wird zur Marke 1 gesprungen 
GOTO  Marke2    ; bei DC=0 wird diese Zeile ausgeführt: Sprung zu Marke2 

 
BZ Springe falls Z-Flag gesetzt ist
Syntax: BZ     k
echter Code BTFSC  STATUS, Z
GOTO   k
Bedeutung: wenn das Zero-flag gesetzt ist, wird zur Adresse k gesprungen.
Beispiel: BZ    Marke1    ; prüfe das Zero-Flag, bei Z=1 wird zur Marke 1 gesprungen 
GOTO  Marke2    ; bei Z=0 wird diese Zeile ausgeführt: Sprung zu Marke2 

 
BNZ Springe falls Z-Flag nicht gesetzt ist
Syntax: BNZ    k
echter Code BTFSS  STATUS, Z
GOTO   k
Bedeutung: wenn das Zero-flag nicht gesetzt ist, wird zur Adresse k gesprungen.
Beispiel: BNZ   Marke1    ; prüfe das Zero-Flag, bei Z=0 wird zur Marke 1 gesprungen 
GOTO  Marke2    ; bei Z=1 wird diese Zeile ausgeführt: Sprung zu Marke2 


Skip-Befehle

Ein SKIP-Befehl (Auslass-Befehl) entscheidet anhand von Flags, ob der nachfolgende Befehl ausgelassen (übersprungen) wird.
Das sind lediglich andere (eingängigere) Schreibweisen für einige Befehle der Form:

BTFSC  STATUS,...
SKPC SKIP wenn C-Flag gesetzt ist
Syntax: SKPC
echter Code BTFSS    STATUS, C
Bedeutung: Überspringe den folgenden Befehl, falls das Carry-Flag gesetzt ist.
Beispiel: SKPC        ; teste das C-Flag
CLRW        ; dieser Befehl wird nicht ausgeführt falls C=1

 
SKPDC SKIP wenn DC-Flag gesetzt ist
Syntax: SKPDC
echter Code BTFSS    STATUS, DC
Bedeutung: Überspringe den folgenden Befehl, falls das DigitCarry-Flag gesetzt ist.
Beispiel: SKPDC       ; teste das DC-Flag
CLRW        ; dieser Befehl wird nicht ausgeführt falls DC=1

 
SKPNC SKIP wenn C-Flag nicht gesetzt ist
Syntax: SKPNC
echter Code BTFSC    STATUS, C
Bedeutung: Überspringe den folgenden Befehl, falls das Carry-Flag nicht gesetzt ist.
Beispiel: SKPNC       ; teste das C-Flag
CLRW        ; dieser Befehl wird nicht ausgeführt falls C=0

 
SKPNDC SKIP wenn DC-Flag nicht gesetzt ist
Syntax: SKPNDC
echter Code BTFSC    STATUS, DC
Bedeutung: Überspringe den folgenden Befehl, falls das DigitCarry-Flag nicht gesetzt ist.
Beispiel: SKPNDC      ; teste das DC-Flag
CLRW        ; dieser Befehl wird nicht ausgeführt falls DC=0

 
SKPNZ SKIP wenn Z-Flag nicht gesetzt ist
Syntax: SKPNZ
echter Code BTFSC    STATUS, Z
Bedeutung: Überspringe den folgenden Befehl, falls das Zero-Flag nicht gesetzt ist.
Beispiel: SKPNZ       ; teste das Z-Flag
CLRW        ; dieser Befehl wird nicht ausgeführt falls Z=0

 
SKPZ SKIP wenn Z-Flag gesetzt ist
Syntax: SKPZ
echter Code BTFSS    STATUS, Z
Bedeutung: Überspringe den folgenden Befehl, falls das Zero-Flag gesetzt ist.
Beispiel: SKPZ        ; teste das Z-Flag
CLRW        ; dieser Befehl wird nicht ausgeführt falls Z=1


Setzen und Löschen einzelner Flags (CL..., SET...)

Das sind Kurzschreibweisen für befehler der Art:

BSF/BCF    STATUS, ...
CLRC lösche das C-Flag
Syntax: CLRC
echter Code BCF      STATUS, C
Bedeutung: löscht das Carry-Flag
Beispiel: CLRC        ; nun ist C=0

 
CLRDC lösche das DC-Flag
Syntax: CLRDC
echter Code BCF      STATUS, DC
Bedeutung: löscht das DigitCarry-Flag
Beispiel: CLRDC       ; nun ist DC=0

 
CLRZ lösche das Z-Flag
Syntax: CLRZ
echter Code BCF      STATUS, Z
Bedeutung: löscht das Zero-Flag
Beispiel: CLRZ        ; nun ist Z=0

 
SETC setze das C-Flag
Syntax: SETC
echter Code BSF      STATUS, C
Bedeutung: setzt das Carry-Flag
Beispiel: SETC        ; nun ist C=1

 
SETDC setze das DC-Flag
Syntax: SETDC
echter Code BSF      STATUS, DC
Bedeutung: setzt das DigitCarry-Flag
Beispiel: SETDC        ; nun ist DC=1

 
SETZ setze das Z-Flag
Syntax: SETZ
echter Code BSF      STATUS, Z
Bedeutung: setzt das Zero-Flag
Beispiel: SETZ        ; nun ist Z=1



 

Kopierbefehle und Anderes (MOV...)
 
 
MOVFW lade den Inhalt des Registers f nach W
Syntax: MOVFW
echter Code MOVF    f, w
Bedeutung: der Inhalt des Registers f wird nach W kopiert
Beispiel: MOVFW       0x20h    ; 
Flags: Z

 
NEGF wandelt den Inhalt des Registers f in das Zweierkomplement um
Syntax: NEGF    f, d
echter Code COMF    f, 1
INCF    f, d
Bedeutung: der Inhalt des Registers f wird invertiert und incrementiert, um das Zweierkomplement zu bilden
Beispiel: NEGF     0x20h    ; 
Flags: Z

 
TSTF prüfe ob im Registers f eine Null steht
Syntax: TSTF    f
echter Code MOVF    f, 1
Bedeutung: fall im Register f Null steht, dann wird das Z-Flag gesetzt
Beispiel: TSTF     0x20h
Flags: Z

 

nach oben

zurück zu PIC-Prozessoren , Elektronik , Homepage

erstellt am: 21.01.2003
letzte Änderung: 24.01.2004