Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
gf_informatik:assembler:aufgaben_c [2024-05-28 06:20] – angelegt hof | gf_informatik:assembler:aufgaben_c [2024-05-31 15:40] (aktuell) – hof | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ===== Aufgaben C ===== | + | ====== Aufgaben C: Instruktionszyklus ====== |
- | ==== Aufgabe | + | ==== Aufgabe |
- | Betrachte | + | <nodisp 2> |
- | < | + | |
+ | ++++Bemerkung LP| | ||
+ | |||
+ | <color blue> | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | </ | ||
+ | |||
+ | 1. Kopiere | ||
+ | 1. Füge es auf einer leeren Seite in OneNote ein. | ||
+ | 1. Schreibe zu jedem der drei Schritte des Instruktionszyklus eine kurze Zusammenfassung *in eigenen Worten*. | ||
+ | |||
+ | {{ :gf_informatik: | ||
+ | |||
+ | Oder als PDF zum herunterladen und ausdrucken: {{ : | ||
+ | |||
+ | ++++Lösungen| | ||
+ | |||
+ | Siehe Slides. | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | ==== Aufgabe C2 ==== | ||
+ | |||
+ | In den Slides haben wir den ersten Durchgang des Instruktionszyklus für das Programm unten genau angeschaut. | ||
+ | |||
+ | < | ||
LDA 97 | LDA 97 | ||
ADD 98 | ADD 98 | ||
Zeile 12: | Zeile 39: | ||
</ | </ | ||
- | Arbeite in 2er-Gruppe. | + | 1. Führe dieses Programm nun mit dem LMC aus. Lasse die Simulation mit relativ langsamer Geschwindigkeit laufen: OPTIONS / ' |
+ | 1. Versuche für jede Programmzeile den Instruktionszyklus nachvollziehen zu können. Du sollst zu jedem Zeitpunkt wissen, bei welchem Schritt sich der Zyklus gerade befindet. | ||
- | 1. Tippe den Code in den LMC (nicht copy-paste). | + | ==== Aufgabe C3 ==== |
- | 1. Schreibe die beiden Zahlen, die du addieren möchtest, am richtigen Ort in den Speicher. | + | |
- | 1. Führe das Programm wiederholt aus. Verfolge genau, was wann passiert: | + | |
- | 1. Beobachte den Instruktionszyklus. | + | |
- | 1. Stelle sicher, dass du alles verstehst. | + | |
- | 1. Schreibe den Code so um, dass nun **vier Zahlen addiert** werden können. | + | |
- | ==== Aufgabe 2 ==== | + | Möchte man ein Programm schreiben, kann man eine Programmiersprache wie Python wählen, oder man kann das Programm direkt in Assemblersprache schreiben. Beides hat Vor- und Nachteile. Notiere für die beiden Arten der Programmierung die jeweiligen Vorteile: |
- | Schreibe Assembler-Code, | + | * **Vorteile Programmiersprache (z.B. Python)** |
- | | + | * **Vorteile Assemblersprache** |
- | | + | |
- | | + | |
- | * die Zahl wird um 1 verringert | + | |
- | Hinweise: | + | <nodisp 2> |
- | * 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 | + | ++++Lösungen (nur LP)| |
+ | |||
+ | | ||
+ | | ||
- | <nodisp 1> | ||
- | ++++Lösung: | ||
- | <code asm> | ||
- | 0 INP | ||
- | 1 OUT | ||
- | 2 SUB 5 // Subtrahiert 1 (s. DAT-Instruktion) | ||
- | 3 BRP 1 // Springe zurück zu Zeile 1, wenn der Accumulator 0 oder positiv ist. | ||
- | 4 HLT | ||
- | 5 DAT 1 // Schreibt die gewünschte Zahl in den Speicher. | ||
- | </ | ||
++++ | ++++ | ||
+ | |||
</ | </ | ||
- | ==== Aufgaben 3a-f ==== | + | ==== Aufgabe C4 ==== |
- | Löse eine der folgenden | + | |
- | - Eine Zahl einlesen, mit -1 multiplizieren und ausgeben. | + | Schreibe die folgenden |
- | - Countdown: alle Zahlen von der Eingabe bis 0 ausgeben (mit Labels) | + | |
- | - Fibonacci-Zahl für die Eingabe berechnen und ausgeben. | + | === I) Verdoppler === |
- | - Zwei Zahlen einlesen, | + | |
- | | + | Die Benutzerin soll eine Zahl eingeben können. Der Code berechnet |
- | - Ganzzahldivision | + | |
- | - (*** Schwierig ***) Schreibe 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. | + | ++++Lösung |
+ | |||
+ | < | ||
+ | INP | ||
+ | STA 99 | ||
+ | ADD 99 | ||
+ | OUT | ||
+ | HLT | ||
+ | </ | ||
+ | |||
+ | ++++ | ||
+ | |||
+ | === II) 3xAddition === | ||
+ | |||
+ | Die Benutzerin soll hintereinander drei Zahlen eingeben können. Der Code berechnet deren Summe und gibt sie aus. | ||
+ | |||
+ | ++++Lösung | ||
+ | |||
+ | < | ||
+ | INP | ||
+ | STA 98 | ||
+ | INP | ||
+ | STA 99 | ||
+ | INP | ||
+ | ADD 98 | ||
+ | ADD 99 | ||
+ | OUT | ||
+ | HLT | ||
+ | </ | ||
+ | |||
+ | ++++ | ||