Assembleranweisungen


Neben dem Umsetzen von Assembler-Code in Hex-Code kann der Assembler auch noch den Speicherplatz des Prozessors verwalten. Dies geschieht mit sogenannten Assembler-Anweisungen.
 
list  Der Assembler mpasm beherrscht verschiedene Prozessor-Dialekte. Mit der List-Anweisung wählt man den gewünschten Typ aus. Beispiel: list p=16C84
equ  Mit der Anweisung counter equ 12 legt man fest, dass im Hexcode das als counter bezeichnete Register immer duch die Adresse $12 ersetzt wird
; leitet einen Kommentar ein. Alle folgenden Zeichen werden bis zum nächsten Zeilenumbruch beim Kompilieren ignoriert
= Die Anweisung f=1 fügt überall für f den konstanten Wert 1 ein
org Die Anweisung org = 004 setzt den folgenden Befehl auf die Speicheradresse 004 im EEPROM des PIC
#include durch #inc otto.txt wird beim Linken der Teil-Code otto.txt an die nachfolgende Adresse geschrieben.
end Markiert das Ende des Codes

Auch Assembleranweisungen müssen wie Assembler-Befehle durch mindestens einen Leerschlag (am besten ein TAB) eingeleitet werden. Labels müssen am Zeilenanfang stehen, weil sie sonst als Anweisungen oder Befehle interpretiert werden. Kommentare, eingeleitet mit  ; können überall in der Zeile stehen.

In der folgenden Datei - pic.h - wird ausgiebig von Assembler-Anweisungen Gebrauch gemacht. Sie wird mittels '#include pic.h ' zu Beginn des Programmcodes geladen. Anschließend kann man die vereinbarten Adressen und Konstanten beliebig im Programm-Code  verwenden.


; Standard Register der Prozessoren 16C71 und 16C84
;
fsr_data equ 00 ; enthält Daten bei indirekter Adressierung
rtcc     equ 01 ; Seite 0: Real Time Clock / Counter
option   equ 01 ; Seite 1: Enthält Flags zur Steuerung von Interrupts
pc       equ 02 ; programcounter (Low-anteil)
status   equ 03 ; Statusregister (enthält z.B. Zero- und Carryflag
fsr_adr  equ 04 ; enthält die Adresse bei indirekter Adressierung
porta    equ 05 ; Seite 0: IO-Port A (8 Bit breit)
trisa    equ 05 ; Seite 1:
portb    equ 06 ; dto PortB (5 Bit breit)
trisb    equ 06
ee_data  equ 08 ; enthält Daten bei indirekter Adressierung des Daten-EEPROMS (Seite 0)
ee_adr   equ 09 ; Adresse bei indirekter Adressierung des Daten-EEPROMs (Seite 0)
ee_con1  equ 08 ; Flags zur Steuerung von Schreiben und Lesen im Daten-EEPROM (Seite 1)
ee_con2  equ 09 ; write-init durch das Schreiben von 55h AAh
pc_hi    equ 0a ; höherwertiger Anteil des Programmzählers
intcon   equ 0b ; enthält flags zur Steuerung von Interrupt 
carry = 0       ; Zeroflag : Statusregister Bit 0
zero  = 1       ; carryflag : Statusregister Bit 1
f     = 1       ; d=1 : lege Ergebnis im Register (f) ab
w     = 0       ; d=0 : lege Ergebnis im Workregistert (w) ab

Zurück

© Dietrich Praclik