Inhaltsverzeichnis

Assembler

Der Grossteil der Informationen findest du in den Slides. Unten findest du primär Aufträge und Links.

2021_22_assembler_i.pdf

Slides Branching / Labels

Little Man Computer

Little Man Computer Simulation

Little Man Computer Help

Aufgaben

Aufgabe 1

Betrachte das einfache Assemblerprogramm, welches zwei Zahlen, welche im Code gespeichert sind, addiert:

        LDA 97
        ADD 98
        STA 99
        OUT
        HLT

Arbeite in 2er-Gruppe.

  1. Tippe den Code in den LMC (nicht copy-paste).
  2. Schreibe die beiden Zahlen, die du addieren möchtest, am richtigen Ort in den Speicher.
  3. Führe das Programm wiederholt aus. Verfolge genau, was wann passiert:
    1. Beobachte den Instruktionszyklus.
    2. Stelle sicher, dass du alles verstehst.
  4. Schreibe den Code so um, dass nun vier Zahlen addiert werden können.

Aufgabe 2: Schleifen

Nun wollen wir Schleifen (ähnlich wie while in Python) in Assembler programmieren. Bei einer solchen wird eine Bedingung überprüft. Je nachdem, ob diese erfüllt ist, springt der Code dann wieder zurück. Dazu verwenden wir die Sprung-Instruktionen (Branch) in Assembler.

        ...
LOOP    ... // here loop starts
        ...
        BRP LOOP // if accumulator is >= 0, jump to LOOP (can also use different name)
        ...
  1. Studiere im Manual die Sprung-Instruktionen BRA, BRZ, BRP
  2. Schreibe Assembler-Code, der einen Countdown ausführt (siehe unten):
    1. eine Zahl wird eingelesen
    2. wiederholen, solange die Zahl >= 0 ist:
      1. die Zahl wird ausgeben
      2. die Zahl wird um 1 verringert

Hinweise:

Lösung:

Aufgabe 3: Verzweigungen

Nun wollen wir einfache Verzweigungen (entspricht if-else-Statement in Python) in Assembler programmieren. Bei einem solchen wird eine Bedingung überprüft. Je nachdem, ob diese erfüllt ist, springt der Code dann an eine andere Stelle. Dazu verwendet man, ganz ähnlich wie bei Schleifen, die Sprung-Instruktionen. Der Unterschied hier ist, dass man nicht zurück sondern nach weiter unten im Code springt.

        ...
        BRP JMP // if accumulator is zero or positive, jump to line marked with JMP
        ...
JMP     ...
        ...
  1. Studiere im Manual die Befehle BRA, BRZ, BRP
  2. Schreibe ein Assembler-Programm, in welchem dem man zuerst zwei Zahlen eingeben kann. Von diesen wird das Maximum bestimmt und ausgegeben.

Aufgaben 4a-f

Löse eine der folgenden Aufgaben; verwende Labels und Branching Instructions.