Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:assembler:aufgaben_c [2024-05-28 06:20] – angelegt hofgf_informatik:assembler:aufgaben_c [2026-06-11 09:15] (aktuell) – [II) 3xAddition] hof
Zeile 1: Zeile 1:
-===== Aufgaben C =====+====== Aufgaben C: Instruktionszyklus ======
  
-==== Aufgabe ====+==== Aufgabe C1 ====
  
-Betrachte das einfache Assemblerprogrammwelches zwei Zahlen, welche im Code gespeichert sind, addiert+<nodisp 2> 
-<code asm>+ 
 +++++Bemerkung LP| 
 + 
 +<color blue>Alternativ: Kann ausdrucken für SuS</color> 
 + 
 +++++ 
 + 
 +</nodisp> 
 + 
 +   1. Kopiere das Bild unten / lade es herunter. Wichtig: Klicke zuerst mehrfach daraufbis es volle Grösse hat. 
 +   1. Füge es auf einer leeren Seite in OneNote ein. 
 +   1. Schreibe zu jedem der drei Schritte des Instruktionszyklus eine kurze Zusammenfassung *in eigenen Worten*. 
 + 
 +{{ :gf_informatik:computerarchitektur_sca:vn_instructioncycle_blanks.png?500 |}} 
 + 
 +Oder als PDF zum herunterladen und ausdrucken: {{ :gf_informatik:computerarchitektur_sca:von_neumann_zyklus_leer.pdf |}} 
 + 
 +++++Lösungen| 
 + 
 +Siehe {{ :gf_informatik:computerarchitektur.pdf | Slides Computerarchitektur / LMC }} 
 + 
 +++++ 
 + 
 +==== Aufgabe C2 ==== 
 + 
 +In den Slides haben wir den ersten Durchgang des Instruktionszyklus für das Programm unten genau angeschaut. 
 + 
 +<code assembler>
         LDA 97         LDA 97
         ADD 98         ADD 98
Zeile 12: Zeile 39:
 </code> </code>
  
-Arbeite in 2er-Gruppe.+   1. Führe dieses Programm nun mit dem LMC aus. Lasse die Simulation mit relativ langsamer Geschwindigkeit laufen: OPTIONS / 'default slow' oder 'default normal' oder mit '<<' und '>>' Tempo verändern. 
 +   1. Versuche für jede Programmzeile den Instruktionszyklus nachvollziehen zu können. Du sollst zu jedem Zeitpunkt wissen, bei welchem Schritt sich der Zyklus gerade befindet.
  
-   1. Tippe den Code in den LMC (nicht copy-paste). +==== Aufgabe C3 ====
-   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 ====+Möchte man ein Programm schreiben, kann man eine Programmiersprache wie Python wählen, oder man kann das Programm direkt in Assemblersprache schreiben. Beides hat Vor- und Nachteile. Notiere für die beiden Arten der Programmierung die jeweiligen Vorteile:
  
-Schreibe Assembler-Code, der einen Countdown ausführt: +   * **Vorteile Programmiersprache (z.B. Python)** 
-  eine Zahl wird eingelesen +   * **Vorteile Assemblersprache**
-  wiederholen, solange die Zahl >= 0 ist: +
-    die Zahl wird ausgeben  +
-    die Zahl wird um 1 verringert+
  
-Hinweise: +<nodisp 2>
-  * 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ösungen (nur LP)| 
-++++Lösung:+ 
-<code asm+   * **Vorteile Programmiersprache (z.B. Python):** einfacher, schneller zum Programmieren 
-       INP +   * **Vorteile Assemblersprache:** keinerlei Einschränkungen, volle Kontrolle, alles was theoretisch machbar ist mit CPU, kann man umsetzen 
-       OUT + 
-       SUB 5    // Subtrahiert 1 (s. DAT-Instruktion) +++++ 
-       BRP 1    // Springe zurück zu Zeile 1, wenn der Accumulator 0 oder positiv ist. + 
-       HLT  +</nodisp
-5        DAT 1    // Schreibt die gewünschte Zahl in den Speicher.+ 
 +==== Aufgabe C4 ==== 
 + 
 +Schreibe die folgenden Programme in Assemblersprache: 
 + 
 +=== I) Verdoppler === 
 + 
 +Die Benutzerin soll eine Zahl eingeben können. Der Code berechnet das Doppelte dieser Zahl und gibt sie aus. 
 + 
 +<nodisp 2
 +++++Lösung (nur LP)| 
 + 
 +<code> 
 +        INP 
 +        STA 99 
 +        ADD 99 
 +        OUT 
 +        HLT
 </code> </code>
 +
 +++++
 +</nodisp>
 +
 +=== II) 3xAddition ===
 +
 +Die Benutzerin soll hintereinander drei Zahlen eingeben können. Der Code berechnet deren Summe und gibt sie aus.
 +
 +<nodisp 2>
 +
 +++++Lösung (nur LP)|
 +
 +<code>
 +        INP
 +        STA 98
 +        INP
 +        STA 99
 +        INP
 +        ADD 98
 +        ADD 99
 +        OUT
 +        HLT
 +</code>
 +
 ++++ ++++
 </nodisp> </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 ***) 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.​ 
  
  • gf_informatik/assembler/aufgaben_c.1716877245.txt.gz
  • Zuletzt geändert: 2024-05-28 06:20
  • von hof