**Dies ist eine alte Version des Dokuments!**
Assembler
Der Grossteil der Informationen findest du in den Slides. Unten findest du primär Aufträge und Links.
Little Man Computer
Instruction Set
Code | Name | Description |
---|---|---|
0 | HLT | Stop (Little Man has a rest). |
1 | ADD | Add the contents of the memory address to the Accumulator |
2 | SUB | Subtract the contents of the memory address from the Accumulator |
3 | STA or STO | Store the value in the Accumulator in the memory address given. |
4 | This code is unused and gives an error. | |
5 | LDA | Load the Accumulator with the contents of the memory address given |
6 | BRA | Branch - use the address given as the address of the next instruction |
7 | BRZ | Branch to the address given if the Accumulator is zero |
8 | BRP | Branch to the address given if the Accumulator is zero or positive |
9 | INP or OUT | Input or Output. Take from Input if address is 1, copy to Output if address is 2. |
9 | OTC | Output accumulator as a character if address is 22. (Non-standard instruction) |
9 | DAT | Used to indicate a location that contains data. |
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.
- Tippe den Code in den LMC (nicht copy-paste).
- Schreibe die beiden Zahlen, die du addieren möchtest, am richtigen Ort in den Speicher.
- Führe das Programm wiederholt aus. Verfolge genau, was wann passiert:
- Beobachte den Instruktionszyklus.
- Stelle sicher, dass du alles verstehst.
- Schreibe den Code so um, dass nun vier Zahlen addiert werden können.
Aufgabe 2
Schreibe Assembler-Code, der einen Countdown ausführt:
- eine Zahl wird eingelesen
- wiederholen, solange die Zahl >= 0 ist:
- die Zahl wird ausgeben
- die Zahl wird um 1 verringert
Hinweise:
- mit
DAT 1
kann nach dem eigentlichen Programm eine Zahl (z.B. $1$) in den Speicher geschrieben werden, die dann für die Subtraktion verwendet werden kann. - die Wiederholung benötigt eine Sprung-Instruktion (Branch, Instruktionen 6-8) - welcher ist der richtige?
Aufgaben 3a-f
Löse eine der folgenden Aufgaben; verwende Labels und Branching Instructions.
- Eine Zahl einlesen, mit -1 multiplizieren und ausgeben.
- Countdown: alle Zahlen von der Eingabe bis 0 ausgeben (mit Labels)
- Fibonacci-Zahl für die Eingabe berechnen und ausgeben.
- Zwei Zahlen einlesen, das Produkt ausgeben.
- (Optional) Funktioniert die Lösung auch mit negativen Zahlen?
- Ganzzahldivision
- (* Schwierig *) Schreiben Sie einen Bootloader: Dieser liest ein anderes Programm vom Input und schreibt es in den Speicher. Wenn eine 000 (HALT) gelesen wird, soll das eingelesene Programm ausgeführt werden.