====== Aufgaben A: Instruction Set des LMC ====== In diesem Aufgabenset geht es darum, sich mit dem **Instruction Set vertraut zu machen**. Stelle sicher, dass du es zur Hand hast. Den eigentlichen LMC benötigst du noch *nicht*! ==== Aufgabe A1 ==== Beantworte die Fragen einigermassen ausführlich und in *Deutsch*. Schreibe nicht einfach Text, den du nicht verstehst, aus dem Instruction Set ab. 1) In welcher Sprache ist der Befehl `LDA 42` geschrieben? Was bedeutet er? ++++Lösung| Assemblersprache. Lade die Zahl, die an Speicherposition 42 gespeichert ist, in den Akkumulator. Der Akkumulator ist das Register (ganz kleiner Speicher), in dem das Resultat der letzten Rechnung gespeichert wird. ++++ 2) Was bedeutet `STA 91`? ++++Lösung| Speichere die Zahl, die aktuell im Akkumulator ist, an Speicherposition 91. ++++ 3) In welcher Sprache ist der Befehl `00011 1000011` geschrieben? Was bedeutet er? ++++Lösung| Maschinensprache. In Assemblersprache übersetzt: `STA 67`, ähnlich wie in Aufgabe oben. ++++ 4) Was haben die beiden Befehle `LDA` und `STA` gemeinsam? Was ist der Unterschied? ++++Lösung| Gemeinsamkeit: Beide benötigt man, um Zahlen zwischen Akkumulator uns Speicher austauschen zu können. Unterschied: Die 'Richtung'. * LDA lädt aus Speicher in Akkumulator, STA speichert Wert in Akkumulator in Speicher. * Kurz: * LDA: Speicher -> Akkumulator * STA: Akkumulator -> Speicher ++++ 5) Übersetze von Assemblersprache in Maschinensprache: `BRZ 33` ++++Lösung| `00111 0100001` ++++ 6) Übersetze von Maschinensprache in Assemblersprache: `01000 1010010` ++++Lösung| `BRP 82`. Was genau BRP bedeutet, ist für den Moment egal. Dies schauen wir dann später an. ++++ 7) Was bedeutet `00001 1010101`? ++++Lösung| Addiere (`00001` bedeutet `ADD`) den Wert, der an Speicheradresse 1010101 (also 85) steht, zu dem Wert, der bereits im Akkumulator steht. ++++ 8) Subtrahiere von der Zahl, die aktuell im Akkumulator steht diejenige Zahl, die an Speicheradresse 55 steht. Vereinfacht: (Akkumulator) - (Wert an Speicheradresse 55). Schreibe die zugehörige Zeile Assemblercode? ++++Lösung| SUB 55 ++++ ==== Aufgabe A2 ==== Das Instruction Set des LMC ist sehr kurz, es beinhaltet insgesamt nur 11 verschiedene Befehle. Diejenigen für moderne CPUs sind deutlich umfangreicher. Vielleicht ist dir aufgefallen, dass im Instruction Set des LMC nur die beiden mathematischen Operationen `ADD` $(+)$ und `SUB` $(-)$ vorkommen. Heisst dies, dass man nicht multiplizieren kann? ++++Lösung Teil I| Nein. Es ist problemlos möglich, Zahlen zu multiplizieren, man muss einfach einen kleinen Trick anwenden. Welchen? ++++ ++++Lösung Teil II| Die Multiplikation ist nichts anderes, als eine Reihe von Additionen: $$5 \cdot 7 = 5 + 5 + 5 + 5 + 5 + 5 + 5$$ Um zu Multiplizieren muss man also einfach mehrfach hintereinander Addieren. Wie kann man eine solche mehrfaches Addition umsetzen im LMC? Welche Befehle verwendet man dafür? Notiere einfach die grobe Idee und *nicht* den zugehörigen Assemblercode. ++++ ++++Lösung Teil III| Man benötigt eine *Schleife / Loop*. Die Idee ist, dass man die erste Addition durchführt und nachher wieder zurückspringt usw. Sobald man die Addition genug oft wiederholt hat, springt man nicht mehr zurück. Dafür benötigt man die "Branch-"Befehle (`BRA, BRZ, BRP`). Wir werden uns etwas später genauer mit diesen beschäftigen. ++++ ==== Zusatzaufgabe ==== Im Zusammenhang mit Computern liest man oft die Begriffe x86, x64 oder ARM. Was bedeuten diese? ++++Lösung (LP ONLY)| Sind unterschiedliche Befehlssatzarchitekturen (Instruction set architectures). Somit Schnittstelle zw. Software und Hardware. ++++