MPR Projekt 9 - Testprogramme

 

Gliederung

  1. Testprogramme
    1. Testprogramm für den MOVE-Befehl
    2. Testprogramm für den DEC-Befehl
    3. Testprogramm für den CMP-Befehl
    4. Testprogramm für den SCF-Befehl
    5. Testprogramm für den RLC-Befehl
    6. Testprogramm für den JMPNC-Befehl
    7. Test für das BSCANF-Programm


Projektüberblick MPR Frames anzeigen
Zurück zur Homepage

Testprogramme und Testergebnisse



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

MOVE IMM RB

Für den Test des Maschinenbefehls move wurden die folgenden Testkriterien definiert:

  1. Wird der im Konstantenfeld angegebene Wert in das angegebene Register geschrieben?
  2. Bleiben die Statusflags unverändert?
  3. Bleiben die anderen Register unverändert?

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 Ja
0001 0002
0002 F401 move Register r1 := 0000 Ja
0003 0000
0004 F406 move Register r6 := 8796 Ja
0005 8796
0006 F400 move Register r0 := 4444 Ja
0007 4444
0008 F400 move Register r0 := 0000 Ja
0009 0000

Protokoll des Testprogramms für den Befehl MOVE.

Das Testprogramm für den Befehl.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

DEC RB

Für den Test des Maschinenbefehls dec wurden die folgenden Testkriterien definiert:

  1. Wird das angegebene Register dekrementiert?
  2. Bleiben die Statusflags unverändert?
  3. Ist das Überlaufverhalten korrekt?

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 Ja
0001 0002
0002 4400 dec Register r0 := 0001, MSR unverändert Ja
0003 4400 dec Register r0 := 0000, MSR unverändert Ja
0004 4400 dec Register r0 := FFFF, MSR unverändert Ja
0005 F400 move Register r0 := 8000 Ja
0006 8000
0007 4400 dec Register r0 := 7FFF, MSR unverändert Ja
0008 4400 dec Register r0 := 7FFE, MSR unverändert Ja

Protokoll des Testprogramms für den Befehl DEC.

Das Testprogramm für den Befehl.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

CMP IMM RB

Für den Test des Maschinenbefehls cmp wurden die folgenden Testkriterien definiert:

  1. Bleibt das Quellregister RB unverändert?
  2. Werden die Flags entsprechend der Spezifikationen gesetzt?
  3. Wird der Wert des Konstantenfeldes richtig in das Register rD geschrieben?

Im folgenden soll nur auf das nicht triviale Kriterium 2 eingegangen werden. Es wurden die folgenden Testdatensätze definiert:

  1. Sowohl im Quellregister 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.
  2. Im Quellregister RB ist der Wert 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.
  3. Im Quellregister RB ist der Wert 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.
  4. Im Quellregister RB ist der Wert 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.
  5. Im Quellregister RB ist der Wert 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 Ja
0003 0001
0004 3000 cmp Carry = 1, Negative = 1 Ja
0005 0002
0006 3000 cmp Carry = 1, Negative = 1, OVR = 1 Ja
0007 8000
0008 F400 move
0009 8000
000A 3000 cmp OVR = 1 Ja
000B 0001
000C F400 move
000D 8001
000E 3000 cmp Negative = 1 Ja
000F 0001

Protokoll des Testprogramms für den Befehl cmp.

Das Testprogramm für den Befehl.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

SCF

Für den Test des Maschinenbefehls scf wurden das folgende Testkriterien definiert:

  1. Es darf nur das Carry-Flag des MSR verändert werden.

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 Ja
0001 F400 move Register r0 := 8000 Ja
0002 8000
0003 3000 cmp OVR = 1 Ja
0004 0001
0005 F500 scf Carry = 1, andere Flags unverändert Ja

Protokoll des Testprogramms für den Befehl scf.

Das Testprogramm für den Befehl.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

RLC RB

Für den Test des Maschinenbefehls rlc wurden das folgende Testkriterien definiert:

  1. Wird das angegebene Register richtig über das Carry-Flag rotiert?

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 Ja
0001 8080
0002 6400 rlc Register r0 := 0100, Carry = 1 Ja
0003 6400 rlc Register r0 := 0201, Carry = 0 Ja
0004 6400 rlc Register r0 := 0402, Carry = 0 Ja
0005 6400 rlc Register r0 := 0804, Carry = 0 Ja

Protokoll des Testprogramms für den Befehl rlc.

Das Testprogramm für den Befehl.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

JMPNC IMM

Für den Test des Maschinenbefehls jmpnc wurden die folgenden Testkriterien definiert:

  1. Erfolgt, wenn das Carry Flag gesetzt ist, eine korrekte sequentielle Adreßfortschaltung?
  2. Erfolgt, wenn das Carry Flag nicht gesetzt ist, ein Sprung zu der im Konstantenfeld angegebenen Adresse?

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 Ja
0001 8D00 jmpnc kein Sprung Ja
0002 0005
0003 F400 move Register r0 := 0000 Ja
0004 0000
0005 6400 rlc Carry = 0, Zero = 1 Ja
0006 8D00 jmpnc Sprung zu Speicheradresse 0099 Ja
0007 0099

Protokoll des Testprogramms für den Befehl jmpnc.

Das Testprogramm für den Befehl.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage

Nachbildung von BSCANF

Für den Test des Maschinenprogramms bscanf wurden die folgenden Testkriterien definiert: Nachbildung

  1. Terminiert das Programm immer?
  2. Liefert es für den Eingabewert 0000h das Ergebnis -1?
  3. Liefert es für alle anderen Zahlen die Position der ersten binären 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.



Projektüberblick MPR Frames anzeigen Zum Seitenanfang
Zurück zur Homepage