(→Ausführliche Beschreibung zu den Befehlen) |
(→Programmablaufdiagramm) |
||
Zeile 17: | Zeile 17: | ||
Weil ASM Programme nicht besonders durschaubar sind, wurde als Hilfsmittel ein Programmablaufdiagramm (kurz: PAD) erfunden. Beim Programmerstellung fängt man damit an ein PAD zu erstellen, das die wichtigsten Programmschritte enthält. | Weil ASM Programme nicht besonders durschaubar sind, wurde als Hilfsmittel ein Programmablaufdiagramm (kurz: PAD) erfunden. Beim Programmerstellung fängt man damit an ein PAD zu erstellen, das die wichtigsten Programmschritte enthält. | ||
− | Weiter werden alle Befehle nach dem PAD in eine Textdatei mit Erweiterung .asm (Quellcode) geschrieben, durch ein Assemblerprogramm (für PICs: MPASM oder [http://gputils.sourceforge.net/ GPASM]) von | + | Weiter werden alle Befehle nach dem PAD in eine Textdatei mit Erweiterung .asm (Quellcode) geschrieben, durch ein Assemblerprogramm (für PICs: MPASM oder [http://gputils.sourceforge.net/ GPASM]) von dem für Menschen noch verständlichen Code in die Maschinensprache "übersetzt" und als Texdatei mit Erweiterung .hex gespeichert. Diese Datei wird danach in den Programmspeicher des µC übertragen ("gebrannt"). Das Assemblerprogramm MPASM kann kostenlos von der Haupseite des Herstellers von PICs [htpp://www.microchip.com] runtergeladen werden. |
Das PDA ist sehr behilflich um sogar nach langer Zeit im Programm ewentuelle Fehler zu finden oder Änderungen vorzunehmen. | Das PDA ist sehr behilflich um sogar nach langer Zeit im Programm ewentuelle Fehler zu finden oder Änderungen vorzunehmen. |
Version vom 25. März 2007, 21:33 Uhr
Inhaltsverzeichnis
Einführung
Die Maschinensprache, auch Assembler oder kurz ASM genannt, ist eine Sprache die nur bestimmter Prozessor versteht. Für einen Menschen ist sie unverständlich, da sie nur aus hexadezimalen (kurz: hex) Zahlen besteht.
Um sich die Sprache verständlicher zu machen wurden den hex Zahlen s.g. Mnemonics aus Buchstaben zugewiesen. Jeden Befehl für ein Prozessor hat somit einen "Namen", der meistens aus einer Abkürzung des Namens in englischer Sprache stammt.
Obwohl sie 200 bis 1000 mal schneller als die meisten Hochsprachen ist, wird sie wegen dem grossen Aufwand bei Erstellung umfangreichen Programmen, selten benutzt. Man findet sie aber oft in fast allen Hochsprachen, in eigebundenen Funktionen, überall dort wo die Hochsprachen zu langsam sind.
ASM eignet sich aber sehr gut für kleine Anwendungen (meistens Steuerungen) mit Mikrokontrollern (kurz: µC).
Die Aufgabe eines ASM-Programmierers ist, ein Programm zu schreiben, das der bestimmte Prozessor versteht und nach den Wünschen des Programmierers realisiert.
Programmablaufdiagramm
Weil ASM Programme nicht besonders durschaubar sind, wurde als Hilfsmittel ein Programmablaufdiagramm (kurz: PAD) erfunden. Beim Programmerstellung fängt man damit an ein PAD zu erstellen, das die wichtigsten Programmschritte enthält.
Weiter werden alle Befehle nach dem PAD in eine Textdatei mit Erweiterung .asm (Quellcode) geschrieben, durch ein Assemblerprogramm (für PICs: MPASM oder GPASM) von dem für Menschen noch verständlichen Code in die Maschinensprache "übersetzt" und als Texdatei mit Erweiterung .hex gespeichert. Diese Datei wird danach in den Programmspeicher des µC übertragen ("gebrannt"). Das Assemblerprogramm MPASM kann kostenlos von der Haupseite des Herstellers von PICs [htpp://www.microchip.com] runtergeladen werden.
Das PDA ist sehr behilflich um sogar nach langer Zeit im Programm ewentuelle Fehler zu finden oder Änderungen vorzunehmen.
Nach dem Eischalten der Betriebspannung des µC, fängt der Prozessor an, das sich im Programmspeicher befindliches Programm von der Adresse 0 auszuführen.
Midrange
Kurzübersicht Assembler Befehle
|
|
Ausführliche Beschreibung zu den Befehlen
Erklärungen zu den Verwendeten Platzhaltern:
- k stellt einen fest definierten Wert da. z.B. 0x20, d'42' oder b'00101010'
- W steht für das W-Register.
- d steht für destination. Im code wird d durch ein w (der Wert wird in das W-Register gespeichert ) oder f (der Wert wird in das davor definierte Register gespeichert)
- R steht für ein Register
- fett geschrieben Bedeutet, dass es ein Platzhalter ist und im Quellcode ersetzt werden muss
- Schreibmaschinenstil bedeutet, dass es so im Quellcode geschrieben werden kann.
- RETFIE
- Mit diesem Befehl wird der Interrupt beendet und das Programm wird an der Zeile weiter ausgeführt, in der es durch den Interrupt unterbrochen wurde. Siehe hierzu auch Interrupt
- RETLW k
- Wurde ein Programmteil mit dem Befehl CALL aufgerufen, dann springt man mit dem Befehl RETLW zurück zu der Zeile in der CALL Befehl ausgeführt wurde. Der in k angegebene Wert wird dabei in das W-Register geschrieben. Dieser Befehl wird vor allem für Computed-Gotos verwendet.
- RETURN
- Wurde ein Programmteil mit dem Befehl CALL aufgerufen, dann springt man mit dem Befehl RETURN zurück zu der Zeile in der CALL Befehl ausgeführt wurde.
- RLF R,d
- Die Bits im Register R werden nach links verschoben. Dabei wird das Carry bit (STATUS,C) in das Bit 0 des Registers R geschoben. Bit 7 aus dem Register R wird in das Carry bit "geschoben". Das Ergebnis wird entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1).
- Zur Verdeutlichung:
- |C| |-Register R-| ;C steht für das Carry-bit, STATUS,C c 7 6 5 4 3 2 1 0 ;vor dem Verschieben 7 6 5 4 3 2 1 0 c ;nach dem Verschieben
- RRF R,d
- Die Bits im Register R werden nach rechts verschoben. Dabei wird das Carry bit (STATUS,C) in das 7.Bit des Registers R geschoben. Bit 0 aus dem Register R wird in das Carry bit "geschoben". Das Ergebnis wird entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1).
- Zur Verdeutlichung:
- |C| |-Register R-| ;C steht für das Carry-bit, STATUS,C C 7 6 5 4 3 2 1 0 ;vor dem Verschieben 0 C 7 6 5 4 3 2 1 ;nach dem Verschieben
- SLEEP
- Der µC wird in den Sleep-Mode versetzt, in dem er weniger Strom verbraucht. Er kann durch einen Reset, einem Watchdog-Timer-Reset oder durch einen Interrupt wieder aufgeweckt werden.
- SUBLW k
- Es wird die Rechenoperation [math]k-W[/math] ausgeführt und in das W-Register gespeichert. Dieser Befehl beeinflusst das STATUS-Register. Siehe hierzu Überprüfung von Rechenergebnissen mit Hilfe des STATUS-Register
- SUBWF R,d
- Es wird die Rechenoperation [math]R-W[/math] ausgeführt und entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1). Dieser Befehl beeinflusst das STATUS-Register. Siehe hierzu Überprüfung von Rechenergebnissen mit Hilfe des STATUS-Register
- Beispiel:
- movlw d'20' ;schreibe 20 in das W-Register movwf Register1 ;bewegt das W-Register in das Register1 movlw d'10' ;schreibt 10 in das W-Register SUBWF Register1,F ;schreibt Register1(20)-W(10) in Register1
- SWAPF R,d
- Es es werden die ersten 4 bit mit den letzten 4 bit vertauscht und entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1).
- Beispiel:
- movlw b'00001111' ;schreibe b'00001111' in das W-Register movwf Register1 ;bewegt das W-Register in das Register1 SWAPF Register1,W ;vertauscht die ersten 4 bit mit den letzen ;4 bit in Register 1 und schreibt es in das W-Register ;im W-Register steht nun b'11110000'
- XORLW k
- Es wird die Rechenoperation [math]W\ xor\ k[/math] ausgeführt und in das W-Register gespeichert. Dieser Befehl setzt das Z bit des STATUS-Register, falls das Ergebnis 0 ist.
- Zur Verdeutlichung der Rechenoperation:
- 0011 1010 ---- xor 1001
- XORWF R,d
- Es wird die Rechenoperation [math]W\ xor\ R[/math] ausgeführt und entweder in das W-Register (d=W=0) oder in R gespeichert (d=F=1). Vergleiche XORLW
Überprüfung von Rechenergebnissen mit Hilfe des STATUS-Register
|
|