|
Zurück zur Homepage |
|
Zurück zur Homepage |
MOVE IMM RBFür den Test des Maschinenbefehls move wurden die folgenden Testkriterien definiert:
Das Mikroprogramm für den Maschinenbefehl move arbeitete im gesamten Test korrekt. Die korrekte Arbeitsweise des
Maschinenbefehls in Bezug auf das 2. Kriterium ist auch Testprogramm für den Befehl CMP ersichtlich.
| Adresse | Wert | Mnemonic | Erwartetes Ergebnis nach Ausführung | Eingetroffen |
|---|---|---|---|---|
| 0000 | F400 | MOVE | Register r0 := 0002 |
|
| 0001 | 0002 | |||
| 0002 | F401 | move | Register r1 := 0000 |
|
| 0003 | 0000 | |||
| 0004 | F406 | move | Register r6 := 8796 |
|
| 0005 | 8796 | |||
| 0006 | F400 | move | Register r0 := 4444 |
|
| 0007 | 4444 | |||
| 0008 | F400 | move | Register r0 := 0000 |
|
| 0009 | 0000 |
Protokoll des Testprogramms für den Befehl MOVE.
Das Testprogramm für den Befehl.
|
Zurück zur Homepage |
DEC RBFür den Test des Maschinenbefehls dec wurden die folgenden Testkriterien definiert:
Um zu testen ob die Statusflags unverändert bleiben wurde zum Beispiel der Wert 0002h dreimal dekrementiert. Würden die
Statusflags durch den Maschinenbefehl dec verändert werden, so hätte beim zweiten Dekrement das Zero-Flag und das Carry-Flag
gesetzt werden müssen, beim dritten Dekrement das Negative-Flag. Das Verhalten des Maschinenbefehls bei einem Überlauf des Wertebereiches
wurde durch das Dekrement von 0000h (Überlauf bei Interpretation als vorzeichenlose Zahl) und 8000h (Überlauf bei
Interpretation als Zweier-Komplement-Zahl) getestet. Das Maschinenprogramm arbeitete stets korrekt. Siehe auch: Testprogramm für
bscanf.
| Adresse | Wert | Mnemonic | Erwartetes Ergebnis nach Ausführung | Eingetroffen |
|---|---|---|---|---|
| 0000 | F400 | move | Register r0 := 0002 |
|
| 0001 | 0002 | |||
| 0002 | 4400 | dec | Register r0 := 0001, MSR unverändert |
|
| 0003 | 4400 | dec | Register r0 := 0000, MSR unverändert |
|
| 0004 | 4400 | dec | Register r0 := FFFF, MSR unverändert |
|
| 0005 | F400 | move | Register r0 := 8000 |
|
| 0006 | 8000 | |||
| 0007 | 4400 | dec | Register r0 := 7FFF, MSR unverändert |
|
| 0008 | 4400 | dec | Register r0 := 7FFE, MSR unverändert |
Protokoll des Testprogramms für den Befehl DEC.
Das Testprogramm für den Befehl.
|
Zurück zur Homepage |
CMP IMM RBFür den Test des Maschinenbefehls cmp wurden die folgenden Testkriterien definiert:
RB unverändert?rD geschrieben?Im folgenden soll nur auf das nicht triviale Kriterium 2 eingegangen werden. Es wurden die folgenden Testdatensätze definiert:
RB als auch im Konstantenfeld des Befehls sind zwei identische Werte. In unserem Testprogramm ist das der
Wert 0001h. Hier darf nur das Zero-Flag gesetzt werden.0001h angegeben, im Konstantenfeld steht der Wert 0002h. Es gilt also, daß der
Inhalt des Konstantenfeldes größer ist als der Wert des Registers RB, demzufolge muß das Carry-Flag gesetzt werden. Des
weiteren ist das Ergebnis (FFFFh) negativ, demzufolge muß das Negative-Flag gesetzt werden.0001h angegeben, im Konstantenfeld steht der Wert 8000h. Es gilt also, daß der
Inhalt des Konstantenfeldes größer ist als der Wert des Registers RB, demzufolge muß das Carry-Flag gesetzt werden. Des
weiteren ist das Ergebnis (8001h) negativ, demzufolge muß das Negative-Flag gesetzt werden. Der Übertrag in das Bit 15 ist 0
der Übertrag aus dem Bit 15 ist hingegen 1, daher muß auch das Overflow-Flag gesetzt werden.8000h angegeben, im Konstantenfeld steht der Wert 0001h. Der Wert des Registers
RB ist also größer als der des Inhalt Konstantenfeldes, demzufolge darf das Carry-Flag nicht gesetzt werden. Das Ergebnis
(7FFFh) ist positiv. Der Übertrag in das Bit 15 ist 1 der Übertrag aus dem Bit 15 ist hingegen 0, daher muß das
Overflow-Flag gesetzt werden.8001h angegeben, im Konstantenfeld steht der Wert 0001h. Der Wert des Registers
RB ist also größer als der des Inhalt Konstantenfeldes, demzufolge darf das Carry-Flag nicht gesetzt werden. Das Ergebnis
(8000h) ist negativ demzufolge muß das Negative-Flag gesetzt werden.Das Maschinenprogramm arbeitete stets korrekt.
| Adresse | Wert | Mnemonic | Erwartetes Ergebnis nach Ausführung | Eingetroffen |
|---|---|---|---|---|
| 0000 | F400 | move | ||
| 0001 | 0001 | |||
| 0002 | 3000 | cmp | Zero = 1 | |
| 0003 | 0001 | |||
| 0004 | 3000 | cmp | Carry = 1, Negative = 1 | |
| 0005 | 0002 | |||
| 0006 | 3000 | cmp | Carry = 1, Negative = 1, OVR = 1 | |
| 0007 | 8000 | |||
| 0008 | F400 | move | ||
| 0009 | 8000 | |||
| 000A | 3000 | cmp | OVR = 1 | |
| 000B | 0001 | |||
| 000C | F400 | move | ||
| 000D | 8001 | |||
| 000E | 3000 | cmp | Negative = 1 | |
| 000F | 0001 |
Protokoll des Testprogramms für den Befehl cmp.
Das Testprogramm für den Befehl.
|
Zurück zur Homepage |
SCFFür den Test des Maschinenbefehls scf wurden das folgende Testkriterien definiert:
Um dieses Kriterium zu überprüfen wurden die Statusflags des MSR gezielt gesetzt und dann überprüft, ob wirklich nur das Carry
verändert wurde. Das Mikroprogramm für den Maschinenbefehl scf arbeitete im gesamten Test korrekt.
| Adresse | Wert | Mnemonic | Erwartetes Ergebnis nach Ausführung | Eingetroffen |
|---|---|---|---|---|
| 0000 | F500 | scf | Carry = 1, andere Flags unverändert | |
| 0001 | F400 | move | Register r0 := 8000 |
|
| 0002 | 8000 | |||
| 0003 | 3000 | cmp | OVR = 1 | |
| 0004 | 0001 | |||
| 0005 | F500 | scf | Carry = 1, andere Flags unverändert |
Protokoll des Testprogramms für den Befehl scf.
Das Testprogramm für den Befehl.
|
Zurück zur Homepage |
RLC RBFür den Test des Maschinenbefehls rlc wurden das folgende Testkriterien definiert:
Um dieses Kriterium zu überprüfen wurde der Wert eines Register mehrfach mit rlc rotiert. Das Mikroprogramm für diesen
Maschinenbefehl arbeitete dabei stets korrekt. Siehe auch: Testprogramm für bscanf.
| Adresse | Wert | Mnemonic | Erwartetes Ergebnis nach Ausführung | Eingetroffen |
|---|---|---|---|---|
| 0000 | F400 | move | Register r0 := 8080 |
|
| 0001 | 8080 | |||
| 0002 | 6400 | rlc | Register r0 := 0100, Carry = 1 |
|
| 0003 | 6400 | rlc | Register r0 := 0201, Carry = 0 |
|
| 0004 | 6400 | rlc | Register r0 := 0402, Carry = 0 |
|
| 0005 | 6400 | rlc | Register r0 := 0804, Carry = 0 |
Protokoll des Testprogramms für den Befehl rlc.
Das Testprogramm für den Befehl.
|
Zurück zur Homepage |
JMPNC IMMFür den Test des Maschinenbefehls jmpnc wurden die folgenden Testkriterien definiert:
Hierzu wurde einfach ein Programm geschrieben, das den Maschinenbefehl zweimal aufruft, einmal mit gesetztem Carry-Flag und einmal ohne. In diesem
Programm und auch im Testprogramm für den Befehl bscanf erfolgte die Addreßfortschaltung stets
korrekt.
| Adresse | Wert | Mnemonic | Erwartetes Ergebnis nach Ausführung | Eingetroffen |
|---|---|---|---|---|
| 0000 | F500 | scf | Carry = 1 | |
| 0001 | 8D00 | jmpnc | kein Sprung | |
| 0002 | 0005 | |||
| 0003 | F400 | move | Register r0 := 0000 |
|
| 0004 | 0000 | |||
| 0005 | 6400 | rlc | Carry = 0, Zero = 1 | |
| 0006 | 8D00 | jmpnc | Sprung zu Speicheradresse 0099 |
|
| 0007 | 0099 |
Protokoll des Testprogramms für den Befehl jmpnc.
Das Testprogramm für den Befehl.
|
Zurück zur Homepage |
BSCANFFür den Test des Maschinenprogramms bscanf wurden die folgenden Testkriterien definiert: Nachbildung
0000h das Ergebnis -1?Um diese Kriterien zu testen wurde ein Programm geschrieben, das die Nachbildung von bscanf einmal mit dem Eingabewert
0000h und einmal mit dem Eingabewert 0080h aufruft. Dabei wurden die korrekten Ergebnisse nämlich -1 und 7 geliefert.
| Adresse | Wert | Mnemonic |
|---|---|---|
| 0000 | F400 | move |
| 0001 | 0080 | |
| 0002 | F500 | scf |
| 0003 | F401 | move |
| 0004 | 0010 | |
| 0005 | 4401 | dec |
| 0006 | 6400 | rlc |
| 0007 | 8D00 | jmpnc |
| 0008 | 0005 | |
| 0009 | F400 | move |
| 000A | 0000 | |
| 000B | F500 | scf |
| 000C | F401 | move |
| 000D | 0010 | |
| 000E | 4401 | dec |
| 000F | 6400 | rlc |
| 0010 | 8D00 | jmpnc |
| 0011 | 000E |
Ein Protokoll des Testprogramms für den Befehl ist aufgrund der zu erwarteten Länge nicht vorhanden.
Das Testprogramm für den Befehl.
|
Zurück zur Homepage |