Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:assembler [2022-06-22 07:09] – [Assembler] hofgf_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. 
- 
-{{ :gf_informatik:2021_22_assembler_i.pdf |}} 
- 
-[[https://kantonsschuleromanshorn.sharepoint.com/:p:/s/FSInformatik/Ec-axk2h40FKok8pEbV4Ku4B-J6070APuLhi3usmMW_8yQ?e=cfU1Xe&nav=eyJzSWQiOjI2MywiY0lkIjoxOTA1MzAzMjc2fQ|Slides Branching / Labels]] 
-===== Little Man Computer ===== 
- 
-[[https://peterhigginson.co.uk/lmc/|Little Man Computer Simulation]] 
- 
-[[https://peterhigginson.co.uk/lmc/help.html|Little Man Computer Help]] 
- 
- 
-==== 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, welches zwei Zahlen, welche im Code gespeichert sind, addiert: 
-<code asm> 
-        LDA 97 
-        ADD 98 
-        STA 99 
-        OUT 
-        HLT 
-</code> 
- 
-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, der einen Countdown ausführt: 
-  * eine Zahl wird eingelesen 
-  * wiederholen, solange die Zahl >= 0 ist: 
-    * 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. 
-</code> 
-++++ 
-</nodisp> 
- 
-==== 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 ***) Schreiben Sie 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.​ 
  
  • gf_informatik/assembler.1655881764.txt.gz
  • Zuletzt geändert: 2022-06-22 07:09
  • von hof