|
Zurück zur Homepage |
|
Zurück zur Homepage |
MOVE IMM RB
Fü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 RB
Fü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 RB
Fü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 |
SCF
Fü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 RB
Fü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 IMM
Fü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 |
BSCANF
Fü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 |