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_sca [2022-06-29 08:50] – [Aufgabe 3: Schleifen] sca | gf_informatik:assembler_sca [2023-08-01 15:35] (aktuell) – [Instruction Set] sca | ||
---|---|---|---|
Zeile 13: | Zeile 13: | ||
- | ==== 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 ===== | ===== Aufgaben ===== | ||
Zeile 53: | Zeile 38: | ||
==== Aufgabe 2: Schleifen ==== | ==== Aufgabe 2: Schleifen ==== | ||
- | Nun wollen wir **Schleifen** (ähnlich wie *while* in Python) in Assembler programmieren. Bei einer solchen wird eine *Bedingung* überprüft. Je nachdem, ob diese erfüllt ist, *springt* der Code dann wieder zurück. Dazu verwenden wir die **Sprung-Instruktionen** (**Branch**) in Assembler. | + | Nun wollen wir **Schleifen** (ähnlich wie *while* in Python) in Assembler programmieren. Bei einer solchen wird eine *Bedingung* überprüft. Je nachdem, ob diese erfüllt ist, *springt* der Code dann wieder zurück. Dazu verwenden wir die **Sprung-Instruktionen** (**Branch**) in Assembler. |
- | Mit diesen kann man an einen Belie aktuelle Wert im // | + | |
<code asm> | <code asm> | ||
... | ... | ||
- | LOOP ... // here loop starts | + | LOOP ... // here loop starts |
... | ... | ||
- | BRP LOOP // if accumulator is >= 0, jump to LOOP | + | BRP LOOP // if accumulator is >= 0, jump to LOOP (can also use different name) |
... | ... | ||
</ | </ | ||
- | Schreibe Assembler-Code, | + | 1. Studiere im Manual die **Sprung-Instruktionen** BRA, BRZ, BRP |
- | | + | |
- | | + | 1. eine Zahl wird eingelesen |
- | | + | 1. wiederholen, |
- | | + | 1. die Zahl wird ausgeben |
+ | 1. die Zahl wird um 1 verringert | ||
- | Hinweise: | + | **Hinweise:** |
- | * mit `ONE 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. | + | * Mit `ONE 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. |
+ | * Welche **Sprung-Instruktion** musst du hier verwenden? | ||
- | < | + | < |
++++Lösung: | ++++Lösung: | ||
<code asm> | <code asm> | ||
Zeile 86: | Zeile 72: | ||
</ | </ | ||
- | ==== Aufgabe | + | ==== Aufgabe |
- | Nun wollen wir ein einfaches | + | Nun wollen wir einfache **Verzweigungen** (entspricht |
<code asm> | <code asm> | ||
Zeile 101: | Zeile 87: | ||
1. Schreibe ein Assembler-Programm, | 1. Schreibe ein Assembler-Programm, | ||
- | ==== Aufgaben | + | |
+ | <nodisp 2> | ||
+ | ++++Lösung: | ||
+ | <code asm> | ||
+ | </ | ||
+ | ++++ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Aufgaben | ||
Löse eine der folgenden Aufgaben; verwende Labels und Branching Instructions. | Löse eine der folgenden Aufgaben; verwende Labels und Branching Instructions. | ||