4.2 Aufgaben zum Kapitel Prozessoren und ihre Befehle

[unmarkierte Version][unmarkierte Version]
Zeile 5: Zeile 5:
<p>
<p>
<loop_area type="task">
<loop_area type="task">
<loop_task title="">
<loop_task title="ADD im Einadressformat">
<p>
<p>
Der Assembler-Befehl ADD benötigt für seine Ausführung zwei Werte, welche addiert werden sollen. Wird dieser Befehl im Einadressformat angegeben, so wird nur ein Operand angegeben. Über diesen einen Operanden bekommt der ADD-Befehl also einen der beiden zu addierenden Werte.
Der Assembler-Befehl ADD benötigt für seine Ausführung zwei Werte, welche addiert werden sollen. Wird dieser Befehl im Einadressformat angegeben, so wird nur ein Operand spezifiziert. Über diesen einen Operanden bekommt der ADD-Befehl also einen der beiden zu addierenden Werte.
</p>
</p>
<p>
<p>
Zeile 14: Zeile 14:
<p>
<p>
Wohin schreibt der ADD-Befehl (im Einadressformat) sein berechnetes Ergebnis?
Wohin schreibt der ADD-Befehl (im Einadressformat) sein berechnetes Ergebnis?
</p>
</loop_task>
</loop_area>
</p>
<br />
== Aufgabe 2 ==
<p>
<loop_area type="task">
<loop_task title="Dreiadressformat">
<p>
Werden Assembler-Befehle im Dreiadressformat angegeben, so definiert die Reihenfolge der anzugebenden Operanden ihre jeweilige Bedeutung.
</p>
<p>
Erläutere diese Bedeutung anhand eines selbstgewählten Beispiels!
</p>
</loop_task>
</loop_area>
</p>
<br />
== Aufgabe 3 ==
<p>
<loop_area type="task">
<loop_task title="Entwicklung eines Befehlssatzes">
<p>
Ein kompletter Befehl (Opcode und Operand) vom Typ NOOP, LOAD, STORE, ADD, SUB, EQUAL, JUMP und HALT besteht derzeit (wie im [http://youtu.be/cX5XLc9e_g4 Video] erläutert) aus insgesamt 16 Bit, wobei die ersten sechs Bit als Reserve nicht genutzt werden.
</p>
<p>
Entwickle einen Befehlssatz,
* der maximal 256 Befehle umfassen kann, aber zunächst nur die bereits bekannten Befehle NOOP, LOAD, STORE, ADD, SUB, EQUAL, JUMP und HALT definiert,
* der maximal 64 Steueroptionen unterscheiden kann,
** bislang waren es nur zwei Steueroptionen, siehe <Num> im [http://youtu.be/cX5XLc9e_g4 Video],
** die hier angegebene Anzahl ist "''insgesamt für den Befehl''" gemeint, und '''nicht''' "''pro Operand''",
* der je sechs Bit für die Adressierung von <Ergebnis>, <Operand1> und <Operand2> vorsieht ([[Dreiadressformat]]),
* dessen Befehlslänge ein Vielfaches von acht Bit sein soll.
</p>
<p>
Aus wie vielen Bit besteht damit ein kompletter Befehl (Opcode und Operand) dieses neuen Befehlssatzes mindestens?
</p>
<p>
Gebe das [http://courses.cs.vt.edu/csonline/MachineArchitecture/Lessons/CPU/ SUM-Program] aus dem [http://youtu.be/cX5XLc9e_g4 Video] damit an! Herauskommen sollte eine Übersicht wie diese, angepasst an den neuen Befehlssatz:
</p>
<p>
<loop_figure title="Abbildung zu Aufgabe 1" description="" copyright="CC-BY" index=true show_copyright=true>[[Datei:Aufgabe_befehlssatz.jpg]]</loop_figure></p>
<p>
Erwartet wird also, dass das SUM-Programm sowohl in Maschinensprache (Einsen und Nullen!), als auch in Assembler angegeben wird. Der Additionsbefehl mit drei Operanden könnte in Assembler so aussehen:
</p>
<p>
'''ADD''' ACC, ACC, 14
</p>
<p>
"ACC" bezeichnet das Register Akkumulator, die Bedeutung des Befehls ist damit: ''Addiere den im Akkumulutar gespeicherten Wert und den in Speicherzelle 14 gespeicherten Wert, und lege das Ergebnis im Akkumulator ab''.
</p>
<p>
Wie löst du das Problem, dass in der binären Codierung (Maschinensprache) unterschieden werden muss, ob ein Operand ein Register, eine Speicherzelle oder gar einen konkreten Wert bezeichnet? (Stichwort: # im [http://youtu.be/cX5XLc9e_g4 Video]. Falls du hier Hilfe benötigst, so diskutiere Lösungsansätze in deiner Lerngruppe!)
</p>
</loop_task>
</loop_area>
</p>
<br />
== Aufgabe 4 ==
<p>
<loop_area type="task">
<loop_task title="Adressierungen des Hauptspeichers">
<p>
Erläutere für den Zugriff auf den Hauptspeicher (Speicherwerk) die Unterschiede zwischen der effektiven Adresse und der indizierten Adressierung mit Verschiebung.
</p>
</loop_task>
</loop_area>
</p>
<br />
== Aufgabe 5 ==
<p>
<loop_area type="task">
<loop_task title="Adressierungsarten">
<p>
Welche Bedeutungen haben die folgenden Befehle:
* '''ADD''' R1, ACC, 8
* '''SUB''' ACC, 10, (R2)
* '''JUMP''' (R3)
* '''ADD''' ACC, (ACC), #5
</p>
</p>
</loop_task>
</loop_task>
</loop_area>
</loop_area>
</p>
</p>

Version vom 30. Januar 2015, 12:54 Uhr

Aufgaben zum Kapitel Prozessoren und ihre Befehle


Aufgabe 1

Aufgabe

Der Assembler-Befehl ADD benötigt für seine Ausführung zwei Werte, welche addiert werden sollen. Wird dieser Befehl im Einadressformat angegeben, so wird nur ein Operand spezifiziert. Über diesen einen Operanden bekommt der ADD-Befehl also einen der beiden zu addierenden Werte.

Woher bekommt der ADD-Befehl (im Einadressformat) den zweiten zu addierenden Wert?

Wohin schreibt der ADD-Befehl (im Einadressformat) sein berechnetes Ergebnis?


Aufgabe 2

Aufgabe

Werden Assembler-Befehle im Dreiadressformat angegeben, so definiert die Reihenfolge der anzugebenden Operanden ihre jeweilige Bedeutung.

Erläutere diese Bedeutung anhand eines selbstgewählten Beispiels!


Aufgabe 3

Aufgabe

Ein kompletter Befehl (Opcode und Operand) vom Typ NOOP, LOAD, STORE, ADD, SUB, EQUAL, JUMP und HALT besteht derzeit (wie im Video erläutert) aus insgesamt 16 Bit, wobei die ersten sechs Bit als Reserve nicht genutzt werden.

Entwickle einen Befehlssatz,

  • der maximal 256 Befehle umfassen kann, aber zunächst nur die bereits bekannten Befehle NOOP, LOAD, STORE, ADD, SUB, EQUAL, JUMP und HALT definiert,
  • der maximal 64 Steueroptionen unterscheiden kann,
    • bislang waren es nur zwei Steueroptionen, siehe <Num> im Video,
    • die hier angegebene Anzahl ist "insgesamt für den Befehl" gemeint, und nicht "pro Operand",
  • der je sechs Bit für die Adressierung von <Ergebnis>, <Operand1> und <Operand2> vorsieht (Dreiadressformat),
  • dessen Befehlslänge ein Vielfaches von acht Bit sein soll.

Aus wie vielen Bit besteht damit ein kompletter Befehl (Opcode und Operand) dieses neuen Befehlssatzes mindestens?

Gebe das SUM-Program aus dem Video damit an! Herauskommen sollte eine Übersicht wie diese, angepasst an den neuen Befehlssatz:

Aufgabe befehlssatz.jpg

Erwartet wird also, dass das SUM-Programm sowohl in Maschinensprache (Einsen und Nullen!), als auch in Assembler angegeben wird. Der Additionsbefehl mit drei Operanden könnte in Assembler so aussehen:

ADD ACC, ACC, 14

"ACC" bezeichnet das Register Akkumulator, die Bedeutung des Befehls ist damit: Addiere den im Akkumulutar gespeicherten Wert und den in Speicherzelle 14 gespeicherten Wert, und lege das Ergebnis im Akkumulator ab.

Wie löst du das Problem, dass in der binären Codierung (Maschinensprache) unterschieden werden muss, ob ein Operand ein Register, eine Speicherzelle oder gar einen konkreten Wert bezeichnet? (Stichwort: # im Video. Falls du hier Hilfe benötigst, so diskutiere Lösungsansätze in deiner Lerngruppe!)


Aufgabe 4

Aufgabe

Erläutere für den Zugriff auf den Hauptspeicher (Speicherwerk) die Unterschiede zwischen der effektiven Adresse und der indizierten Adressierung mit Verschiebung.


Aufgabe 5

Aufgabe

Welche Bedeutungen haben die folgenden Befehle:

  • ADD R1, ACC, 8
  • SUB ACC, 10, (R2)
  • JUMP (R3)
  • ADD ACC, (ACC), #5