====== Aufgaben B: Erste Programme mit LMC ====== In diesem Aufgabenset wollen wir nun erste Baby Steps mit dem LMC machen und erste, ganz einfache Progrämmchen schreiben. Stelle auch wieder sicher, dass du das Instruction Set zur Hand hast. [[https://peterhigginson.co.uk/lmc/|Little Man Computer Simulation]] [[https://peterhigginson.co.uk/lmc/help.html|Little Man Computer Help]] ==== Aufgabe B1: Addition ==== Ziel ist, zwei Zahlen zu addieren. 1) Schreibe dazu mit der Tastatur zwei Zahlen an zwei unterschiedliche Speicheradressen wie im Beispiel unten. Verwende dafür Speicheradressen im hinteren Bereich (Warum? -> später). Beispiel: Zahlen $30$ und $12$ wurden an Speicheradressen $54$ und $55$ gespeichert. Es ist irrelevant, ob die beiden Adressen direkt beieinander liegen oder nicht. {{:gf_informatik:lmc_zahlen_im_speicher.png?nolink&200|}} 2) Mit den Befehlen, die du im Aufgabenset A angetroffen hast, solltest du nun in der Lage sein, den zugehörigen Assemblercode zu schreiben. Notiere aber zuerst in Worten einen Plan, wie der Code grob aussehen soll (noch *kein* Assemblercode). ++++Lösung| Plan: 1. Lade Zahl an der einen Speicheradresse in Akkumulator. 1. Addiere nun Zahl an der anderen Speicheradresse dazu. ++++ 3) Schreibe nun den zugehörigen Assemblercode. **Achtung:** Nachdem du den Code geschrieben hast und "Submit" drückst, wird der Code in den Speicher geschrieben. Dementsprechend werden die Werte, die du bei 1) in den Speicher geschrieben hast, überschrieben und du musst sie neu eintippen. ++++Lösungen| LDA 54 ADD 55 HLT Beachte: Ein Programm muss immer mit dem Befehl `HLT` abgeschlossen werden. Damit trennt man den Programmcode von den Daten im Speicher. Auf dies wird in den Slides genauer eingegangen. ++++ 4) Führe den Code nun aus: In Codefenster kopieren / Submit / RUN. *Tipps:* * Falls es dir zu langsam geht: OPTIONS / Default fast * Klicke RESET bevor du den Code wieder laufen lässt. 5) Das Resultat sollte jetzt im *Akkumulator* stehen. Schön wäre es, wenn dieses im OUTPUT-Fenster stehen würde. Füge die entsprechende Zeile Code hinzu. ++++Lösungen| LDA 54 ADD 55 OUT HLT ++++ 6) Zusätzlich soll nun das Resultat an einer freien Stelle im Speicher gespeichert werden. Füge die entsprechende Zeile Code hinzu. ++++Lösungen| LDA 54 ADD 55 OUT STA 56 HLT ++++ ==== Aufgabe B2: Subtraktion ==== Programm: 1. Die Benutzerin soll nacheinander zwei Zahlen im Input-Feld eingeben können. 1. Die beiden Zahlen werden dann voneinander subtrahiert und zwar (erste Zahl) - (zweite Zahl). 1. Das Resultat wird im Speicher gespeichert und ausgegeben. Auftrag: 1. Mache einen Programmierplan: Wie kannst du das Programm oben umsetzen? Überlege dir selber, vergleiche dann mit Lösung 1. 1. Schreibe folgendes Programm mit dem LMC: ++++Lösung 1| 1. Zuerst müssen Zahlen eingegeben werden. Mithilfe des Instruction Sets findest du heraus, wie das geht. 1. Die eingegebenen Zahlen müssen im RAM zwischengespeichert werden. 1. Danach ähnlich wie bei Addition: 1. erste Zahl von Speicher einlesen 1. zweite Zahl subtrahieren 1. Resultat speichern und ausgeben. 1. Programm beenden. Vielleicht fragst du dich, warum man die Zahlen **zwischenspeichern** muss und sie nach der Eingabe nicht direkt einlesen kann? Hier die Antwort: Verwendet man den Input Befehl, wird die Eingabe direkt in den Akkumulator geschrieben. Der vorherige Wert wird also überschrieben. Würde man rechnen (zweite Zahl) - (erste Zahl), so müsste man deshalb nur die erste Zahl zwischenspeichern. Da man die Subtraktion aber anders herum machen möchte, muss man beide zwischenspeichern. ++++ ++++Lösung 2| INP STA 97 INP STA 98 LDA 97 SUB 98 OUT STA 99 HLT ++++