Eigene Makrobefehle

Erweiterung des Befehlssatzes[1]
Bei Mikroprozessoren ist die Menge an Makrobefehlen und ihre Umsetzung im Steuerwerk fest vorgegeben. Man speicht in diesem Zusammenhang auch vom Befehlssatz eines Prozessors. Bei JOHNNY kann man (ähnlich wie bei frühen Großrechnern) allerdings eigene Befehle konstruieren und schauen, ob und wie sie funktionieren.

Aufgabe 1: Ergänzen des Micro-Codes

Finde anhand der JOHNNY-Dokumentation (normalerweise beim Programm dabei) heraus, wie man Folgen von Mikrobefehlen zu einem eigenen Makrobefehl mit selbst gewählten Namen zusammenstellen oder einen bereits bestehenden Befehl in seiner Mikrobefehlsfolge abändern kann.

Aufgabe 2: Optimierung

Betrachte die Folge von Mikrobefehlen zum Makrobefehl TAKE. Du wirst feststellen, dass man diese Folge noch optimieren kann, so dass man einen Schritt bei der Abarbeitung spart. Ändere den Micro-Code entsprechend.

Aufgabe 3: Verdoppeln als eigener Befehl

Angenommen, das Verdoppeln von Zahlen wäre eine sehr sehr wichtige Rechenoperation. Konstruiere einen eigenen Befehl mit Namen DBL zum Verdoppeln einer Zahl an der angegebenen Adresse.

Aufgabe 4: Ein Mehr-Adress-Befehl

Bisher war jeder Befehl alleine in einer Speicherstelle untergebracht, in der Form "OP.ADR". Was auf diese Weise nicht mit einem einzigen Befehl funktionieren kann, ist beispielsweise das Kopieren von Speicherinhalten auf eine andere Adresse. Denn hier müsste der Befehl sowohl die Adresse der zu kopierenden Zahl als auch die Ziel-Adresse kennen, wohin sie kopiert werden soll. Aber auch das lässt sich mit JOHNNY bewältigen, indem man die Zieladresse einfach in die nächste Speicherstelle schreibt.
"Kopiere den Inhalt der Speicherstelle 10 auf die Speicherstelle 15" könnte dann als Programm so aussehen
000: CPY  010
001:      015 
Konstruiere einen Makrobefehl CPY, der dieses Programm sinnvoll zum Laufen bringt.

Aufgabe 5: Konstanten in den Akkumulator laden

Wie wir mehrfach gesehen hatten, lädt der Befehl TAKE eine Zeile des RAM in den Akkumulator, und zwar diejenige Zeile, die durch die Adresse hinter TAKE bestimmt ist. Für manche Anwendungen ist es jedoch hilfreich, wenn man direkt Konstanten in den Akkumulator laden kann. Natürlich kann man das erreichen, dass man die Zahl an eine bestimmte Adresse des RAM setzt und diese dann mit TAKE in den Akkumulator lädt. Aber das wird sehr schnell recht unübersichtlich. Schöner wäre es, wenn es einen Befehl, zum Beispiel TACO (für "TAke COnstant") gäbe, dem man statt einer Adresse im RAM die Konstante direkt mitgeben könnte. Das Problem: Der Adressen bei JOHNNY haben nur drei Stellen, Konstanten können bis zu 5 Stellen haben. Das Problem lässt sich jedoch umgehen, indem man (wie bei Aufgabe 4 auch) einen Befehl über zwei Zeilen des RAM definiert. Die erste Zeile würde also nur den Befehlscode von TACO beinhalten (die Adresse dahinter wäre egal) und in der nächsten Zeile würde dann die Konstante stehen. Realisiere den Befehl TACO, so dass der folgende Programmabschnitt die Zahl 11.015 in den Akkumulator lädt.
000: TACO  000
001:      11.015 

Quellen

X

Fehler melden

X

Suche