Zum Hauptinhalt springen
Version: 28Gj

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.

InstruktionMnemonicOpcodeErklärung
HALTHLT000Programm beenden
AddierenADD1xxAddiere den Inhalt von Speicherzelle xx zum Akkumulator
SubtrahierenSUB2xxSubtrahiere den Inhalt von Speicherzelle xx vom Akkumulator
SpeichernSTA3xxSpeichere den Inhalt des Akkumulators in Speicherzelle xx
LadeLDA5xxLade den Inhalt von Speicherzelle xx in den Akkumulator
Gehe zu (Branch Always)BRA6xxSetze den Programmzähler auf xx (also spring als nächstes dorthin)
Gehe wenn 0 (Branch if Zero)BRZ7xxWenn der Akkumulator 0 enthält spring als nächstes nach xx
Gehe wenn >=0 (Branch if Positive)BRP8xxWenn der Akkumulator positiv ist spring als nächstes nach xx
EingabeINP901Hol vom Operateur einen Eingabe und schreib sie in den Akkumulator
AusgabeOUT902Gib den Inhalt des Akkumulators aus
Freier Speicherort (Data Location)DATWeist 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.

Kommentare

Leider können die Online-Simulatoren keine Kommentare verarbeiten. Sie müssen die Kommentare vor dem Ausführen entfernen 😓

Kommentare Entfernen

Assembler-Code

Ausprobieren

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.

Laden...