Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.
| Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
| gf_informatik:assembler [2023-05-11 13:34] – [Aufgaben 3a-f] hof | gf_informatik:assembler [2025-01-05 08:34] (aktuell) – gelöscht hof | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== Assembler ====== | ||
| - | |||
| - | Der Grossteil der Informationen findest du in den Slides. Unten findest du primär Aufträge und Links. | ||
| - | |||
| - | {{ : | ||
| - | |||
| - | [[https:// | ||
| - | ===== Little Man Computer ===== | ||
| - | |||
| - | [[https:// | ||
| - | |||
| - | [[https:// | ||
| - | |||
| - | |||
| - | ==== 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, | ||
| - | <code asm> | ||
| - | LDA 97 | ||
| - | ADD 98 | ||
| - | STA 99 | ||
| - | OUT | ||
| - | HLT | ||
| - | </ | ||
| - | |||
| - | Arbeite in 2er-Gruppe. | ||
| - | |||
| - | 1. Tippe den Code in den LMC (nicht copy-paste). | ||
| - | 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 ==== | ||
| - | |||
| - | Schreibe Assembler-Code, | ||
| - | * eine Zahl wird eingelesen | ||
| - | * wiederholen, | ||
| - | * 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? | ||
| - | |||
| - | <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 ==== | ||
| - | 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 ***) 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. | ||