TGI Praktikum |
Spezifikation |
Im Feld Op-Code ist der 8 Bit Operationscode des Befehls enthalten. Dieser Op-code ist eine Zahl zwischen 0000 und 1111 und bezeichnet die Adresse im Mikroprogrammspeicher, ab der das Mikroprogramm des entsprechenden Maschinenbefehls steht. (Der Befehl add (Addition zweier Operanden) hat z.B. den Op-code 01). In den Feldern RA und RB werden die Adressen der Operanden eines Befehls angegeben. Im Konstantenfeld kann der Quelloperand im wesentlichen entweder direkt angegeben werden (imm) oder aber es wird die Adresse des Operanden im Hauptspeicher angegeben (addr).
Natürlich müssen in einem Mikroprogramm auch Hauptspeicherzugriffe erfolgen, wobei man sich immer an folgenden Ablauf halten muss:Vor der eigentlichen Spezifikation der Programme sollte man sich nun über mögliche Fehlerfälle und deren Behandlung Gedanken machen.
Nun ist es hilfreich einen Programmentwurf zu erstellen und sich mit Hilfe dessen zu überlegen, welche Standardmaschinenbefehle (gemäß der Beschreibung der Zielarchitektur) für die gewünschte Funktionalität implementiert bzw. welche Befehle selbst entwickelt werden müssen.
Spezifikation von strtolower_1
Ausserdem muß noch berücksichtigt werden, daß die Funktionalität strtolower_1 die deutschen Umlaute "Ä, Ö, Ü" nicht umwandelt.
Tabelle mit Erklärungen zum Ablauf des Mikroprogramms:
HS |
Inhalt |
Was macht der Rechner? |
0000 |
0202 (move_fest) |
Die Buchstaben sind ab einer bestimmten Speicheradresse nacheinander im Hauptspeicher abgelegt. Nun wird die Position des ersten Buchstabens in das Register R2 geschrieben und dient somit als Buchstabenzähler. |
0001 |
0050 |
|
0002 |
0320 (move_ausHS) |
Inhalt vom HS an der durch das Register R2 adressierten Speicherstelle in R0 ablegen (aktueller Buchstabenwert) |
0003 |
0500 (jmp_z) |
Wenn der Buchstabenwert in R0 = 0, dann verzweigt das Programm zur HS-Adresse 0016. (Dort endet das Programm, da die Zeichenkette zu Ende ist bzw. abgearbeitet ist.) => Abbruchfall |
0004 |
0017 |
|
0005 |
0201 (move_fest) |
Der Buchstabenwert von "Z" , 0x005A, (Vergleichswert) wird nun im Register R1 abgelegt |
0006 |
005A |
|
0007 |
0610 (jmp_gt) |
Ist der Buchstabenwert in R0 größer als der Vergleichswert in R1, dann verzweigt das Programm zur HS-Adresse 0011. (In diesem Fall ist der anliegende Wert nicht der eines Großbuchstabens, und deshalb wird an der Adresse 0011 mit dem nächsten Wert fortgefahren.) |
0008 |
0011 |
|
0009 |
0201 (move_fest) |
Der Buchstabenwert von "A", 0x0041, wird nun in R1 abgelegt und dient dort ebenfalls als Vergleichswert. |
000A |
0041 |
|
000B |
0701 (jmp_lt) |
Ist der Buchstabenwert in R0 kleiner als der Vergleichswert, dann verzweigt das Programm zur Adresse 0011. (Hier wurde nun endgültig ausgeschlossen, dass der Wert eines Großbuchstabens in R0 anliegt und deshalb wird an Adresse 0011 fortgefahren.) |
000C |
0011 |
|
000D |
0201 (move_fest) |
In diesem Schritt wird nun der Inkrementierwert 0x0020 für die Umwandlung zu einem Kleinbuchstaben in R1 abgelegt. |
000E |
0020 |
|
000F |
0110 (add) |
Der Wert in R0 wird nun um den Inkrementierwert in R1 erhöht und das Ergebnis wieder in R0 zurückgeschrieben. |
0010 |
0420 (move_inHS) |
Der veränderte Wert in R0 wird nun wieder in den HS zurückgeschrieben und zwar an die in R2 abgelegte Speicheradresse. |
0011 |
0201 (move_fest) |
Jetzt wird der Wert 0001 in das Register R1 geschrieben. |
0012 |
0001 |
|
0013 |
0112 (add) |
Der "Buchstabenzähler" R2 wird um den Wert 0001 in R1 erhöht. |
0014 |
0800 (jmp) |
An dieser Stelle wird wieder an die HS-Stelle 0002 verzweigt. |
0015 |
0002 |
|
0016 |
ENDE |
|
... |
... |
|
0050 |
Wert des 1. Buchstabens |
|
0051 |
Wert des 2. Buchstabens |
|
... |
... |
Verwendete Maschinenbefehle und deren Spezifikation
In dieser Tabelle wird der Einfachheit halber vom Register RA bzw RB gesprochen, wobei dies jeweils das "durch das RA- bzw. RB- Feld des Maschinenbefehlswortes adressierte Register" bedeutet.
OP-Code | Befehl + Parameter | Spezifikation |
01 | add RA, RB | Werte in Register RA und RB addieren und das Ergebnis in RB zurückschreiben |
02 | move_fest x, RB | Zweiwortbefehl: Dieser Befehl schreibt den festen Wert aus dem Konstantenfeld (imm = unmittelbar adressierter Quelloperand im Maschinenbefehlswort) in das Register RB |
03 | move_ausHS [RA], RB | Wert vom HS an der durch RA adressierten Stelle wird nach RB kopiert. |
04 | move_inHS [RA], RB | Dieser Befehl schreibt den Wert von RB an die durch das Register RA adressierte Position in den HS |
05 | jmp_z RA, x | Zweiwortbefehl: wenn Wert RA = 0, dann springe zur im HS unmittelbar folgenden Position (imm = unmittelbar adressierter Quelloperand) |
06 | jmp_gt RA, RB | Zweiwortbefehl: wenn Wert RA > Wert RB, dann springe zur im HS unmittelbar folgenden Position (imm) |
07 | jmp_lt RA, RB | Zweiwortbefehl: wenn Wert RA < Wert RB, dann springe zur im HS unmittelbar folgenden Position (imm) |
08 | jmp x, x | Zweiwortbefehl: unbedingter Sprung zur im HS unmittelbar folgenden Position (imm) |
Spezifikation von strtolower_2
Hauptspeicher | Inhalt | Was macht der Rechner? |
0000 | 0100 (strtolower) | An dieser Stelle steht nun nur der Befehl strtolower. Dieser führt nun ein gesondertes Mikroprogramm aus, das im Mikroprogrammspeicher beim Op-code 01 beginnt und dieselbe Funktion wie das ausführliche Maschinenprogramm strtolower_2 erfüllt. |
0001 | 0001 | Ende |
... | ... | ... |
0050 | 0x00 | Genauso wie bei strtolower_1 ist auch hier bei HS-Adresse 0050 der 1. Buchstabe unserer Zeichenkette abgelegt. |
... | ... | ... |
... | 0000 | Ende der Zeichenkette |
Vergleich von strtolower_1 und strtolower_2
Der Vorteil des ausführlichen Programmes besteht wohl in der Tatsache, daß an diesem Programm jederzeit Modifizierungen
vorgenommen werden können, sogar bei schrittweiser Ausführung des Programms. So können Werte verändert oder Befehle
bezüglich ihrer Effizienz verbessert werden. Ein Nachteil des Programms ist wohl die Dauer, da es zur Ausführung sehr viele Takte benötigt.
Strtolower_2 hingegen wird viel weniger Takte benötigen und deswegen effizienter arbeiten als strtolower_1.
Welches Programm nach der Implementierung tatsächlich effizienter arbeitet und warum, lesen Sie bitte hier.
zurück | 28.03.00 Katrin Stedele, Rainer Schmoll, Tanja Wojak |