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:41] – 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 51: | Zeile 36: | ||
| 1. Schreibe den Code so um, dass nun **vier Zahlen addiert** werden können. | 1. Schreibe den Code so um, dass nun **vier Zahlen addiert** werden können. | ||
| - | ==== Aufgabe 2: Verzweigungen | + | ==== Aufgabe 2: Schleifen |
| - | Nun wollen wir ein einfaches | + | Nun wollen wir **Schleifen** (ähnlich wie *while* in Python) |
| <code asm> | <code asm> | ||
| ... | ... | ||
| - | BRP JMP // if accumulator is zero or positive, jump to line marked with JMP | + | LOOP ... // here loop starts |
| ... | ... | ||
| - | JMP ... | + | BRP LOOP // if accumulator is >= 0, jump to LOOP (can also use different name) |
| ... | ... | ||
| </ | </ | ||
| - | 1. Studiere im Manual die Befehle | + | 1. Studiere im Manual die **Sprung-Instruktionen** |
| - | 1. Schreibe | + | 1. Schreibe Assembler-Code, der einen **Countdown** ausführt (siehe unten): |
| + | 1. eine Zahl wird eingelesen | ||
| + | 1. wiederholen, | ||
| + | 1. die Zahl wird ausgeben | ||
| + | 1. die Zahl wird um 1 verringert | ||
| - | ==== Aufgabe 3: Schleifen ==== | + | **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. | ||
| + | * Welche **Sprung-Instruktion** musst du hier verwenden? | ||
| - | Nun wollen wir **Schleifen** (ähnlich wie *while* in Python) in Assembler programmieren. | + | <nodisp 2> |
| + | ++++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. | ||
| + | </ | ||
| + | ++++ | ||
| + | </ | ||
| + | |||
| + | ==== Aufgabe 3: Verzweigungen ==== | ||
| + | |||
| + | Nun wollen wir einfache | ||
| <code asm> | <code asm> | ||
| ... | ... | ||
| - | LOOP ... // here loop starts (can also use other name) | + | BRP JMP // if accumulator is zero or positive, jump to line marked with JMP |
| ... | ... | ||
| - | BRP LOOP // if accumulator is >= 0, jump to LOOP | + | JMP ... |
| ... | ... | ||
| </ | </ | ||
| - | Schreibe Assembler-Code, der einen Countdown ausführt: | + | 1. Studiere im Manual die Befehle BRA, BRZ, BRP |
| - | * eine Zahl wird eingelesen | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | 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. | ||
| - | < | + | < |
| ++++Lösung: | ++++Lösung: | ||
| <code asm> | <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 | + | |
| + | ==== Aufgaben | ||
| Löse eine der folgenden Aufgaben; verwende Labels und Branching Instructions. | Löse eine der folgenden Aufgaben; verwende Labels und Branching Instructions. | ||