Eingebettete Systeme - Assemblersprache
Assemblersprachen wurden entwickelt, um bereitzustellen mnemonicsoder Symbole für die Anweisungen auf Maschinenebene. Assembler-Programme bestehen aus Mnemonik, daher sollten sie in Maschinencode übersetzt werden. Ein Programm, das für diese Konvertierung verantwortlich ist, heißtassembler. Assemblersprache wird häufig als Low-Level-Sprache bezeichnet, da sie direkt mit der internen Struktur der CPU zusammenarbeitet. Um in Assemblersprache zu programmieren, muss ein Programmierer alle Register der CPU kennen.
Verschiedene Programmiersprachen wie C, C ++, Java und verschiedene andere Sprachen werden als Hochsprachen bezeichnet, da sie sich nicht mit den internen Details einer CPU befassen. Im Gegensatz dazu wird ein Assembler verwendet, um ein Assembler-Programm in Maschinencode zu übersetzen (manchmal auch aufgerufen)object code oder opcode). In ähnlicher Weise übersetzt ein Compiler eine Hochsprache in Maschinencode. Um beispielsweise ein Programm in C-Sprache zu schreiben, muss ein C-Compiler verwendet werden, um das Programm in Maschinensprache zu übersetzen.
Struktur der Assemblersprache
Ein Assembler-Programm besteht aus einer Reihe von Anweisungen, die entweder Assembler-Anweisungen wie ADD und MOV oder aufgerufene Anweisungen sind directives.
Ein instruction teilt der CPU mit, was zu tun ist, während a directive (auch genannt pseudo-instructions) gibt dem Assembler Anweisungen. Beispielsweise sind ADD- und MOV-Anweisungen Befehle, die von der CPU ausgeführt werden, während ORG und END Assembler-Anweisungen sind. Der Assembler platziert den Opcode an der Speicherstelle 0, wenn die ORG-Direktive verwendet wird, während END das Ende des Quellcodes anzeigt. Ein Programmierunterricht besteht aus den folgenden vier Feldern:
[ label: ] mnemonics [ operands ] [;comment ]
Eine eckige Klammer ([]) zeigt an, dass das Feld optional ist.
Das label fieldErmöglicht dem Programm, mit Namen auf eine Codezeile zu verweisen. Die Beschriftungsfelder dürfen eine bestimmte Anzahl von Zeichen nicht überschreiten.
Das mnemonics und operands fieldsFühren Sie gemeinsam die eigentliche Arbeit des Programms aus und erledigen Sie die Aufgaben. Anweisungen wie ADD A, C & MOV C, # 68, wobei ADD und MOV die Mnemonik sind, die Opcodes erzeugen; "A, C" und "C, # 68" sind Operanden. Diese beiden Felder können Anweisungen enthalten. Anweisungen generieren keinen Maschinencode und werden nur vom Assembler verwendet, während Anweisungen in Maschinencode übersetzt werden, damit die CPU sie ausführen kann.
1.0000 ORG 0H ;start (origin) at location 0
2 0000 7D25 MOV R5,#25H ;load 25H into R5
3.0002 7F34 MOV R7,#34H ;load 34H into R7
4.0004 7400 MOV A,#0 ;load 0 into A
5.0006 2D ADD A,R5 ;add contents of R5 to A
6.0007 2F ADD A,R7 ;add contents of R7 to A
7.0008 2412 ADD A,#12H ;add to A value 12 H
8.000A 80FE HERE: SJMP HERE ;stay in this loop
9.000C END ;end of asm source file
Das comment field beginnt mit einem Semikolon, das ein Kommentarindikator ist.
Beachten Sie die Bezeichnung "HIER" im Programm. Auf jedes Etikett, das sich auf eine Anweisung bezieht, sollte ein Doppelpunkt folgen.
Zusammenstellen und Ausführen eines 8051-Programms
Hier werden wir über die Grundform einer Assemblersprache diskutieren. Die Schritte zum Erstellen, Zusammenstellen und Ausführen eines Assembler-Programms sind wie folgt:
Zuerst verwenden wir einen Editor, um ein Programm einzugeben, das dem obigen Programm ähnlich ist. Editoren wie das MS-DOS EDIT-Programm, das mit allen Microsoft-Betriebssystemen geliefert wird, können zum Erstellen oder Bearbeiten eines Programms verwendet werden. Der Editor muss in der Lage sein, eine ASCII-Datei zu erstellen. Die Erweiterung "asm" für die Quelldatei wird im nächsten Schritt von einem Assembler verwendet.
Die Quelldatei "asm" enthält den in Schritt 1 erstellten Programmcode. Sie wird einem 8051-Assembler zugeführt. Der Assembler konvertiert dann die Assembler-Anweisungen in Maschinencode-Anweisungen und erzeugt eine.obj file (Objektdatei) und a .lst file(Listendatei). Es wird auch als bezeichnetsource fileAus diesem Grund benötigen einige Assembler, dass diese Datei die Erweiterungen "src" hat. Die "lst" -Datei ist optional. Es ist sehr nützlich für das Programm, da es alle Opcodes und Adressen sowie Fehler auflistet, die die Assembler erkannt haben.
Assembler benötigen einen dritten Schritt linking. Das Verknüpfungsprogramm nimmt eine oder mehrere Objektdateien und erzeugt eine absolute Objektdatei mit der Erweiterung "abs".
Als nächstes wird die "abs" -Datei einem Programm namens "OH" (Objekt-Hex-Konverter) zugeführt, das eine Datei mit der Erweiterung "hex" erstellt, die zum Einbrennen in das ROM bereit ist.
Datentyp
Der 8051-Mikrocontroller enthält einen einzelnen Datentyp von 8 Bit, und jedes Register hat auch eine Größe von 8 Bit. Der Programmierer muss Daten aufteilen, die größer als 8 Bit sind (00 bis FFH oder bis 255 in Dezimalzahl), damit sie von der CPU verarbeitet werden können.
DB (Byte definieren)
Die DB-Direktive ist die am häufigsten verwendete Datenanweisung im Assembler. Es wird verwendet, um die 8-Bit-Daten zu definieren. Es kann auch zum Definieren von Daten im Dezimal-, Binär-, Hex- oder ASCII-Format verwendet werden. Für Dezimalstellen ist das "D" nach der Dezimalzahl optional, für "B" (binär) und "Hl" (hexadezimal) jedoch erforderlich.
Um ASCII anzuzeigen, setzen Sie die Zeichen einfach in Anführungszeichen ('like this'). Der Assembler generiert automatisch ASCII-Code für die Zahlen / Zeichen. Die DB-Direktive ist die einzige Direktive, mit der ASCII-Zeichenfolgen definiert werden können, die größer als zwei Zeichen sind. Daher sollte es für alle ASCII-Datendefinitionen verwendet werden. Einige Beispiele für DB sind unten angegeben -
ORG 500H
DATA1: DB 28 ;DECIMAL (1C in hex)
DATA2: DB 00110101B ;BINARY (35 in hex)
DATA3: DB 39H ;HEX
ORG 510H
DATA4: DB "2591" ;ASCII NUMBERS
ORG 520H
DATA6: DA "MY NAME IS Michael" ;ASCII CHARACTERS
Um ASCII-Zeichenfolgen können einfache oder doppelte Anführungszeichen verwendet werden. DB wird auch verwendet, um Speicher in Blöcken mit Byte-Größe zuzuweisen.
Assembler-Anweisungen
Einige der Richtlinien von 8051 lauten wie folgt:
ORG (origin)- Die Ursprungsanweisung wird verwendet, um den Beginn der Adresse anzugeben. Es werden die Zahlen im Hexa- oder Dezimalformat verwendet. Wenn H nach der Zahl angegeben wird, wird die Zahl als Hexa behandelt, andernfalls als Dezimalzahl. Der Assembler konvertiert die Dezimalzahl in Hexa.
EQU (equate)- Es wird verwendet, um eine Konstante zu definieren, ohne einen Speicherplatz zu belegen. EQU ordnet einem Datenetikett einen konstanten Wert zu, sodass das Etikett im Programm angezeigt wird. Das Etikett wird durch seinen konstanten Wert ersetzt. Während der Ausführung der Anweisung "MOV R3, #COUNT" wird das Register R3 mit dem Wert 25 geladen (beachten Sie das # -Zeichen). Der Vorteil der Verwendung von EQU besteht darin, dass der Programmierer es einmal ändern kann und der Assembler alle seine Vorkommen ändert. Der Programmierer muss nicht das gesamte Programm durchsuchen.
END directive- Zeigt das Ende der Quelldatei (asm) an. Die END-Direktive ist die letzte Zeile des Programms. Alles, was nach der END-Direktive steht, wird vom Assembler ignoriert.
Beschriftungen in Assemblersprache
Alle Beschriftungen in Assemblersprache müssen den folgenden Regeln entsprechen -
Jeder Markenname muss eindeutig sein. Die Namen, die für Beschriftungen in der Assembler-Programmierung verwendet werden, bestehen aus alphabetischen Buchstaben in Groß- und Kleinbuchstaben, Nummer 0 bis 9, und Sonderzeichen wie Fragezeichen (?), Punkt (.) Mit der Rate @, Unterstrich (_), und Dollar ($).
Das erste Zeichen sollte alphabetisch sein. Es kann keine Zahl sein.
Reservierte Wörter können nicht als Bezeichnung im Programm verwendet werden. Beispielsweise sind ADD- und MOV-Wörter die reservierten Wörter, da es sich um Anweisungsmnemonik handelt.