6. Assembler im LMC
Damit wir diese Aspekte genauer anschauen können, simulieren wir einen einfachen Rechner. Der "Little Man Computer" 👉 LMC von Peter Higginson eignet sich dazu sehr gut.
Die Benutzeroberfläche enthält drei Teile:
- Editor
- Im LMC Editor werden die Befehle in Form von Mnemonics eingegeben
- Assembler
- Der Assembler übersetzt diese Mnemonics in die Zahlen (Opcodes und Operanden) schreibt diese in die Speicherzellen
- Simulator
- Der Simulator führt die Instruktionen dann aus.
Instruction Set
Der LMC kennt 11 verschiedene Instruktionen und hat einen Speicher von 100 Zellen, welche von 00 bis 99 nummeriert werden. Mit diesen Instruktionen lassen sich alle Aktionen des Fetch-Decode-Execute Zyklus ausführen.
| Instruktion | Mnemonic | Opcode | Erklärung |
|---|---|---|---|
| HALT | HLT | 000 | Programm beenden |
| Addieren | ADD | 1xx | Addiere den Inhalt von Speicherzelle xx zum Akkumulator |
| Subtrahieren | SUB | 2xx | Subtrahiere den Inhalt von Speicherzelle xx vom Akkumulator |
| Speichern | STA | 3xx | Speichere den Inhalt des Akkumulators in Speicherzelle xx |
| Lade | LDA | 5xx | Lade den Inhalt von Speicherzelle xx in den Akkumulator |
| Gehe zu (Branch Always) | BRA | 6xx | Setze den Programmzähler auf xx (also spring als nächstes dorthin) |
| Gehe wenn 0 (Branch if Zero) | BRZ | 7xx | Wenn der Akkumulator 0 enthält spring als nächstes nach xx |
| Gehe wenn >=0 (Branch if Positive) | BRP | 8xx | Wenn der Akkumulator positiv ist spring als nächstes nach xx |
| Eingabe | INP | 901 | Hol vom Operateur einen Eingabe und schreib sie in den Akkumulator |
| Ausgabe | OUT | 902 | Gib den Inhalt des Akkumulators aus |
| Freier Speicherort (Data Location) | DAT | Weist dem nächstmöglichen, freien Speicherplatz im RAM einen Name zu. Optional kann auch der Zahlenwert des zugewiesenen Speicherplatzes angegeben werden. |
Editor und Assembler kennen symbolische Links; Speichezellen können Namen haben und mit diesem angesprochen werden. Kommentare werden mit einem # gekennzeichnet.
Ein erstes Programm soll das veranschaulichen. Es fragt nach einer Eingabe, zählt dann 5 dazu und gibt das Resultat aus.
;
; Programm Ein- und Ausgabe
;
INP ; Eingabe holen und in akk speichern
ADD five ; fünf dazu
OUT ; ausgeben
HLT ; fertig
five DAT 5 ; 5 zum Addieren
Im Speicher stehen jetzt folgende Zahlen:
00 901 (INP; Eingabe holen und in Akk laden)
01 104 (ADD 04; addiere den Inhalt von Speicherzelle 04 zum Akk)
02 902 (OUT; gib Akk aus)
03 000 (HLT; Programm beenden)
04 005 (Zahl 5; Datenzelle)
Mit "Run" kann das Programm nun ausgeführt werden.
Leider können die Online-Simulatoren keine Kommentare verarbeiten. Sie müssen die Kommentare vor dem Ausführen entfernen 😓
Kommentare Entfernen
Assembler-Code
Probieren Sie es aus! Macht das Programm, was es soll? Können Sie es so abändern, dass es statt 5 nun eine andere Zahl addiert?
Halten Sie Ihre Erkenntnisse unten fest.