Skip to content

Little Man Computer

Rechnerarchitektur

Der Little Man Computer (LMC) ist ein Rechnermodell, welches 1965 zum besseren Verständnis der Von-Neumann-Architektur entwickelt wurde.

Unter dem folgenden Link ist eine LMC-Simulation verfügbar:

Aufbau

Der LMC hat einen Speicher mit 100 Speicherstellen, welche je eine natürliche Zahl zwischen 0 und 999 enthalten.

Der LMC hat folgende Register:

  • Der Programmzähler (Program Counter) enthält eine Zahl zwischen 0 und 99. Er gibt an, in welcher Speicheradresse der nächste Befehl liegt.
  • Im Akkumulator (Accumulator) ist der erste Operand sowie das Resultat der Rechenoperationen gespeichert.
  • Im Befehls- und Adressregister (Instruction Register und Address Register) wird der Inhalt des aktuellen Befehls abgelegt.

Einagbe: Im Bereich Input kann der Benutzer eine Zahl eingeben.

Ausgabe: Im Bereich Output werden die letzten Ausgaben aufgelistet.

Bildschirmfoto LMC

Funktionsweise

Der LMC führt Befehle gemäss dem Von-Neumann-Zyklus aus:

  1. Fetch: Der Progammzähler gibt vor, welche Speicherstelle gelesen wird. Der Inhalt dieser Speicherstelle wird in die CPU transportiert.
  2. Decode: Die erste Ziffer des Befehls wird in das Befehlsregister, die zwei weiteren Ziffern in das Adressregister kopiert.
  3. Execute: Der entprechende Befehl wird ausgeführt.

Befehlssatz

CodeNameDescription
000HLTProgramm anhalten
1xxADDAddiert den Inhalt in der Speicherstelle xx zum Akkumulator
2xxSUBSubtrahiert den Inhalt in der Speicherstelle xx vom Akkumulator
3xxSTAÜberträgt den Inhalt des Akkumulators in die Speicherstelle xx
5xxLDAÜberträgt den Inhalt der Speicherstelle xx in den Akkumulator
6xxBRASetzt den Programmzähler auf den Wert xx
7xxBRZSetzt den Programmzähler auf den Wert xx falls der Akkumulator gleich Null ist
8xxBRPSetzt den Programmzähler auf den Wert xx falls der Akkumulator nicht negativ ist
901INPLiest einen Wert vom Benutzer ein und überträgt in in den Akkumulator
902OUTGibt den Wert im Akkumulator aus.
922OTCGibt den Wert im Akkumulator aus als ASCII-Zeichen aus

Aufgabe: Addition mit Maschinencode

Wir machen Schritt für Schritt ein Einstiegsbeispiel, in welchem zwei Zahlen addiert werden. Diese Zahlen werden vom Benutzer als Input eingegeben. Das Resultat wird als Output ausgegeben.

  • Öffne den Little Man Computer

  • Gib die folgenden Werte in den Speicher ein:

    Adresse012345
    Wert901310901110902000
  • Klicke auf Run und beobachte was passiert.

  • Erkennst du den Von-Neumann-Zyklus?

  • Bei welchen Befehlen werden nicht alle Schritte des Zyklus ausgeführt?

Assemblersprache

Beim vorhergehenden Beispiel wurden die Instruktionen direkt in die Speicherstellen eingegeben. Diese Art zu Programmieren ist aber sehr mühsam. Deshalb wurden Assemblersprachen entwickelt.

In einer Assemblersprache werden die Instruktionen durch Text dargestellt. Häufig wird eine Instruktion durch drei Buchstaben gekennzeichnet.

Mit einem Assembler wird dieser Programmcode in die eigentlichen Instruktionen übersetzt.

In LMC kann im linken Fenster Assemblercode geschrieben werden. Mit Assemble into RAM wird der Assemblercode in die Instruktionen übersetzt und in den Speicher übertragen.

Dabei wird jede Zeile des Assemblerprogramms in eine entsprechende dreistellige Zahl übersetzt und in die jeweils nächste Speicherstelle geschrieben.

Aufgabe: Addition mit Assembler

  • Klicke auf OPTIONS und wähle clear memory aus.

  • Klicke in das linke Textfeld.

  • Kopiere diesen Code in das Textfeld and klicke auf Submit:

    asm
            INP
            STA 12
            INP
            ADD 12
            OUT
            HLT
  • Klicke auf Assemble into RAM

  • Vergleiche den Inhalt des Speichers mit der ersten Aufgabe.

  • Was ist gleich, was ist anders?

  • Was ist die Bedeutung der Zahl 12?

  • Was passiert, wenn 12 durch 4 ersetzt wird?

Labels und Daten

Die explizite Verwendung von Speicheradressen ist umständlich und fehleranfällig. Deshalb kann in Assembler jede Speicherstelle mit einem Label versehen werden. Dazu wird vor dem Befehl ein beliebiges Wort aus ASCII-Buchstaben geschrieben. Dieses Label kann im Code anstelle einer Speicheradresse verwendet werden.

Zusätzlich gibt es den Pseudobefehl DAT, welche eine Speicherstelle für einen Datenwert reserviert.

Das folgende Beispiel zeigt nochsmals das Programm, welches zwei Zahlen addiert:

asm
        INP
        STA zahl
        INP
        ADD zahl
        OUT
        HLT
zahl    DAT 0

Die Zeile zahl DAT 0 reserviert eine Speicherstelle für Daten und initialisiert sie mit dem Wert 0. Die Instruktionen STA und ADD verwenden das Label zahl anstelle der fixen Speicheradresse.

Daten müssen immer nach der HLT-Instruktion stehen. Ansonsten wird deren Inhalt während dem Programmablauf als Instruktion interpretiert und ausgeführt.

Aufgabe: Addition mit Label

  • Gibt den oben stehenden Code ein und assembliere ihn.
  • Führe das Programm aus.
  • Welche Speicherstelle wird für die zahl verwendet?

Gymnasium Kirchenfeld, fts, lem & ros