Aufgaben D: Branch mit LMC
Aufgabe D1: It's the final countdown
Ziel: einen Countdown ($10$ bis $0$) mit dem LMC programmieren.
Dokumentiere die Aufgabe auf OneNote. Mache dazu eine neue Seite.
1) Programmiere zuerst den Countdown mit Python mit einer while-Schleife. Es sollen also einfach der Reihe nach die Zahlen von $10$ bis $0$ ausgegeben werden. Füge den Code als Screenshot in die Dokumentation ein.
2) Notiere in deiner Dokumentation: Mache einen Plan, wie du das mit dem LMC umsetzen willst. Welchen der drei Branch-Befehle verwendest du?
3) Programmiere den Countdown mit LMC. Der Output soll also sein:
Screenshot in Dokumentation einfügen.
4) Am Code von der letzten Aufgabe ist etwas sehr mühsam: Man muss immer zuerst die beiden Zahlen (Startwert $10$ und Schrittgrösse $1$) von Hand in den Speicher schreiben. Ansonsten gibt der Code keinen Countdown aus. Hier gibt es einen Ausweg: Mithilfe des Keywords DAT
kann man Daten über den Assemblercode in den Speicher schreiben, z.B.:
... HLT FIVE DAT 5
Im RAM wird dann direkt nach dem 000
von HLT
der Wert $5$ gespeichert. Auf die Adresse von Wert $5$ kann man dann über den angegebenen Namen, also hier FIVE
zugreifen, z.B. ADD FIVE
.
Passe deinen Countdown-Code an, indem du die beiden benötigten Werten (Startwert & Schrittweite) auf diese Weise speicherst und verwendest. Screenshot in Dokumentation einfügen.
5) Im Befehl BRP 1
geben wir an, dass wir (falls Akkumulator $\ge 0$) zu Zeile $1$ des Programms springen wollen. Diese Notation wird bei etwas komplexeren Codes schnell mühsam. Denn wenn sich der Code ändert, ändern sich auch die Zeilenreferenzen. Passt man also seinen Code an, muss man ständig die Zeilenreferenzen überprüfen und gegebenenfalls anpassen. Dieses Problem umgehen kann man mit Sprung-Instruktionen:
Kennzeichne eine Zeile Code, du der du springen möchtest, mit einem Keyword, z.B. wird Zeile 1 im Code hier von OUT
zu LOOP OUT
. Mit <Befehl> LOOP
können wir nun jederzeit zu dieser Zeile Code springen, auch wenn sich ihre Position verschiebt. Anstelle von LOOP
kann man natürlich jedes beliebige Wort verwenden.
Implementiere dies in deinem Code. Screenshot in Dokumentation einfügen.
Aufgabe D2: Maximum
Ziel: Die Benutzerin soll nacheinander zwei Zahlen eingeben. Es soll dann die grössere der beiden Zahlen ermittelt und ausgegeben werden.
1) Programmiere das Programm zuerst mit Python. Verwende dazu eine if-else-Verzweigung.
2) Mache einen Plan: Wie kannst du das Programm mit dem LMC schreiben?
3) Implementiere es mit dem LMC.
Aufgabe D3: 3er-Reihe
Ziel: Der Benutzer soll eine Zahl $n$ eingeben. Es werden dann die ersten $n$ Zahlen der 3-er Reihe ausgegeben: $3,6,9,\ldots$.
1) Programmiere das Programm zuerst mit Python. Dabei dürfen nur die mathematischen Operationen $+$ und $-$ verwendet werden.
2) Mache einen Plan: Wie kannst du das Programm mit dem LMC schreiben?
3) Implementiere es mit dem LMC.