Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

gf_informatik:assembler:aufgaben_c [2024-05-28 06:20] – angelegt hofgf_informatik:assembler:aufgaben_c [2024-05-31 15:40] (aktuell) 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 Slides. 
 + 
 +++++ 
 + 
 +==== 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 werdendie dann für die Subtraktion verwendet werden kann. + 
-  die Wiederholung benötigt eine Sprung-Instruktion (BranchInstruktionen 6-8) - welcher ist der richtige?+++++Lösungen (nur LP)| 
 + 
 +   **Vorteile Programmiersprache (z.B. Python):** einfacherschneller zum Programmieren 
 +   **Vorteile Assemblersprache:** keinerlei Einschränkungenvolle Kontrolle, alles was theoretisch machbar ist mit CPU, kann man umsetzen
  
-<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> </nodisp>
  
-==== Aufgaben 3a-f ==== +==== Aufgabe C4 ==== 
-Löse eine der folgenden Aufgaben; verwende Labels und Branching Instructions. + 
-    - Eine Zahl einlesen, mit -1 multiplizieren und ausgeben.​ +Schreibe die folgenden einfachen Programme in Assemblersprache: 
-    - Countdown: alle Zahlen von der Eingabe bis 0 ausgeben (mit Labels+ 
-    - Fibonacci-Zahl für die Eingabe berechnen und ausgeben.​ +=== IVerdoppler === 
-    - Zwei Zahlen einlesen, das Produkt ausgeben + 
-      (**Optional**Funktioniert die Lösung auch mit negativen Zahlen?​ +Die Benutzerin soll eine Zahl eingeben könnenDer Code berechnet das Doppelte dieser Zahl und gibt sie aus
-    - Ganzzahldivision​ + 
-    - (*** Schwierig ***Schreibe einen Bootloader: Dieser liest ein anderes Programm vom Input und schreibt es in den SpeicherWenn eine 000 (HALTgelesen wird, soll das eingelesene Programm ausgeführt werden.​+++++Lösung (nur LP)| 
 + 
 +<code> 
 +        INP 
 +        STA 99 
 +        ADD 99 
 +        OUT 
 +        HLT 
 +</code> 
 + 
 +++++ 
 + 
 +=== II3xAddition === 
 + 
 +Die Benutzerin soll hintereinander drei Zahlen eingeben können. Der Code berechnet deren Summe und gibt sie aus. 
 + 
 +++++Lösung (nur LP)
 + 
 +<code> 
 +        INP 
 +        STA 98 
 +        INP 
 +        STA 99 
 +        INP 
 +        ADD 98 
 +        ADD 99 
 +        OUT 
 +        HLT 
 +</code> 
 + 
 +++++
  
  • gf_informatik/assembler/aufgaben_c.1716877245.txt.gz
  • Zuletzt geändert: 2024-05-28 06:20
  • von hof