-
Diese Erfindung basiert auf einer
Anmeldung Nr. 9-234355, angemeldet in Japan.
-
HINTERGRUND DER ERFINDUNG
-
1. Sachgebiet
der Erfindung
-
Die vorliegende Erfindung bezieht
sich auf eine Testhilfevorrichtung bzw. eine Debug-Hilfevorrichtung
zum Testen einer Ausführungscodesequenz und
zum Fixieren von Programmfehlern, und auch auf eine Programmkompiliervorrichtung
zum Erzeugen der Ausführungscodesequenz,
die durch die Testhilfevorrichtung bearbeitet werden soll.
-
2. Beschreibung des Stands
der Technik
-
Mikrocomputersysteme sind wesentlich
für eine
elektronische Ausrüstung
von heute. Insbesondere müssen
Programme, entwickelt für
die Verwendung in elektrischen Haushaltsgeräten, das Niveau einer Qualität erreichen,
die für
eine Massenproduktion erforderlich ist, und sie müssen vollständig von Fehlern
befreit sein. Demzufolge sind Debug- bzw. Fehlersuchhilfevorrichtungen
grundsätzlich
wichtig geworden, wenn Programme entwickelt werden.
-
Die Testhilfevorrichtungen sind hauptsächlich in
drei Typen klassifiziert. Der erste Typ betreibt ein Fehlersuchsollprogramm
in einem ROM einer vorgesehenen Maschine. Der zweite Typ betreibt
das Fehlersuchsollprogramm auf einer ICE (In-Circuit-Emulator) Leiterplatte
(Handelsmarke). Der dritte Typ betreibt das Debug- bzw. Fehlersuchsollprogramm
in einer Simulation unter Verwendung eines Simulators in einem Host-Computer.
-
Diese Fehlersuchhilfsvorrichtungen
lassen jeweils das Fehlersuchsollprogramm, gespeichert in der vorgesehenen
Maschine an gegebenen Adressen, laufen und halten es an. Programmierer
können den
Prozess von korrigierenden Werten des Speichers und von Registern
auf der Host-Computer-Anzeige sehen. Auch können, durch temporäres Ändern von
Parametern in dem Fehlersuchsollprogramm, bevor es läuft, Programmierer
die Operation des Fehlersuchsollprogramms in verschiedenen Fällen prüfen. Unter
Verwendung der Fehlersuchhilfsvorrichtungen, wie dies vorstehend
beschrieben ist, können
die Programmierer Programmfehler (Bugs) in dem Fehlersuchsollprogramm
finden und diagnostizieren.
-
Das Dokument US-A-5 555 419 offenbart
ein Korrelationssystem, das mit Vorprozessoren und einem Debugger
bzw. Fehlersuchsollprogramm in einem Translationssystem kommuniziert,
um Symbole und Codesegmente eines Eingabebenutzerprogramms zu Symbolen
und Codesegmenten einer ausführbaren
Ausgabeversion des Programms zu korrelieren. Wenn der Benutzer zu
dem Fehlersuchsollprogramm eine Anforderung für einen Zwischenwert eines
bestimmten Benutzerprogrammsymbols schickt, prüft das Fehlersuchsollprogramm
zuerst die Fehlersuchsollprogrammsymboltabelle, um zu bestimmen,
ob das Symbol darin definiert ist. Falls dies der Fall ist, bestimmt
das Fehlersuchsollprogramm, welches Segment des Quellencodes sich
auf die Evaluierung des Symbols bezieht, und extrahiert den variablen
Wert von diesem Segment. Das Fehlersuchsollprogramm zeigt dann den
Symbolwert und das Benutzerprogrammsegment an.
-
Um Variable oder Unterprogramme,
gespeichert in dem Fehlersuchsollprogramm, fehlermäßig zu beheben,
spezifiziert ein Programmierer Ausführungscode, ausgedrückt durch
hexadezimale Werte, als das Fehlersuch-Ziel, da die Variablen und
die Unterprogramme in Ausführungscoden
in dem vorgesehenen Fehlersuchsollprogramm geschrieben sind. Dementsprechend
sollten die Fehlersuchhilfsvorrichtungen in der Lage sein, mnemonische
Code wiederherzustellen, die Quellencode zusammenstellen, und zwar
aus den spezifizierten, hexadezimalen Werten (nachfolgend binäre Daten),
um die Fehlersuche zu vereinfachen.
-
Eine Testhilfevorrichtung mit der
vorstehenden Wederherstellungsfähigkeit
kann spezifizierte Ausführungscode
in dem Speicher der vorgesehenen Maschine in mnemoni sche Code umwandeln, die
leicht durch den Programmierer verstanden werden können. Auch
kann der Programmierer die Start- und Stoppadresse des vorgesehenen
Fehlersuchsollprogramms durch Unterprogrammnamen, geschrieben in
dem Quellenprogramm, und nicht tatsächliche Adressen in dem Speicher
der vorgesehenen Maschine, spezifizieren. Ebenso kann der Programmierer
Programmvariable spezifizieren, um durch Variable-Namen, geschrieben
in dem Quellenprogramm, nach Fehlern durchsucht zu werden, und nicht
tatsächliche
Adressen in dem Speicher der vorgesehenen Maschine.
-
Allerdings ist es, mit den herkömmlichen Fehlersuchhilfsvorrichtungen,
schwierig, einen Ausführungscode
fehlermäßig zu durchsuchen,
der einem Abschnitt eines Quellenprogramms entspricht, der eine
Langwortkonstante umfasst, da Angaben, umfassend eine Langwortkonstante
in dem Quellenprogramm, einer Mehrzahl von Ausführungscoden in dem vorgesehenen
Fehlersuchsollprogramm entsprechen.
-
Genauer gesagt stellt, wenn das Quellenprogramm
eine Angabe mit einer Langwortkonstanten umfasst, eine Programm-Compilier-Vorrichtung
nicht die Angabe zusammen, um einen Ausführungscode zu erzeugen, der
die Langwortkonstante umfasst. Anstelle davon wird die Langwortkonstante
in der Angabe zuerst in eine Mehrzahl von Teilkonstanten unterteilt
und die Angabe wird zu einer Mehrzahl von Ausführungscoden zusammengestellt,
die die Mehrzahl von Teilkonstanten als Operanden verwendet.
-
Wenn die Mehrzahl von Ausführungscoden, erzeugt
als solche zu einer Mehrzahl von mnemonischen Coden in der Debug-
bzw. Fehlersuchstufe umgewandelt werden, kann der Programmierer
beim Auffinden einer Mehrzahl von fremden Operanden in den mnemonischen
Coden verwirrt werden, anstelle der Langwortkonstanten, die ursprünglich nicht
in dem Quellenprogramm geschrieben wurde.
-
Auch kann, wenn der Programmierer
versucht, die originale Langwortkonstante von Ausführungscoden
zu identifizieren, die eine Mehrzahl von Teilkonstanten umfassen,
erzeugt von der Langwortkonstanten, der Programmierer diese Teilkonstanten mit
anderen Teilkonstanten, erzeugt von einer unterschiedlichen Langwortkonstanten,
verwechseln.
-
Auch muss, wenn temporär eine Langwortkonstante
in dem Fehlersuchsollprogramm geändert wird,
der Programmierer die vorgesehene Maschine so steuern, um eine Mehrzahl
von Ausführungscoden
zu lesen, die die Mehrzahl von Teilkonstanten umfassen, und zwar
von dem Speicher, um so die Langwortkonstante zu identifizieren,
die geändert werden
soll. Dies erfordert eine umfangreiche Menge an Verarbeitungszeit.
Der Programmierer muss auch wissen, an welcher Bitposition die originale
Langwortkonstante unterteilt worden ist. Aufgrund dieser Schwierigkeiten
gibt es der Programmierer oftmals auf, Langwortkonstanten in der
Fehlersuchstufe zu ändern.
-
In der Fehlersuchbearbeitung ist
die Instruktionslänge
in dem Fehlersuchsollprogramm so festgelegt, dass der Prozessor
Instruktionen unter einer hohen Geschwindigkeit ausführt. Zum
Beispiel verwenden Prozessoren, eingebaut in SPARC (Scalable Processor
ARChitecture) Arbeitsstationen, entwickelt von Sun Microsystems
Inc., die festgelegte Instruktionslänge mit 32 Bit. Jede 32-Bit-Konstante,
umfasst in Quellenprogrammen, entwickelt zur Verwendung in diesen
Prozessoren, wird zuerst in zwei Teilkonstanten von Bits hoher Ordnung
und Bits niedriger Ordnung unterteilt und dann in zwei Ausführungscoden
zusammengestellt.
-
1 stellt
ein Ergebnis einer Ausführung
eines Rückumwandlungsbefehls
in Bezug auf vier Ausführungscode,
geschrieben in Adressen 0x80000000 bis 0x8000000F unter Verwendung
eines SPARC Prozessors, dar. In der 4 drücken die
vier Ausführungscode
eine Instruktion zum Zuordnen einer Konstanten „0x12345A32" zu einer Variablen
a, gespeichert in einer Adresse 0x00001000, aus. Wie in der Figur
dargestellt ist, wird ein Fehlersuchbefehl zum Anzeigen einer Liste
von „sethi
%hi (0x12345800), %o0" zu „st
%o0, [%o1+0x000]" eingegeben. Die Spalten von links nach rechts
zeigen Zeilenzahlen entsprechend zu dem Quellenprogramm, Ausführungscodeadressen,
Ausführungscode
in einer Maschinensprache und mnemonischen Coden als die Rückumwandlungsergebnisse.
-
Der mnemonische Code „sethi
%hi (0x12345800), %o0" stellt eine Instruktion zum Speichern von
22 Bits hoher Ordnung der Konstanten „0x12345A32" in ein Register
%o0 dar. Der mnemonische Code „or
%o0,232,%o0" stellt eine Instruktion zum Durchführen einer Oder-Operation in
Bezug auf den Wert des Registers %o0 und einen Konstanten-Operanden „232" und
Speichern des Operationsergebnisses in das Register %o0 hinein dar.
Der mnemonische Code „sethi
%hi (0x00001000), %o1" stellt eine Instruktion zum Speichern einer
Konstanten „0x00001000"
in ein Register %o1 hinein dar. Der mnemonische Code „st %o0,
[%o1+0x000]" stellt eine Instruktion zum Speichern des Werts des
Registers %o0 in eine Adresse hinein, spezifiziert durch den Wert
eines Registers %o1, und einen Konstanten-Operanden „0x000",
dar.
-
Unter den vorstehenden Instruktionen
umfassen „sethi
%hi (o0x12345800), %o0" und „or %o0,232,%o0"
jeweils eine 22-Bit Teilkonstante „0x12345800" und eine 10-Bit
Teilkonstante „0x232". Dies
zeigt an, dass die 32-Bit Konstante „0x12345A32", ursprünglich geschrieben
in dem Quellenprogramm, in die zwei Teilkonstanten unterteilt worden
ist und dann in den Speicher der vorgesehenen Maschine hinein geladen
ist, da sie die festgelegte Instruktionslänge, spezifiziert für den Prozessor,
anpasst. In derselben Art und Weise zeigen „sethi %hi (o0x00001000),
%o1" und „st
%o0, [%01+0x000]", dass die Adresse 0x00001000 einer Variablen a
in die zwei Teilkonstanten unterteilt worden ist, bevor sie in den
Speicher hinein geladen worden ist.
-
Falls der Programmierer die Kenntnis
hat, dass jede 32-Bit Konstante in dem Quellenprogramm in die 22
Bits hoher Ordnung und die 10 Bits niedriger Ordnung hinein unterteilt
worden ist, ist es nicht möglich,
die Original-Konstante entsprechend dem mnemonischen Code „sethi
%hi (o0x12345800), %o0" und „or
%o0,232,%o0" zu erfassen. Allerdings ist es, wenn Konstanten mit
32-Bit gemäß einer
Vielzahl von Unterteilungsmustern unterteilt werden, wie beispielsweise „4, 4,
4, 20" und „8,
24", schwieriger und zeitaufwendiger, die originale Konstante zu
erfassen.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Die erste Aufgabe der vorliegenden
Erfindung ist es, eine Test- bzw. Fehlersuchhilfevorrichtung zu
schalten, die die Schwierigkeiten löst, die der Programmierer erfährt, wenn
er Ausführungscode zurückwandelt,
die Teilkonstanten umfassen.
-
Die zweite Aufgabe der vorliegenden
Erfindung ist diejenige, eine Testhilfevorrichtung zu schaffen,
die die Schwierigkeiten in einer Fehlersuchverarbeitung durch Verhindern
löst, dass
der Programmierer durch Teilkonstanten verwirrt wird, die von einer Langwortkonstanten
erzeugt sind, mit Teilkonstanten, erzeugt von anderen Langwortkonstanten.
-
Die dritte Aufgabe der vorliegenden
Erfindung ist es, eine Testhilfevorrichtung zu schaffen, die dem
Programmierer ermöglicht,
temporär
Langwortkonstanten ohne Schwierigkeit zu ändern.
-
Die vierte Aufgabe der vorliegenden
Erfindung ist es, eine Programmkompiliervorrichtung zum Erzeugen
eines Fehlersuchsollprogramms und von Fehlersuchinformationen zu
schaffen, die dem Programmierer ermöglichen, das Fehlersuchsollprogramm
besser bzw. schneller nach Fehlern zu durchsuchen.
-
Die erste und die zweite Aufgabe
können
mit einer Testhilfevorrichtung zur Unter stützung beim Testen einer Ausführungscodesequenz,
die in einen Speicher geladen ist, gelöst werden, die umfasst: eine
Empfangseinrichtung, die eine Angabe einer Test-Zieladresse von einem Benutzer empfängt; eine Umwandlungseinrichtung,
die einen Operationscode in einen Ausführungscode, der in der Test-Zieladresse
in den Speicher geladen ist, in einen mnemonischen Code umwandelt;
eine Feststelleinrichtung, die, wenn der Ausführungscode einen Konstanten-Operanden
enthält,
feststellt, ob der Konstanten-Operand
eine Teilkonstante ist, die bestimmt wird, indem eine Langwortkonstante
geteilt wird; eine Wiederherstellungseinheit, die die Langwortkonstante
aus dem Konstanten- Operanden
wiederherstellt, wenn es sich bei dem Konstanten-Operanden um die Teilkonstante
handelt; und eine Anzeigeeinheit, die den mnemonischen Code mit
der Langwortkonstanten anzeigt.
-
Mit dem angegebenen Aufbau wird,
wenn ein Ausführungscode
eine einer Mehrzahl der Teilkonstanten, erzeugt von einer Langwortkonstanten,
umfasst, zuerst die Langwortkonstante von der Teilkonstanten wiederhergestellt,
und dann wird die Teilkonstante durch die Langwortkonstante ersetzt.
Dementsprechend wird der mnemonische Code mit der Langwortkonstanten
angezeigt, die ursprünglich
in dem Quellenprogramm durch den Programmierer geschrieben war.
-
Demzufolge kann der Programmierer
einfach eine Fehlersuche durchführen,
da die Langwortkonstante, ursprünglich
geschrieben in dem Quellenprogramm, anstelle der Mehrzahl der Teilkonstanten angezeigt
wird. Auch wird der Programmierer nicht durch die Vielzahl der Teilkonstanten
in Bezug auf andere Teilkonstanten, erzeugt von einer unterschiedlichen
Langwortkonstanten, verwirrt.
-
Die dritte Aufgabe kann durch die
Testhilfevorrichtung gelöst
werden, wobei die Empfangseinheit eine Änderungsbefehlempfangseinheit
zum Empfangen eines Befehls zum Ändern
einer Langwortkonstanten in dem Speicher und eine neue Langwortkonstante
von dem Benutzer umfasst, und wobei die Testhilfevorrichtung weiterhin
umfasst: Eine Unterteilungseinheit zum Unterteilen der neuen Langwortkonstanten
in eine Vielzahl von neuen Teilkonstanten gemäß den Bitpositionsinformationen
in einem Satz von Konstantenteilungsinformationen.
-
Mit dem angegebenen Aufbau ist es
möglich, temporär die Langwortkonstante,
ohne Lesen einer Vielzahl von Ausführungscoden zu ändern, die
die Vielzahl von Teilkonstanten umfassen, von dem Speicher, zu ändern. Dementsprechend
kann die Verarbeitungszeit verringert werden und der Programmierer
kann die Langwortkonstante ohne Schwierigkeit ändern.
-
Hierbei kann jeder Satz von Konstantenteilungsinformationen
auch Typinformationen enthalten, die zeigen, ob die Langwortkonstante
als eine Zahl oder eine Kennung ausgedrückt ist, die die Langwortkonstante
in der Quellencodesequenz identifiziert und eine der Zahl und den
Identifizierer gemäß den Typinformationen
identifiziert, wobei die Anzeigeeinheit umfasst: eine Feststelleinheit,
die, wenn es sich bei dem Konstanten-Operanden um die Teilkonstante handelt,
unter Bezugnahme auf die Typinformationen in dem Satz von Konstantenteilungsinformationen,
der die Teilkonstante zeigt, feststellt, ob die Langwortkonstante
als eine Zahl oder eine Kennung in der Quellencodesequenz ausgedrückt ist; eine
erste Anzeigeeinheit, die die Kennung anzeigt, die in dem Satz von
Konstantenteilungsinformationen gezeigt wird, wenn die Langwortkonstante
als die Kennung ausgedrückt
ist; eine zweite Anzeigeeinheit, die die Zahl anzeigt, die in der
Gruppe von Konstantenkennungsinformationen gezeigt wird, wenn die
Langwortkonstante als die Zahl ausgedrückt ist.
-
Mit dem angegebenen Aufbau ist es
möglich, zu
spezifizieren, ob die Langwortkonstante als die Zahl bzw. die Kennung
oder der Identifizierer in der Fehlersuchstufe geschrieben worden
ist.
-
Hierbei kann die Wiederherstellungseinheit umfassen:
eine Bitlängen-Berechnungseinheit,
die eine Differenz-Bitlänge
berechnet, indem sie eine Bitlänge
des Konstanten-Operanden, der in dem Ausführungscode enthalten ist, von
einer Standard-Bitlänge der
Langwortkonstanten subtrahiert; eine Ausführungscode-Erfassungseinheit,
die wenigstens einen Konstanten-Operanden, der eine Bitlänge hat, die
nicht größer ist
als die Differenz-Bitlänge,
anhand von Adressen an die Test-Zieladresse angrenzend, erfasst;
und eine Anordnungseinheit, die den erfassten Konstanten-Operanden
und den Konstanten-Operanden, der in der Test-Zieladresse enthalten ist,
anordnet, um die Langwortkonstante wiederherzustellen.
-
Mit dem angegebenen Aufbau kann die Langwortkonstante
gerade dann wiederhergestellt werden, wenn die Konstantenteilungsinformationen nicht
existieren. Hierbei kann die Testhilfevorrichtung weiterhin eine
Ausführungsverlauf-Speichereinrichtung
umfassen, die, wenn wenigstens ein Ausführungscode, der in dem Speicher
geladen ist, ausgeführt
worden ist, Adressen des ausgeführten
Ausführungscodes
speichert, wobei, wenn kein Ausführungscode
ausgeführt
worden ist, die Ausführungscode-Erfassungseinheit
den Konstanten-Operanden anhand der Adressen, an die Test-Zieladresse
angrenzend, erfasst, und wobei, wenn wenigstens ein Ausführungscode
ausgeführt
worden ist, die Ausführungscode-Erfassungseinheit
den Konstanten-Operanden anhand der Adressen, die in der Ausführungsverlauf-Speichereinrichtung
gespeichert sind, und anhand der Adressen, an die Test-Zieladresse angrenzend,
erfasst.
-
Mit dem angegebenen Aufbau ist es,
wenn eine konditionale Verzweigungsinstruktion, die zu irgendeiner
von zwei Routen führt,
wobei jede eine Teilkonstantenverschie bung umfasst, und eine Speicheroperation
in dem Fehlersuchsollprogramm umfasst ist, möglich, zu spezifizieren, welche
Teilkonstantenverschiebe- und Speicheroperation ausgeführt worden
ist, unter Bezugnahme auf die Ausführungshistorie-Speichereinheit.
Dementsprechend kann die Langwortkonstante korrekt wiederhergestellt
werden.
-
Hierbei kann die Testhilfevorrichtung
weiterhin umfassen: eine Konstantenteilungsinformations-Speichereinheit,
die eine Vielzahl von Sätzen von
Konstantenteilungsinformationen speichert, wobei jeder Satz von
Konstantenteilungsinformationen zeigt: eine einer Vielzahl von Langwortkonstanten, die
in eine Quellencodesequenz geschrieben sind, die in die Ausführungscodesequenz
kompiliert worden ist; Teilkonstanteninformationen, die eine Vielzahl
von Teilkonstanten zeigen, die bestimmt werden, indem die Langwortkonstante
geteilt wird; und eine Ladeadresse jedes Ausführungscodes, der eine der Vielzahl
von Teilkonstanten enthält,
wenn die Ladeadresse bekannt ist; und eine Konstantenteilungsinformations-Erzeugungseinheit,
die, wenn die Langwortkonstante durch die Anordnungseinheit wiederhergestellt
wird, einen Satz von Konstantenteilungsinformationen erzeugt, indem
sie die wiederhergestellte Langwortkonstante als eine ursprüngliche Langwortkonstante
schreibt, den erfassten Konstanten-Operanden und den Konstanten-Operanden, der in
der Test-Zieladresse enthalten ist, als die Teilkonstanteninformationen
schreibt, und die Test-Zieladresse sowie eine Adresse des erfassten
Konstanten-Operanden
als Ladeadressen schreibt, wobei der erzeugte Satz von Konstantenteilungsinformationen in
die Konstantenteilungsinformations-Speichereinheit hinein gespeichert
wird.
-
Mit dem angegebenen Aufbau ist es,
wenn einmal die Konstantenteilungsinformationen erzeugt sind, nicht
länger
notwendig, Ausführungscode
zu lesen und auf die Ausführungshistorie-Informationen Bezug
zu nehmen, um die Langwortkonstante zum nächsten Zeitpunkt wiederherzustellen.
Auch kann die Langwortkonstante gerade dann wiederhergestellt werden,
wenn die Ausführungshistorie-Informationen
von der Ausführungshistorie-Speichereinheit gelöscht sind.
-
Die vierte Aufgabe der vorliegenden
Erfindung wird durch eine Programmkompilier vorrichtung gelöst, die
umfasst: eine Empfangseinheit, die einen Befehl zum Kompilieren
einer Quellencodesequenz von einem Benutzer empfängt; eine Kompilationseinheit,
die die Quellencodesequenz zu einer Ausführungscodesequenz kompiliert,
wenn der Befehl zum Kompilieren der Quellencodesequenz empfangen wird,
wobei von allen Befehlen, die in die Quellencodesequenz geschrieben
sind, jeder Befehl, der eine Langwortkonstante enthält, durch
eine Operationssequenz in der Ausführungscodesequenz ersetzt wird,
wobei die Operationssequenz aus einer Vielzahl von Operationen besteht,
die jeweils eine Vielzahl von Teilkonstanten enthalten, die bestimmt
werden, indem die Langwortkonstante geteilt wird; eine Feststelleinheit,
die feststellt, ob der Befehl zum Kompilieren der Quellencodesequenz
von einer Testoptions-Angabe begleitet wird; und eine Erzeugungseinheit,
die Konstantenteilungsinformationen, die die Langwortkonstante angeben,
unter Verwendung der Vielzahl von Teilkonstanten, erzeugt, wenn die
Testoptions-Angabe begleitet wird.
-
Mit dem angegebenen Aufbau liefern
die Konstantenteilungsinformationen detaillierte Informationen über die
Relation zwischen der originalen Konstanten in dem Quellenprogramm
und der Vielzahl von Teilkonstanten in dem vorgesehenen Fehlersuchsollprogramm.
Dementsprechend kann das Fehlersuchen effizient unter Verwendung
der Konstantenteilungsinformation durchgeführt werden.
-
Hierbei können die Konstantenteilungsinformationen
eine Ladeadressen-Spalte enthalten, die eine Ladeadresse jeder der
Vielzahl von Operationen zeigen, die jeweils die Vielzahl von Teilkonstanten enthalten,
wobei die Kompilationseinheit enthält: eine Ersetzeinrichtung,
die jeden Befehl, der die Langwortkonstante enthält, durch die Operationssequenz ersetzt,
die aus der Vielzahl von Operationen besteht; eine Optimierungseinheit,
die die Quellencodesequenz optimiert, in der jeder Befehl durch
die Operationssequenz ersetzt worden ist; und eine Zuordnungseinheit,
die eine Ladeadresse in einem Zielrechner jeder der Vielzahl von
Operationen in der optimierten Quellencodesequenz zuordnet, und
wobei die Erzeugungseinrichtung enthält: eine Schreibeinheit, die,
nachdem jeder Befehl durch die Operationssequenz ersetzt ist, eine
relative Adresse jeder Operation, die in der Operationssequenz enthalten
ist, berechnet und die relative Adresse in die Ladeadressen-Spalte
in den Konstantenteilungsinformationen schreibt; und eine Erneuerungseinheit,
die die relative Adresse entsprechend einer Änderung der relativen Adresse
als ein Ergebnis einer Optimierung durch die Optimierungseinheit
erneuert, eine Ladeadresse aus der erneuerten relativen Adresse
und der zugeordneten Ladeadresse berechnet und die berechnete Ladeadresse
in die Ladeadressen-Spalte in den Konstantenteilungsinformationen
schreibt.
-
Mit dem angegebenen Aufbau kann,
wenn die Programmkompiliervorrichtung zuerst die Langwortkonstante
teilt und dann weitere Modifikationen hinzufügt, um das Fehlersuchsollprogramm
zu optimieren, die Fehlersuchhilfsvorrichtung die Langwortkonstante
unter Bezugnahme auf die Konstantenteilungsinformationen, die entsprechend
dem Optimierungsergebnis erneuert worden sind, wiederherstellen.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Diese und andere Aufgaben, Vorteile
und Merkmale der Erfindung werden aus der nachfolgenden Beschreibung
davon ersichtlich werden, die in Verbindung mit den beigefügten Zeichnungen
vorgenommen wird, die eine spezifische Ausführungsform der Erfindung darstellen.
In den Zeichnungen:
-
1 stellt
dar, wie Ausführungscode
in mnemonische Code bei dem herkömmlichen
Fehlersuchen umgewandelt werden;
-
2A stellt
das Erscheinungsbild der Hardwareumgebung der Ausführungsform
der vorliegenden Erfindung dar;
-
2B stellt
den inneren Aufbau der Hardwareumgebung der Ausführungsform dar;
-
3 stellt
den Hardwareaufbau des VLIW Prozessors 22 in der Ausführungsform
dar;
-
4A stellt
die Instruktionsformate des VLIW Prozessors 22 dar;
-
4B stellt
die Zwischenregisteroperationsformate dar;
-
4C stellt
die 4-Bit-Teilkonstanten-Benutzungsoperationsformate dar;
-
5 zeigt
ein Funktionsblockdiagramm, das den inneren Aufbau der Testhilfevorrichtung 41 darstellt;
-
6 stellt
die Fehlersuchinformationen und die Konstantenteilungsinformationen,
umfasst in den Fehlersuchinformationen, dar;
-
7A stellt
die Dialoganzeige, angezeigt auf der Anzeige 11, gemäß der Verarbeitung
der Benutzerschnittstelle 44, dar;
-
7B–7F stellen
das Verfahren zum Zurückwandeln
von Ausführungscoden
durch die Ausführungscoderückwandlungseinheit 47 dar;
-
8A–8E stellen
die Verarbeitung der Konstantenänderungseinheit 50 dar,
wenn der Änderungsbefehl
ausgeführt
wird;
-
9 zeigt
ein Flussdiagramm, das die Verarbeitung der Konstantenwiederherstellungseinheit 49 darstellt;
-
10A und 10B zeigen ein Flussdiagramm,
das die Verarbeitung der Konstantenänderungseinheit 50 darstellt;
-
11 stellt
den inneren Aufbau der Programmkompiliervorrichtung 81 dar;
-
12A stellt
ein Beispiel des Quellenprogramms dar;
-
12B stellt
ein Beispiel des Zwischenbeschreibungsprogramms dar;
-
12C stellt
ein Beispiel des Zwischenbeschreibungsprogramms nach Teilung der
Langwortkonstanten dar;
-
12D stellt
ein Beispiel des Zwischenbeschreibungsprogramms nach einer Optimierung
dar;
-
12E stellt
absolute Adressen, zugeordnet zu dem Fehlersuchsollprogramm, dar;
-
13 zeigt
ein Flussdiagramm, das die Verarbeitung einer Erzeugung der Konstantenteilungsinformationen
darstellt;
-
14A und 14B stellen Beispiele von
Operationen und eine Langwortkonstante, geschrieben mit den Variablen,
dargestellt in 13, dar;
-
15A–15C stellen
Beispiele der Konstantenteilungsinformationen nach Teilung der Langwortkonstanten
dar;
-
16A–16C stellen
Beispiele der Konstantenteilungsinformationen nach einer Modifikation
dar; und
-
17A–17C stellen
Beispiele der Konstantenteilungsinformationen nach einer Absolutadressenzuordnung
dar.
-
BESCHREIBUNG
DER BEVORZUGTEN AUSFÜHRUNGSFORM
-
Hardwareumgebung
für eine
Testhilfevorrichtung und eine Programmkompiliervorrichtung
-
Das Nachfolgende ist eine Erläuterung
der Debug- bzw. Fehlersuchhilfevorrichtung und der Programmkompiliervorrichtung
der Ausführungsform
der vorliegenden Erfindung.
-
2A stellt
die Hardwareumgebung, erforderlich für den Betrieb der Testhilfevorrichtung
und der Programmkompiliervorrichtung, dar, während 2B ein Blockdiagramm der Hardwareumgebung, dargestellt
in 2A, zeigt.
-
In 2A ist
ein Host-Computer 10 mit einer Anzeige 11, einem
Tastenfeld 12
und einer Mouse 38 verbunden.
In 2B umfasst der Host-Computer 10 ein
Festplattenlaufwerk 13, einen Host-Prozessor 14, einen
Speicher 15 und einen Plattenantrieb 16, eine Simulator-Software 17,
einen Parallel-Übertragungs-Port 18 und
einen Seriell- Übertragungs-Port 19.
Der Parallel-Übertragungs-Port 18 und
der Seriell-Übertragungs-Port 19 sind
jeweils mit einer ICE-Leiterplatte 30 und einem ROM-Emulator 20 über eine
parallele Leitung 31 und eine serielle Leitung 21 verbunden.
-
Der Host-Computer 10 arbeitet
als eine Testhilfevorrichtung bzw. eine Fehlersuchhilfsvorrichtung, wenn
ein Speichermedium 40, das eine Fehlersuch-Software speichert,
in das Plattenlaufwerk 16 eingeladen wird, und die Fehlersuch-Software
wird in dem Festplattenlaufwerk 13 installiert und aktiviert.
-
Auch arbeitet der Host-Computer 10 als
eine Programmkompiliervorrichtung, wenn ein Speichermedium 80,
das eine Programmkompilier-Software speichert, in das Plattenlaufwerk 16 eingeladen
wird, und die Programmkompilier-Software in dem Festplattenlaufwerk 13 installiert
wird und aktiviert wird.
-
Der ROM-Emulator 20 lässt ein
Fehlersuchsollprogramm 24 entsprechend Instruktionen, geschickt
von dem Host-Computer 10 aus über die serielle Leitung 21,
laufen und hält
es an. Der ROM-Emulator 20 liest/schreibt auch Werte von
einem/in einen Speicher 26, wenn das Fehlersuchsollprogramm 24 sich
in einem angehaltenen Zustand befindet.
-
Wie in 2B dargestellt
ist, umfasst der ROM-Emulator 20 einen VLIW-Prozessor 22 und
den Speicher 26. Der Speicher 26 besitzt einen
Benutzerbereich, der ein Monitorprogramm 23, das Fehlersuchsollprogramm 24 und
einen inneren Targetarbeitsbereich 25 umfasst.
-
Der VLIW Prozessor 22 führt jede
Instruktion, geschrieben in Instruktionsfolgen, aus, die das Monitorprogramm 23 und
das Fehlersuchsollprogramm 24 zusammenstellen, und ist
mit einem zugeordneten Anschluss 27 ausgerüstet, der
mit der seriellen Leitung 21 verbunden ist.
-
Das Fehlersuchsollprogramm 24 ist
aus Instruktionssequenzen zusammengesetzt, die eine Vielzahl von
Monitorinstruktionen umfassen. Eine Monitorinstruktion wird dazu
verwendet, den VLIW Prozessor 22 zu instruieren, von dem
Fehlersuchsollprogramm 24 zu dem Monitorprogramm 23 hin
zu verzweigen, wenn Daten in den zugeordneten Anschluss 27 eingegeben
sind.
-
Das Monitorprogramm 23 wird
dann aktiviert, wenn eine Verzweigung entsprechend der Monitorinstruktion
aktiviert wird. Gemäß dem Monitorprogramm 23 wird
der VLIW Prozessor 22 in einen Wartezustand für eine Befehleingabe
versetzt. Wenn der Befehl in den zugeordneten Anschluss 27 eingegeben
ist, dann führt
der VLIW Prozessor 22 den Befehl entsprechend dem Monitorprogramm 23 aus.
-
Der innere Targetarbeitsbereich 25 wird
für den
Betrieb des Monitorprogramms 23 und des Fehlersuchsollprogramms 24 verwendet.
-
Die ICE-Leiterplatte 30 lässt das
Fehlersuchsollprogramm 24 in derselben Art und Weise wie
der ROM-Emulator 20 entsprechend Instruktionen, geschickt
von dem Host-Computer 10 über die
parallele Leitung 31, laufen und stoppt es. Die ICE-Leiterplatte liest/schreibt
auch Werte von einem/in einen Speicher 33 unter einer erwünschten
Zeitabstimmung entsprechend der Steuerung durch den Host-Computers 10.
-
Wie in 2B dargestellt
ist, umfasst die ICE-Leiterplatte 30 einen ICE-Chip 32 und
den Speicher 33. Der Speicher 33 besitzt einen
Supervisor-Bereich, der ein Supervisorprogramm 34 umfasst,
und einen Zustandsinformationsbereich 35, und einen Benutzerbereich,
umfassend das Fehlersuchsollprogramm 24, und einen inneren
Sollarbeitsbereich 37.
-
Der ICE-Chip 32 führt dieselbe
Verarbeitung wie der VLIW Prozessor 22 entsprechend Instruktionen,
geschickt von dem Host-Computer 10 aus über die parallele Leitung 31,
durch.
-
Das Supervisorprogramm umfasst ein
Unterbrechungspunkteinstellwerkzeug zum Einstellen von Unterbrechungspunkten,
ein Führungswerkzeug zum
Speichern einer Adresse jeder Operation, ausgeführt durch den ICE-Chip 32,
als Ausführungshistorie-Informationen, und
ein Unterbrechungseinstellwerkzeug zum Überwachen, ob ein vorbestimmter Zustand,
eingestellt durch den Programmierer, erfüllt ist, und zum Erzeugen eines
Unterbrechungssignals, wenn der Zustand erfüllt ist.
-
Der Zustandsinformationsbereich 35 ist
ein Speicherbereich, verwendet als ein Arbeitsbereich, für das Supervisorprogramm 34,
und speichert Adressen der eingestellten Unterbrechungspunkte, Unterbrechungspunktinformationen,
die darstellen, ob eine Operation an jedem Unterbrechungspunkt durchgeführt werden
soll, die Ausführungshistorie-Informationen, die
Adressen von ausgeführten
Operationen in dem Fehlersuchsollprogramm 24 zeigen, und
Unterbrechungssignalerzeugung-Zustandsinformationen; die den vorbestimmten
Zustand, eingestellt durch den Programmierer, zum Erzeugen des Unterbrechungssignals,
zeigen.
-
Der innere Sollarbeitsbereich 37 wird
für die Operation
des Fehlersuchsollprogramms 24 verwendet.
-
Die Simulator-Software 17 lässt den Host-Prozessor 14 den
VLIW Prozessor 22 simulieren. Bei der Simulation speichert
der Speicher 15 das Supervisorprogramm 34, den
Zustandsinformationsbereich 35, das Fehlersuchsollprogramm 24 und
den inneren Sollarbeitsbereich 37, entsprechend wie der Speicher 33 in
der ICE-Leiterplatte 30. Die Simulator-Software 17 lässt das
Fehlersuchsollprogramm 24 entsprechend den Instruktionen
von der Anzeige 11 und dem Tastenfeld 12 laufen
und hält
es an. Die Simulator-Software 17 liest/schreibt Werte von dem/in
den Speicher 15 unter einer erwünschten Zeitabstimmung entsprechend
Instruktionen von der Anzeige 11 und dem Tastenfeld 12.
-
In der Testhilfevorrichtung kann
entweder die Simulator-Software 17, der ROM-Emulator 20 oder die
ICE-Leiterplatte 30 dazu verwendet werden, das Fehlersuchsollprogramm 24 zu
testen. Allerdings haben die Simulator-Software 17, der
ROM-Emulator 20 und die ICE-Leiterplatte 30 jeweils
die folgenden Vorteile und Nachteile. Dementsprechend muss der Programmierer
den geeignetesten einen entsprechend einem Typ einer Fehlersuche,
unter Berücksichtigung
dieser Vorteile und Nachteile, auswählen.
-
Da der ROM-Emulator 20 grundsätzlich dazu vorgesehen
ist, das Fehlersuchsollprogramm 24 zu überwachen, ist er zum Durchführen einer
relativ einfachen Prüfung
und Fehlersuche eines Versuchs-Modells einer vorgesehenen Maschine
geeignet. Andererseits ist der ROM-Emulator 20 nicht für komplexes
Fehlersuchen geeignet, da der Speicher 26 nicht das Unterbrechungspunkteinstellwerkzeug, das
Spurführungswerkzeug
und das Unterbrechungseinstellwerkzeug speichert.
-
Da die ICE-Leiterplatte 30 das
Unterbrechungspunkteinstellwerkzeug, das Spurführungswerkzeug und das Unterbrechungseinstellwerkzeug in
dem Supervisorprogramm 34 besitzt, ist es zum Durchführen einer
komplexen Fehlersuche unter Verwendung dieser Werkzeuge geeignet.
Andererseits kann, wenn die ICE-Leiterplatte 30 einen Schaltkreisaufbau
unterschiedlich zu der vorgesehenen Maschine besitzt, deren Fehlersuche
nicht dahingehend angesehen werden, dass sie vollständig ist,
gerade wenn das Fehlersuch sollprogramm normal zu arbeiten scheint,
und zwar als Folge der Fehlersuche durch die ICE-Leiterplatte 30.
Auch ist die Verdrahtung auf der ICE-Leiterplatte 30 manchmal
länger
als bei der vorgesehenen Maschine selbst, was dazu führt, eine
Zeitverzögerung
zwischen Schaltungselementen zu verursachen.
-
Die Simulator-Software 17 besitzt
das Unterbrechungspunkteinstellwerkzeug, das Spurführungswerkzeug
und das Unterbrechungseinstellwerkzeug in dem Speicher 15,
wie dies bei der ICE-Leiterplatte 30 der Fall ist. Demzufolge
ist sie in der Lage, die komplexe Fehlersuche unter Verwendung dieser Werkzeuge
durchzuführen.
Andererseits ist, da die Simulator-Software 17 in dem Host-Computer 10 arbeitet,
die Betriebsweise des Fehlersuchsollprogramms 24 in dem
Host-Computer 10 viel langsamer als diejenige des ROM-Emulators 20 und
der ICE-Leiterplatte 30. Zum Beispiel nimmt dieselbe Verarbeitung
mehrere Minuten oder mehr in dem Host-Computer 10 in Anspruch,
während
sie nur eine Sekunde in dem ROM-Emulator 20 oder der ICE-Leiterplatte 30 in
Anspruch nimmt.
-
Instruktionsformat
-
Das Nachfolgende ist eine Erläuterung
von Instruktionen, die das Fehlersuchsollprogramm 24 zusammensetzen.
-
Die Instruktionen, die das Fehlersuchsollprogramm 24 zusammensetzen,
besitzen jeweils 32 Bits und können
drei Operationen maximal umfassen, die durch den VLIW Prozessor 22 parallel
verarbeitet werden können.
In dieser Beschreibung bezieht sich der Ausdruck „Instruktion"
auf einen Satz von Coden, die durch den VLIW Prozessor 22 simultan
und parallel ausgeführt
werden, während
sich der Ausdruck „Operation"
auf eine Einheit einer Verarbeitung bezieht, wie beispielsweise
eine arithmetische Operation, eine logische Operation, oder eine Übertragung, die
durch den VLIW Prozessor 22 parallel ausgeführt wird,
ebenso wie auf einen Code, der jede Einheit einer Verarbeitung anzeigt.
-
Um die bestmögliche Verwendung der Parallelverarbeitungsfähigkeit
des VLIW Prozessors 22 vorzunehmen, werden eine Konstantenteilungsverarbeitung
und eine Ablaufplanungsverarbeitung an dem Fehlersuchsollprogramm 24 während einer Kompilierung
durchgeführt.
Als Folge werden die folgenden Änderungen
von dem Zwischenbeschreibungsprogramm in dem Fehlersuchsollprogramm 24 gesehen.
-
Die erste Änderung ist diejenige, dass
jede Instruktion, die eine Langwortkonstante von 32 Bits oder 24
Bits Unterinstruktionen in dem Zwischenbeschreibungsprogramm umfasst,
in mindestens eine Teilkonstantenverschiebung und Speicheroperation und
eine Benutzungsoperation für
eie gespeicherte Konstante umgewandelt wird.
-
Die Teilkonstantenverschiebungs-
und Speicheroperation besitzt eine Teilkonstante als einen Operanden,
von k Teilkonstanten, erzeugt durch Teilung einer Langwortkonstante,
umfasst in einer Instruktion in dem Zwischenbeschreibungsprogramm. Wenn
die Langwortkonstante in die k Teilkonstanten unterteilt ist, werden
(k-1) Teilkonstantenverschiebungs- und Speicheroperationen in das
Fehlersuchsollprogramm 24 geschrieben.
-
Die Benutzungsoperation für die gespeicherte
Konstante besitzt eine Teilkonstante niedrigster Ordnung, unter
den k Teilkonstanten, als einen Operanden, und spezifiziert eine
Operation, wie beispielsweise eine arithmetische Operation, eine
logische Operation, oder eine Übertragung,
um durch den VLIW Prozessor 22 ausgeführt zu werden.
-
Das Nachfolgende ist eine Erläuterung
darüber,
wie Teilkonstanten gemäß der Teilkonstantenverschiebungs-
und Speicheroperationen gespeichert werden, und wie die gespeicherten
Teilkonstanten entsprechend der Benutzungsoperation für die gespeicherte
Konstante verwendet werden.
-
Der VLIW Prozessor 22 decodiert
die erste Teilkonstantenverschiebe- und Speicheroperation und speichert
eine Teilkonstante, umfasst in der ersten Teilkonstantenverschiebe-
und Speicheroperation, in ein Konstantenregister 76, das
ein zugeordnetes Register ist, umfasst in dem VLIW Prozessor 22.
-
Als nächstes decodiert der VLIW Prozessor 22 die
zweite Teilkonstanten- und Speicheroperation, lässt das Konstantenregister 76 die
gespeicherte Teilkonstante zu einer höheren Position verschieben, und
speichert eine Teilkonstante, umfasst in der zweiten Teilkonstantenverschiebe-
und Speicheroperation, in die niedrigste Position in dem Konstantenregister 76 hinein.
-
Die vorstehende Verarbeitung wird
für die anderen
Teilkonstantenverschiebe- und Speicheroperationen wiederholt. Beim
Decodieren aller der Vielzahl von Teilkonstantenverschiebe- und
Speicheroperationen decodiert der VLIW Prozessor 22 die gespeicherte
Konstantenbenutzungsoperation und lässt das Konstantenregister 76 alle
Teilkonstanten, gespeichert in der vorstehenden Verarbeitung, zu
der höheren
Position verschieben. Der VLIW Prozessor 22 speichert dann
eine Teilkonstante, umfasst in der gespeicherten Konstantenbenutzungsoperation,
in die niedrigste Position in dem Konstantenregister 76, und
führt eine
Operation, spezifiziert durch die Benutzungsoperation für die gespeicherte
Konstante, durch, wie beispielsweise eine arithmetische Operation,
eine logische Operation oder eine Übertragung, unter Verwendung
aller Teilkonstanten, gespeichert in dem Konstantenregister 76.
-
Die zweite Änderung ist diejenige, dass
die Instruktionsausführungsreihenfolge
in dem Fehlersuchsollprogramm 24 zu derjenigen des Zwischenbeschreibungsprogramms, eingestellt
durch den Programmierer, unterschiedlich ist, da die Ablaufplanung durchgeführt worden
ist, als eine Zusammenstellung des Zwischenbeschreibungsprogramms
erfolgte. Hierbei umfasst jede Instruktion, die das Fehlersuchsollprogramm 24 zusammensetzt,
eine 32-Bit Langwortinstruktion, die drei Operationen maximal umfasst.
Demzufolge wird jede Instruktion, geschrieben in dem Zwischenbeschreibungsprogramm,
in Operationen zum Zeitpunkt der Kompilierung umgewandelt, und die
erzeugten Operationen in Einheiten von drei Maximalwerten in eine
Langwortinstruktion in dem Fehlersuchsollprogramm 24 hinein
zusammengestellt.
-
In der Ablaufplanung wird die Operationsausführungsreihenfolge
so geändert,
um effizient Operationssequenzen zu einer Mehrzahl von Ausführungseinheiten
in dem VLIW Prozessor 22 zuzuführen, und Operationen, die
in einem Zyklus ausgeführt
werden können,
werden in dieselbe Instruktion hineingepackt.
-
Als Folge der Konstantenunterteilungsverarbeitung
und der Ablaufplanungsverar beitung, beschrieben vorstehend, wird
jede Instruktion, die eine Langwortkonstante in dem Quellenprogramm
besitzt, in eine Vielzahl von Operationen unterteilt, von denen jede
eine Teilkonstante besitzt, die dann in 32-Bit-Instruktionen ohne
Belassen eines Zwischenraums hineingepackt werden. Indem dies so
vorgenommen wird, wird die Größe des Fehlersuchsollprogramms 24 verringert.
-
Instruktionsformate des Fehlersuchsollprogramms 24 sind
so definiert, dass jede Instruktion einer Mehrzahl von Operationen
entsprechend zu der Teilkonstantenverschiebung und von Speicheroperationen
und/oder den Benutzungsoperationen für gespeicherte Konstanten umfasst.
Die Instruktionsformate sind in 4A dargestellt.
-
In der Figur ist jede 32-Bit-Instruktion
in acht 4-Bit-Felder unterteilt, die von den höchsten sind, ausgedrückt als
p0.0, p1.0, p2.0, p2.1, p2.2, p3.0, p3.1 und p3.2.
-
Wenn p0.0 und p1.0, die den höchsten 8
Bits einer 32-Bit-Instruktion entsprechen, beide bei „0x0" eingestellt
sind, wird eine Teilkonstantenverschiebungs- und Speicheroperation
mit einem 32-Bit-Teilkonstantenoperanden (der Operationscode ist „SFST12"
in einem mnemonischen Code) in p2.0-p2.2 (erstes Operationsfeld)
eingestellt, und eine Zwischenregisteroperation wird in p-3.0-p3.2 (zweites
Operationsfeld) eingestellt.
-
Wenn p0.0 und p1.0 jeweils bei „0x0" und „0x1" eingestellt
sind, wird eine Teilkonstantenverschiebungs- und Speicheroperation
mit einem 12-Bit-Teilkonstantenoperanden in dem ersten Operationsfeld
eingestellt, und eine Operation, die einen 4-Bit-Teilkonstantenoperanden verwendet, wird
in dem zweiten Operationsfeld eingestellt.
-
Wenn p0.0 und p1.0 jeweils bei „0x0" und „0x2" eingestellt
sind, wird eine Zwischenregisteroperation in dem ersten Operationsfeld
eingestellt und eine Teilkonstantenverschiebungs- und Speicheroperation
mit einem 12-Bit-Teilkonstantenoperanden wird in dem zweiten Operationsfeld
eingestellt.
-
Wenn p0.0 und p1.0 jeweils bei „0x0" und „0x3" eingestellt
sind, wird eine Operation, die einen 4-Bit-Teilkonstantenoperanden
verwendet, in dem ersten Operationsfeld eingestellt, und eine Teilkonstantenverschiebungs-
und Speicheroperation mit einem 12-Bit-Teilkonstantenoperanden wird in dem zweiten
Operationsfeld eingestellt.
-
Wenn p0.0 und p1.0 jeweils bei „0x0" und „0x8" eingestellt
sind, wird eine Teilkonstantenverschiebungs- und Speicheroperation
mit einem 12-Bit-Teilkonstantenoperanden in dem ersten Operationsfeld
eingestellt, und eine Teilkonstantenverschiebungs- und Speicheroperation
mit einem 12-Bit-Teilkonstantenoperanden wird in dem zweiten Operationsfeld
eingestellt (der Operationscode ist „SFST24" in einem mnemonischen
Code).
-
Das erste Operationsfeld und das
zweite Operationsfeld können
jeweils einen Teilkonstantenoperanden von entweder 4 oder 12 Bits
haben. Dementsprechend können
das erste und das zweite Operationsfeld Teilkonstanten von 24 Bits
(12 + 12) oder 16 Bits (4 + 12 oder 12 + 4) umfassen. Auch kann
das erste Operationsfeld das p1.0 Feld Teilkonstanten von 8 Bits
umfassen. Das bedeutet, dass eine Instruktion Teilkonstanten hat,
die 4 Bits, 8 Bits (4 + 4), 12 Bits, 16 Bits (4 + 12) oder 24 Bits
(12 + 12) lang sind. Demzufolge werden Operationen kombiniert, um
eine Konstante von sich ändernder
Länge zu
bilden.
-
Wenn eine Kombination 32 Bits übersteigt, wie
beispielsweise die Kombination von drei 12-Bit Teilkonstanten (36
Bits), werden darüber
hinausgehende Bits höherer
Ordnung ignoriert. Andererseits wird, wenn die Kombination nicht
32 Bits erreicht, eine Vorzeichenerweiterung oder eine Null-Erweiterung
in Bezug auf die Kombination entsprechend jedem Operationstyp durchgeführt.
-
4B stellt
Instruktionsformate des ersten Operationsfelds oder des zweiten
Operationsfelds dar, wenn eine Zwischenregisteroperation in dem ersten
oder dem zweiten Operationsfeld eingestellt wird.
-
Wenn p2.0 (p3.0) bei „0x0" eingestellt
wird, werden Registernummern (n) und (m) eines allgemeinen Registers 75 in
dem VLIW Prozessor 22 jeweils in p2.1 (p3.1) und p2.2 (p3.2)
eingestellt. Hierbei dient die Operation, ausgedrückt durch
den mnemonischen Code „ADD
Rn, Rm", dazu, den VLIW Prozessor 22 zu instruieren, Werte
von Registern Rn und Rm hinzuzufügen
und das Ergebnis zu dem Register Rm zu übertragen.
-
Wenn p2.0 (p3.0) bei „0x1" eingestellt
ist, werden Registerzahlen (n) und (m) jeweils in p2.1 (p3.1) und
p2.2 (p3.2) eingestellt. Hierbei dient die Operation, ausgedrückt durch
den mnemonischen Code „ADDX
Rn, Rm", dazu, den VLIW Prozessor 22 zu instruieren, Werte
der Register Rn und Rm hinzuzufügen
und das Additionsergebnis zu dem Register Rx zu übertragen.
-
Wenn p2.0 (p3.0) bei „0x5" eingestellt
ist, wird keine Operation spezifiziert (mnemonischer Code „NOP").
-
4C stellt
die Instruktionsformate des ersten (zweiten) Operationsfelds dar,
wenn eine 4-Bit-Teilkonstantenbenutzungsoperation in dem ersten
(zweiten) Operationsfeld eingestellt ist.
-
Wenn p2.0 (p3.0) bei „0x0" eingestellt
ist, wird eine 4-Bit-Teilkonstante in p2.1 (p3.1) eingestellt, und
eine Registerzahl (m) wird in p2.2 (p3.2) eingestellt. Hierbei wird
die Operation durch den mnemonischen Code „ADD imm4, Rm" ausgedrückt.
-
Wenn p2.0 (p3.0) bei „0x1" eingestellt
ist, wird eine 4-Bit-Teilkonstante in p2.1 (p3.1) eingestellt, und
eine Registerzahl (m) wird in p2.2 (p3.2) eingestellt. Hierbei wird
die Operation durch den mnemonischen Code „ADDX imm4, Rm" ausgedrückt.
-
Wenn p2.0 (p3.0) bei „0x2" eingestellt
ist, wird eine 4-Bit-Teilkonstante in p2.1 (p3.1) eingestellt, und
eine Registerzahl (m) wird in p2.2 (p3.2) eingestellt. Hierbei wird
die Operation durch den mnemonischen Code „MOV imm4, Rm" ausgedrückt.
-
Wenn p2.0 (p3.0) bei „0x3" eingestellt
ist, wird eine 4-Bit-Teilkonstante in p2.1 (p3.1) eingestellt, und
eine Registerzahl (m) wird in p2.2 (p3.2) eingestellt. Hierbei wird
die Operation durch den mnemonischen Code „CMP imm4, Rm" ausgedrückt.
-
Wenn p2.0 (p3.0) bei „0x4" eingestellt
ist, wird eine 4-Bit-Teilkonstante in p2.1 (p3.1) eingestellt, und
eine Registerzahl (m) wird in p2.2 (p3.2) eingestellt. Hierbei wird
die Operation durch den mnemonischen Code „SUB imm4, Rm" ausgedrückt.
-
Wenn p2.0 (p3.0) bei „0x5" eingestellt
ist, wird eine 4-Bit-Teilkonstante in p2.1 (p3.1) eingestellt, und
eine Registerzahl (m) wird in p2.2 (p3.2) eingestellt. Hierbei wird
die Operation durch den mnemonischen Code „MOVU imm4, Rm" ausgedrückt.
-
Wenn p2.0 (p3.0) bei „0x7" eingestellt
ist, wird eine 4-Bit-Teilkonstante in p2.1 (p3.1) eingestellt, und
eine Registerzahl (m) wird in p2.2 (p3.2) eingestellt. Hierbei wird
die Operation durch den mnemonischen Code „ST Rm, (imm4)" ausgedrückt.
-
Wenn p2.0 (p3.0) bei „0xA" eingestellt
ist, wird eine 4-Bit-Teilkonstante in p2.1 (p3.1) eingestellt, und
eine Registerzahl (m) wird in p2.2 (p3.2) eingestellt. Hierbei wird
die Operation durch den mnemonischen Code „LD (imm4), Rm" ausgedrückt.
-
Unter den vorstehenden Operationen
stellen die 12-Bit-Teilkonstantenverschiebungs-
und Speicheroperation (SFST12) und die 24-Bit-Teilkonstantenverschiebungs- und Speicheroperation
(SFST24) die Teilkonstantenverschiebungs- und Speicheroperation
dar, während
die 4-Bit-Teilkonstantenbenutzungsoperation (dargestellt in 4C) und die 8-Bit-Teilkonstantenbenutzungsoperation
die gespeicherte Konstantenbenutzungsoperation darstellen.
-
Innerer Aufbau eines VLIW
Prozessors 22
-
Das Nachfolgende ist eine Erläuterung
des inneren Aufbaus des VLIW Prozessors 22, der maximal
drei Operationen parallel ausführen
kann, und zwar unter Bezugnahme auf 3.
In der Figur kann der Aufbau des VLIW Prozessors 22 grob
in ein Instruktionsregister 60, eine Decodierereinheit 61 und eine
Ausführungseinheit 67 unterteilt
werden.
-
Das Instruktionsregister 60 ist
ein 32-Bit-Register, das eine Instruktion speichert, die von einer
Instruktionsabrufeinheit 73 aus geschickt worden ist.
-
Die Decodierereinheit decodiert die
Instruktionen, gehalten in dem Instruktionsregister 60,
und gibt Steuersignale zu der Ausführungseinheit 67 entsprechend
dem Decodierergebnis aus. Diese Decodierereinheit 61 kann
selbst grob in einen Formatdecodierer 62 und einen Instruktionsdecodierer 63 unterteilt
werden.
-
Der Instruktionsdecodierer 63 ist
aus einem Verzweigungsdecodierer 64, der einen Operationscode
decodiert, gehalten in dem p1.0 Feld, und einer PC-Einheit 69 entsprechend
steuert, einen ersten Operationsdecodierer 65, der einen
Operationscode, gehalten in dem p2.0 Feld decodiert und eine erste Operationseinheit 71 entsprechend
steuert, und einen zweiten Operationsdecodierer 66, der
einen Operationscode, gehalten in dem p3.0 Feld, decodiert und eine
zweite Operationseinheit 72 steuert, und eine Operandenzugriffseinheit 74 entsprechend, aufgebaut.
-
Der Formatdecodierer 62 decodiert
einen 4-Bit-Formatcode, gehalten in dem p0.0 Feld, um das Instruktionsformat
der Instruktion, gehalten in dem Instruktionsregister 60, als
eines der Mehrzahl der Instruktionsformate, dargestellt in 4A, zu identifizieren. Entsprechend
dem Decodierergebnis lässt der
Formatdecodierer 62 Decodieroperationen durch den Verzweigungsdecodierer 64,
den ersten Operationsdecodierer 65 und den zweiten Operationsdecodierer 66 zu
oder sperrt sie, und aktiviert eine Konstantenregistersteuereinheit
der Ausführungseinheit 67.
-
Der Verzweigungsdecodierer 64,
der erste Operationsdecodierer 65 und der zweite Operationsdecodierer 66 decodieren
grundsätzlich
eine Operation in einem Zyklus und schicken Steuersignale zu der
Ausführungseinheit 67.
-
Die Ausführungseinheit 67 arbeitet
entsprechend dem Decodierergebnis der Decodierereinheit 61,
und ist eine Schaltung, die in der Lage ist, maximal drei Operationen
parallel auszuführen.
Diese Ausführungseinheit 67 ist
aus einer Ausführungssteuereinheit 68,
der PC Einheit 69, einem Registersatz 70, der
ersten Operationseinheit 71, der zweiten Operationseinheit 72,
der Instruktionsabrufeinheit 73 und der Operandenzugriffseinheit 64 aufgebaut.
-
Die Ausführungssteuereinheit 68 ist
eine Steuerschaltung zum Steuern der Komponenten, umfasst in der
Ausführungseinheit 67,
entsprechend dem Decodierergebnis der Decodierereinheit 61. Diese
Ausführungssteuereinheit 68 umfasst
eine Konstantenregistersteuereinheit, die eine Steuerung so durchführt, dass
eine Konstante, gehalten in dem Instruktionsregister 60,
in dem Konstantenregister 76 gespeichert wird, und zwar
basierend auf Instruktionen, die durch den Formatdecodierer 62 gegeben sind.
-
Die PC (Program Counter – Programmzähler) Einheit 69 arbeitet
unter der Steuerung des Verzweigungsdecodierers 64, und
gibt eine Adresse in dem Speicher 26 der nächsten Instruktion
aus, um decodiert und ausgeführt
zu werden, und zwar zu der Instruktionsabrufeinheit 73 hin.
-
Die Instruktionsabrufeinheit 73 ruft
einen Instruktionsblock, umfasst in dem Monitorprogramm 23 oder
dem Fehlersuchsollprogramm 24, von dem Speicher 26 über einen
32-Bit-IA-(Instruction Adress)-Bus
und einen 32-Bit-ID-(Instruction Data)-Bus ab. Die Instruktionsabrufeinheit 73 speichert den
abgerufenen Instruktionsblock in einem internen Instruktionschachespeicher
und führt
die Instruktion, die der Adresse entspricht, ausgegeben durch die
PC Einheit 69, zu dem Instruktionsregister 60 zu.
-
Der Registersatz 70 ist
aus sechzehn 32-Bit-Allgemeinregistern 75 und einem 32-Bit-Konstantenregister 76 aufgebaut.
Entsprechend den Decodierergebnissen des ersten Operationsdecodierers 65 und
des zweiten Operationsdecodierers 66 werden Werte, die
in diesenen Registern 75 und 76 gespeichert sind,
zu der ersten Operationseinheit 71 und der zweiten Operationseinheit 72 übertragen. Hierbei
werden die Operationen durchgeführt,
oder alternativ wird zugelassen, dass die Werte hindurchführen, bevor
sie zu dem Registersatz 70 oder der Operandenzugriffseinheit 74 geschickt
werden. Werte, gespeichert in dem Konstantenregister 76,
werden in den Operationen, durchgeführt durch die erste Operationseinheit 71 und
die zweite Operationseinheit 72, verwendet, während die
Werte auch zu der PC Einheit 79 übertragen werden, wo sie dazu
verwendet werden, eine effektive Adresse für eine Verzweigungsbestimmung
zu erzeugen.
-
Die erste Operationseinheit umfasst
intern eine ALU (Arithmetic Logic Unit – Arithmetik-Logik-Einheit)
zum Durchführen
arithmetischer, logischer Operationen an zwei 32-Bit-Sätzen von Daten und einem Multiplizierer
zum Durchführen
von Multiplikationen in Bezug auf zwei 32-Bit-Sätzen von Daten. Diese erste
Operationseinheit 71 ist in der Lage, zwei Typen einer
Operation (nämlich
eine arithmetische, logische Operation und eine Zwischenregisterübertragungsoperation)
unter der Steuerung des ersten Operationsdecodierers 65 auszuführen.
-
Die zweite Operationseinheit 72 umfasst
intern eine ALU zum Durchführen
arithmetischer, logischer Operationen in Bezug auf zwei 32-Bit-Sätze an Daten
und einen Multiplizierer zum Durchführen von Multiplikationen in
Bezug auf zwei 32-Bit-Sätze
von Daten, und zwar in derselben Art und Weise wie die erste Operationseinheit 71.
Diese zweite Operationseinheit 72 ist in der Lage, zwei
Typen einer Operation (nämlich
eine arithmetische, logische Operation und eine Zwischenregisterübertragungsoperation)
unter der Steuerung des zweiten Operationsdecodierers 66 auszuführen.
-
Die Operandenzugriffseinheit 74 arbeitet
unter der Steuerung des zweiten Operationsdecodierers 66 und
ist eine Schaltung, die Operanden zwischen dem Registersatz 70 und
dem inneren Sollarbeitsbereich 25 in dem Speicher 26 überträgt. Die Operandenzugriffseinheit 74 umfasst
intern einen Puffer zum Speichern von Operanden und Operanden-Adressen.
Als ein spezifisches Beispiel wird, wenn der Operationscode „1d" in
dem p3.1 Feld des Instruktionsregisters 60 vorhanden ist,
ein Wort von Daten, das in dem inneren Sollarbeitsbereich 25 angeordnet
ist, über
die Operandenzugriffseinheit 74 in eines der Register in
dem Registersatz 70 hinein eingeladen. Wenn der Operationscode „st" vor handen ist
wird, zwischenzeitlich, der gespeicherte Wert eines der Register
in dem Registersatz 70 in dem inneren Sollarbeitsbereich 25 hinein
gespeichert.
-
Es ist anzumerken, dass der ICE-Chip 32, der
den VLIW Prozessor 22 und den Host Prozessor 14 emuliert,
was den VLIW Prozessor 22 durch Ausführen der Simulator-Software 17 simuliert,
unterschiedliche Konstruktionen gegenüber derjenigen haben, die in 3 dargestellt ist. Allerdings
umfassen diese Konstruktionen nicht irgendeine neue Offenbarung
und demzufolge werden sie hier nicht in dieser Beschreibung erläutert.
-
Operation einer
Fehlersuchhilfsvorrichtung
-
Das Nachfolgende ist eine Erläuterung,
wie die Debug- bzw. Fehlersuchhilfsvorrichtung die Simulator-Software 17,
den ROM-Emulator 20 und die ICE-Leiterplatte 30 verwendet,
um das Debug- bzw. Fehlersuchsollprogramm 24 zu testen.
-
Gemäß der Eingabe, vorgenommen
durch den Programmierer über
das Tastenfeld 12, lässt
die Fehlersuchhilfsvorrichtung entweder die Simulator-Software 17,
den ROM-Emulator 20 oder
die ICE-Leiterplatte 30 das Fehlersuchsollprogramm 24, an
einer Startadresse, spezifiziert durch den Programmierer, laufen,
und stoppt das Fehlersuchsollprogramm 24 an einer Stoppadresse,
spezifiziert durch den Programmierer. Die Fehlersuchhilfsvorrichtung
lässt auch
entweder die Simulator-Software 17, den ROM-Emulator 20 oder
die ICE-Leiterplatte 30 Werte von dem/in den Speicher lesen/schreiben, wenn
sich das Fehlersuchsollprogramm 24 in dem angehaltenen
Zustand befindet.
-
In der vorstehenden Verarbeitung
lässt die Testhilfsvorrichtung
bzw. die Fehlersuchhilfsvorrichtung die Anzeige 11 Informationen über das
Fehlersuchsollprogramm 24 anzeigen und speichert Werte des
Speichers, geschrieben als mnemonischer Code, zusammen mit Informationen über Quellencode des
Fehlersuchsollprogramms 24, um dem Programmierer zu helfen,
die Fehlersuchverarbeitung zu verstehen.
-
Diese Fehlersuchhilfsvorrichtung
wird durch Installieren der Fehlersucheinrichtungs-Software in dem Host-Computer 10 realisiert.
Hierbei wird die Fehlersucheinrichtungs-Software in einem Speichermedium gespeichert,
wie beispielsweise dem Speichermedium 40, dargestellt in 2B, und die im Markt als
eine Package-Software vertrieben wird.
-
Im Hinblick auf die vorstehende Charakteristik
der Testhilfsvorrichtung ist es geeigneter, auf die Fehlersucheinrichtungs-Software,
gespeichert in dem Speichermedium, Bezug zu nehmen, im Gegensatz
dazu, auf die Hardware-Versorgung (wie beispielsweise der Prozessor
und der Speicher) Bezug zu nehmen, umfasst in dem Host Computer,
als die Funktions-Entität
der Testhilfevorrichtung. Ähnlich sollte,
da eine Software (wie beispielsweise die Fehlersucheinrichtungs-Software),
die für
eine komplexe Verarbeitung entwickelt worden ist, gewöhnlich aus einer
Mehrzahl von Unterprogrammen und Arbeitsbereichen zusammengesetzt,
wobei jedes Unterprogramm und jeder Arbeitsbereich, umfasst in der
Fehlersucheinrichtungs-Software, als die Komponenten der Testhilfevorrichtung
angesehen werden sollten. Demzufolge werden die Unterprogramme und
die Arbeitsbereiche, die die Funktionen der Testhilfevorrichtung
und der Programmkompiliervorrichtung zusammensetzen, als die Komponenten
jeder Vorrichtung der vorliegenden Ausführungsform angesehen.
-
5 stellt
den funktionalen Aufbau der Testhilfevorrichtung 41 aus
der vorstehenden Sichtweise dar. In der Figur umfasst die Testhilfs-
bzw. Fehlersuchhilfsvorrichtung 41 eine Fehlersuchinformationsspeichereinheit 42,
eine Benutzerschnittstelle 44, eine Grafikbenutzerschnittstelle 45,
einen Befehlinterpretierer 46, eine Ausführungscoderückumwandlungseinheit 47,
eine Ausführungscodeumwandlungseinheit 48,
eine Konstantenwiederherstellungseinheit 49, eine Konstantenänderungseinheit 50 und
eine Sollschnittstelle 51. Hierbei stellen die Benutzerschnittstelle 44,
die Grafikbenutzerschnittstelle 45 und der Befehlinterpretierer 46 die
Eingabeanalyseeinheit 43 zusammen.
-
Die Sollschnittstelle 51 speichert
intern entweder die Simulator-Software 17, den ROM-Emulator 20 oder
die ICE-Karte 30 zum Ausführen des Fehlersuchsollprogramms 24 (in
der vorliegenden Ausführungsform
entweder die Simulator-Software 17, den ROM-Emulator 20 oder
die ICE-Karte 30, die das Fehlersuchsollprogramm 24 ausführt, wird
als „Arbeitsumgebung"
bezeichnet). Wenn die anderen Komponenten der Testhilfevorrichtung 41 Befehle
erzeugen, wie beispielsweise einen Lauf-Befehl, einen Stopp-Befehl,
einen Lese-Befehl und einen Schreib-Befehl, schickt die Sollschnittstelle 51 diese Befehle
zu der Arbeitsumgebung.
-
Die Fehlersuchinformationsspeichereinheit 42 speichert
Fehlersuchinformationen, die zusammen mit dem Fehlersuchsollprogramm 24 erzeugt sind. 6 stellt ein beispielhaftes,
logisches Format der Fehlersuchinformationen dar.
-
In der Figur sind die Fehlersuchinformationen
aus Dateiidentifikationsinformationen 801, Ausführungscodeinformationen 802,
Identifiziererinformationen 803, Quellendateiinformationen 804,
Zeilenzahlinformationen 805, Typinformationen 806 und Konstantenteilungsinformationen 807 aufgebaut.
-
Die Dateiidentifikationsinformationen 801 zeigen
einen Prozessor-Typ, der zum Ausführen des Fehlersuchsollprogramms 24 geeignet
ist, und eine Version einer Programmkompilier-Software einer Programmkompiliervorrichtung,
die das Quellenprogramm zu dem Fehlersuchsollprogramm 24 hin
zusammenstellt.
-
Die Ausführungscodeinformationen 802 stellen
eine Korrespondenztabelle zwischen mnemonischen Coden und Ausführungscoden
dar.
-
Die Identifiziererinformationen 803 stellen eine
Korrespondenztabelle zwischen Identifizierern und deren Werten dar.
Ein Beispiel der Identifiziererinformationen 803 ist oben
rechts in der Figur dargestellt. In dem Beispiel entspricht ein
Identifizierer _a einem 32-Bit-Wert „0x00001000", während ein
Identifizierer _b einem 32-Bit-Wert „0x00001004" entspricht.
-
Die Quellendateiinformationen 804 stellen einen
Namen des Quellenprogramms und seine Sprache ebenso wie Adressen
von Ausführungscoden,
erzeugt durch Zusammenstellen des Quellenprogramms, dar.
-
Die Zeilenzahlinformationen 805 stellen
eine Korrespondenztabelle zwischen Zeilenzahlen von Angaben, geschrieben
in dem Quellenprogramm, und Adressen von Ausführungscoden, erzeugt durch Zusammenstellen
der Angaben, dar.
-
Die Typinformationen 806 stellen
Identifizierertypen dar.
-
Die Konstantenteilungsinformationen 807 werden
zum Identifizieren einer originalen Langwortkonstanten, geschrieben
in dem Quellenprogramm, von Teilkonstanten, die als Operanden in
der Teilkonstantenverschiebungs- und Speicheroperation und der Benutzeroperation
der gespeicherten Konstanten in dem Fehlersuchsollprogramm 24 verwendert
werden, gespeichert.
-
Beispiele der Konstantenteilungsinformationen 807 sind
in der Mitte und unten rechts in 6 dargestellt.
-
In jedem Beispiel sind die Konstantenteilungsinformationen
aus Konstantentypinformationen 601, die darstellen, ob
die Langwortkonstante als eine Zahl oder ein Identifizierer ausgedrückt ist,
Konstantenwertinformationen 602, die den Konstantenwert
in einer hexadezimalen Angabe darstellen, Unterkonstantenteilinformationen 603,
die den Wert k darstellen, wo die Konstante in k Teilkonstanten
unterteilt worden ist, Konstantenteilungsbitpositionsinformationen 604,
die alle Bitpositionen darstellen, an denen die Konstante geteilt
worden ist, Teilkonstantenbitlängeninformationen 605,
die eine Bitlänge
jeder Teil konstanten darstellen, und Teilkonstantenverwendungsoperations-Adresseninformationen 606, die
eine Adresse jeder Operation darstellen, die eine der Teilkonstanten
verwendet, aufgebaut. Jede Operationsadresse, dargestellt in den
Teilkonstantenbenutzungsoperations-Adresseninformation 606 wird durch
eine Kombination einer Adresse einer Instruktion, die die Operation
umfasst, und einer seriellen Nummer zum Spezifizieren der Operation
in der Instruktion, wenn die Instruktion eine Vielzahl von Operationen
umfasst, ausgedrückt.
-
Die Fehlersuchinformationen in 6 umfassen vier Sätze an Konstantenteilungsinformationen
jeweils, die sich auf Konstanten „0x12345678", „0x00001000", „0x00001004"
und „0x87654321"
beziehen. Die Beispiele der Konstantenteilungsinformationen 807,
dargestellt in der Figur, beziehen sich auf die Konstanten „0x12345678"
und „0x00001000".
-
In den Konstantenteilungsinformationen 807 für die Konstante „0x12345678"
stellen die Konstantentypinformationen 601 dar, dass die
Konstante als eine Zahl ausgedrückt
wird, die Konstantenwertinformationen 602 stellen dar,
dass der Konstantenwert „0x12345678"
ist, und die Teilkonstantenzahlinformationen 603 stellen
dar, dass k der Wert 2 ist, wenn die Konstante in k Teilkonstanten
unterteilt worden ist. Die Konstantenteilungsbitpositionsinformationen 604 stellen
dar, dass die Konstante an dem 8. Bit und dem 0. Bit von der untersten
Bitposition unterteilt worden ist, und die Teilkonstantenbitlängeninformationen 605 stellen
dar, dass die erste und die zweite Teilkonstante, erhalten durch
Teilung der Konstanten, jeweils 24 Bits und 8 Bits haben. Die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 zeigen,
dass die erste Teilkonstante in der 0. Operation in der Instruktionsadresse
0x80000000 umfasst ist und die zweite Teilkonstante in der 0. Operation
in der Instruktionsadresse 0x80000004 umfasst ist.
-
In den Konstantenteilungsinformationen 807 für die Konstante „0x00001000"
stellen die Konstantentypinformationen 601 dar, dass die
Konstante als ein Identifizierer ausgedrückt ist, die Konstantenwertinformationen 602 stellen
dar, dass der Konstantenwert „0x00001000"
ist, und die Teilkonstantenzahlinformationen 603 stellen
dar, dass k den Wert 2 hat, wenn die Konstante in k Teilkonstanten
unterteilt worden ist. Die Konstanten und Teilungsbitpositionsinformationen 604 stellen
dar, dass die Konstante an dem 8. Bit und dem 0. Bit von der untersten
Bitposition unterteilt worden ist, und die Teilkonstantenbitlängeninformationen 605 stellen
dar, dass die erste und die zweite Teilkonstante, er halten durch
Teilung der Konstanten, jeweils 24 Bits und 8 Bits haben. Die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 stellen
dar, dass die erste Teilkonstante in der 0. Operation in der Instruktionsadresse 0x8000000B
umfasst ist und die zweite Teilkonstante in der 0.Operation in der
Instruktionsadresse 0x80000000C umfasst ist.
-
Wenn die Konstantentypinformationen 601 „Identifizierer"
darstellen, wird auf die Identifiziererinformation 803 Bezug
genommen, wo jeder Konstantenwert einem Identifizierer, geschrieben
in dem Quellenprogramm, zugeordnet ist. Entsprechend den Beispiel-Identifizierer-Informationen 803,
dargestellt in 6, wo
der Wert „0x00001000"
einem Identifizierer _a entspricht, wird der Identifizierer für die Konstante „0x00001000"
als Identifizierer _a spezifiziert. Demzufolge werden die Konstantenteilungsinformationen 807 dazu
verwendet, die originale Konstante zu spezifizieren, und wenn die
Konstantentypinformationen 601 darstellen, dass die originale
Konstante als ein Identifizierer in dem Quellenprogramm ausgedrückt wird,
werden die Identifiziererinformationen 803 dazu verwendet,
den Identifizierer zu spezifizieren. In den Fehlersuchsinformationen
bzw. Debag-Informationen,
dargestellt in 6, werden
die Dateiidentifikationsinformationen 801 zu den Typinformationen 806 erzeugt,
wenn das Fehlersuchsollprogramm 24 erzeugt wird, und sie
sind seit diesem Zeitpunkt nicht geändert. Andererseits können die
Konstantenteilungsinformationen 807, erzeugt zusammen mit
dem Fehlersuchsollprogramm 24, während der Fehlersuche durch
die Fehlersuchhilfsvorrichtung 41 erneuert werden. Alternativ
können
die Konstantenteilungsinformationen 807 während der
Fehlersuche des Fehlersuchsollprogramms 24 erzeugt werden.
-
Das bedeutet, dass zu jedem Zeitpunkt,
zu dem ein Ausführungscode,
gespeichert in dem Speicher der Arbeitsumgebung, in der Fehlersuchsstufe geändert wird,
die Konstantenwertinformationen 602, die Teilkonstantenzahlinformationen 603,
die Konstantenteilungsbitpositionsinformationen 604, die
Teilkonstantenbitlängeninformationen 605 und die
Teilkonstantenbenutzungsoperations-Adresseninformationen 606 in
den Konstantenteilungsinformationen 807 entsprechend den Änderungen
erneuert werden. Diese Erneuerung der Konstantenteilungsinformationen
807 wird durch die Konstantenänderungseinheit 50 durchgeführt. Auch
werden, wenn die Fehlersuchinformationen nicht zusammen mit dem
Fehlersuchsollprogramm 24 er zeugt worden sind, die Konstantenteilungsinformationen 807 basierend
auf dem Ausführungscode,
gespeichert in dem Speicher der Arbeit sumgebung in der Fehlersuchstufe,
erzeugt. Diese Erzeugung der Konstantenteilungsinformationen 807 wird
durch die Konstantenwiederherstellungseinheit 49 durchgeführt.
-
Die Benutzerschnittstelle 44 lässt die
Anzeige 11 eine Fehlersuchbefehleingabeanforderung anzeigen
und empfängt
den Fehlersuchbefehl, eingegeben über das Tastenfeld 12.
Die Benutzerschnittstelle 44 führt direkt den eingegebenen
Fehlersuchbefehl zurück
und lässt
dann die Anzeige 11 ein Ausführungsergebnis des Fehlersuchbefehls
anzeigen.
-
7A stellt
eine Dialoganzeige, angezeigt auf der Anzeige 11, dar,
wenn die Benutzerschnittstelle 44 die vorstehende Verarbeitung
durchführt.
-
Die Dialoganzeige, dargestellt in
der Figur, umfasst eine Befehl-Zahl-Spalte, die eine Eingabefehlersuch-Befehlspalte,
eine Spalte für
eine absolute Adresse, die eine Adresse, spezifiziert als das Fehlersuchziel,
darstellt, eine Maschinensprachspalte, die binäre Daten, gespeichert in der
Adresse, darstellt, eine Spalte für einen ersten, mnemonischen Code,
die einen mnemonischen Code einer ersten Operation, erhalten durch
Zurückumwandeln
der binären
Daten, darstellt, eine Symbolspalte, die ein Parallelausführungssymbol „||" darstellt,
das anzeigt, dass dort zwei Operationen vorhanden sind, und eine Spalte
für einen
zweiten, mnemonischen Code, die einen mnemonischen Code einer zweiten
Operation darstellt.
-
Wenn der Programmierer den Fehlersuchbefehl über das
Tastenfeld 12 eingibt, wird der Fehlersuchbefehl durch
den Befehlinterpretierer 46 analysiert und durch die Arbeitsumgebung
ausgeführt.
Die Benutzerschnittstelle 44 lässt dann die Anzeige 11 das
Ausführungsergebnis
anzeigen.
-
In 7A stellt „0012>" in der Befehlzahlspalte
eine Anforderung dar, um den 12. Fehlersuchbefehl einzugeben, „UX" in
der Eingabefehlersuchbefehlspalte stellt dar, dass ein Rückumwandlungsbefehl
eingegeben worden ist, und „0x80000000, 0x80000018"
stellt eine Start-Adresse und eine Stopp-Adresse für die Rückumwandlung
dar.
-
In der ersten und der zweiten mnemonischen Code-Spalte
ist jeder mnemonische Code, in dem eine Teilkonstante gegen eine
originale Konstante ersetzt worden ist, farbmäßig codiert, um ihn von anderen,
mnemonischen Coden zu unterscheiden.
-
Die Benutzerschnittstelle 44 nimmt
auch auf Fehlersuchinformationen Bezug, die in der Fehlersuchinformationsspeichereinheit 42 gespeichert
sind, und lässt
die Anzeige 11 Informationen anzeigen, die sich auf das
Quellenprogramm in größerem Detail beziehen.
-
Hierbei prüft die Benutzerschnittstelle 44 die Fehlersuchsolladresse
gegenüber
den Quellendateiinformationen 804, spezifiziert das Quellenprogramm,
das der Adresse entspricht, und lässt die Anzeige 11 den
Namen und den Sprach-Typ des spezifizierten Quellenprogramms anzeigen.
Die Benutzerschnittstelle 44 liest auch Angabezeilenzahlen
entsprechend zu der Fehlersuchsolladresse von den Zeilenzahlinformationen 805 und
lässt die
Anzeige 11 die Zeilenzahlen anzeigen.
-
Wenn die Benutzerschnittstelle 44 den
Fehlersuchbefehl empfängt,
analysiert der Befehlinterpretierer 46 den Fehlersuchbefehl
und steuert die Arbeitsumgebung entsprechend dem Analyseergebnis.
-
Hierbei steuert, wenn der Fehlersuchbefehl ein
Befehl ist, das Fehlersuchsollprogramm 24 laufen zu lassen/zu
stoppen, der Befehlinterpretierer 46 die Arbeitsumgebung,
um das Fehlersuchsollprogramm 24 taufen zu lassen/zu stoppen.
-
Wenn der Fehlersuchbefehl ein Rückumwandlungsbefehl
für einen
spezifizierten Bereich ist, gibt der Befehlinterpretierer 46 einen
Lesebefehl aus, der eine Startadresse und eine Datenlänge spezifiziert,
und zwar zu der Arbeitsumgebung, die entsprechend Ausführungscode,
gespeichert in dem spezifizierten Bereich von dem Speicher, liest.
-
Wenn der Fehlersuchbefehl ein Änderungsbefehl
mit einer Schreibbestimmungsadressenspezifikation ist und ein neuer,
mnemonischer Code, der geschrieben werden soll, über das Tastenfeld 12 eingegeben
wird, lässt
der Interpretierer 46 die Ausführungscodeumwandlungseinheit 48 den
mnemonischen Code in einen Ausführungscode
umwandeln und gibt einen Schreibbefehl aus, der eine Startadresse
und eine Datenlänge
zu der Arbeitsumgebung spezifiziert, die entsprechend den neuen
Ausführungscode
in die Schreibbestimmungsadresse in den Speicher hineinschreibt.
-
Wenn der Programmierer den Rückumwandlungsbefehl
eingibt, und die Arbeitsumgebung binäre Daten, gelesen von dem Speicher,
zu der Ausführungscoderückumwandlungseinheit 47 ausgibt,
beurteilt die Ausführungscoderückumwandlungseinheit 47,
ob die binären
Daten ein Programmcode oder ein Datencode sind. Wenn die binären Daten
ein Programmcode sind, wandelt die Ausführungscoderückumwandlungseinheit 47 die
binären
Daten zu einem mnemonischen Code entsprechend den Ausführungscodeinformationen 802 in
der Fehlersuchinformationsspeichereinheit 42 zurück und gibt
das Rückumwandlungsergebnis
zu dem Befehlinterpretierer 46 aus. Wenn die binären Daten
ein Datencode sind, wandelt die Ausführungscoderückumwandlungseinheit 47 die
binären
Daten zu einem Identifizierer entsprechend den Identifiziererinformationen 802 und den
Typinformationen 806 in der Fehlersuchinformationsspeichereinheit 42 zurück und gibt
das Rückumwandlungsergebnis
zu dem Befehlinterpretierer 46 aus.
-
Die 7B–7E stellen
das Verfahren einer Rückumwandlung
der binären
Daten durch die Ausführungscoderückumwandlungseinheit 47 dar. Wenn
der Programmierer den Rückumwandlungsbefehl „UX" über das
Tastenfeld 12 eingibt, wie dies in 7A dargestellt ist, werden binäre Daten „08123456", „67280500", „08000010", „60700500"
... „60740500",
dargestellt in 7B, von dem Speicher der
Arbeitsumgebung gelesen. Die Ausführungscoderückumwandlungseinheit 47 nimmt
dann auf die Ausführungscodeinformationen 802 Bezug,
um einen mnemonischen Code entsprechend den höchsten 8 Bits jedes binären Datensatzes
zu spezifizieren.
-
In 7C entsprechen
die 8 Bits „08"
hoher Ordnung den binären
Daten „08123456"
einem Operationscode „SFST24".
Dementsprechend spezifiziert die Ausführungscoderückumwandlungseinheit 47 die
24 Bits „123456"
niedriger Ordnung als einen Konstanten-Operanden und erzeugt einen
mnemonischen Code „SFST24
0x123456" als das Rückumwandlungsergebnis.
-
In 7D entsprechen „0x2" und „0x0" in den
p2.0 und p2.2 Feldern in den binären
Daten „67280500"
einem Operationscode „MOV~,
R0". Dementsprechend spezifiziert die Ausführungscoderückumwandlungseinheit 47 die
12 Bits „500"
niedriger Ordnung als einen Operationscode „NOP" und erzeugt einen mnemonischen
Code „MOV
0x78, R0 ||NOP" als das Rückumwandlungsergebnis.
-
Nach einer Rückumwandlung der anderen, binären Datensätze, dargestellt
in 7B, in derselben Art und Weise,
werden mnemonische Code, dargestellt in 7E, erhalten. Bedeutungen der mnemonischen
Code werden nachfolgend dargestellt.
-
„SFST24 0x123456": Speichere
eine Konstante „0x123456"
in das Konstantenregister 46.
-
„MOV 0x78, R0": Kombiniere
eine Konstante „0x78"
und die Konstante, gespeichert in das Konstantenregister 76,
und ordne das Kombinationsergebnis dem Register R0 zu. „SFST24
0x000010": Speichere eine Konstante „0x000010" in das Konstantenregister 76.
-
„ST R0, (0x00)": Speichere
den Wert eines Registers R0 in der Adresse 0x00001000, die durch die
Konstante „0x000010"
spezifiziert ist, in dem Konstantenregister 76, und eine
Konstante „0x00".
-
„SFST12 0x000": Speichere
eine Konstante „0x000"
in das Konstantenregister 76. „ADD R0, R0": Addiere den
Wert des Registers R0 und den Wert des Registers R0 und Speichere
das Additionsergebnis in das Register R0.
-
„SFST12 0x010": Speichere
eine Konstante „0x010"
in das Konstantenregister 76. „ ADD 0x4, R0": Addiere eine
Konstante „0x4"
zu dem Wert des Registers R0 und Speichere das Additionsergebnis in
das Register R0.
-
„ST R0, (0x04)": Speichere
den Wert des Registers R0 in der Adresse 0x00001004, die durch den Wert „000010",
gespeichert in dem Konstantenregister 76, und einer Konstanten „0x00",
spezifiziert ist.
-
Wenn binäre Daten zu einem mnemonischen Code
durch die Ausführungscode
rückwandlungseinheit 47 zurückgewandelt
werden, beurteilt die Konstantenwiederherstellungseinheit 49,
ob der mnemonische Code eine zu einer Konstanten in Bezug gesetzte
Operation umfasst. Hierbei bedeutet die auf eine Konstante in Bezug
gesetzte Operation eine Operation, die einen Konstanten-Operanden
als ein Ergebnis einer Zurückumwandlung
der binären
Daten gemäß den Instruktionsformaten
umfasst, dargestellt in den 4A–4C.
Wenn der mnemonische Code die auf eine Konstante in Bezug gesetzte
Operation umfasst, ist dabei eine Möglichkeit vorhanden, dass der
Operand eine Teilkonstante ist, die durch Dividieren einer Langwortkonstanten,
geschrieben in dem Quellenprogramm, erzeugt worden ist. In einem solchen
Fall erfasst die Konstantenwiederherstellungseinheit 49 Konstantenteilungsinformationen,
die sich auf die Teilkonstante in der Fehlersuchinformationsspeichereinheit 42 beziehen,
um die originale Konstante zu identifizieren.
-
Wenn die Konstantenteilungsinformationen in
der Fehlersuchinformationsspeichereinheit 42 existieren,
spezifiziert die Konstantenwiederherstellungseinheit 49 die
auf die Konstante bezogene Operation als eine der Teilkonstantenverschiebungs-
und Speicheroperation und die Benutzungsoperation der gespeicherten
Konstanten und ersetzt die Teilkonstante, umfasst in der zu der
Konstanten in Bezug gesetzten Operation, gegen die originale Konstante, dargestellt
in den Konstantenteilungsinformationen. Wenn andererseits die Konstantenteilungsinformationen
nicht in den Fehlersuchinformationen existieren, liest die Konstantenwiederherstellungseinheit 49 binäre Daten
angrenzend an die zu der Konstanten in Bezug gesetzten Operation
von dem Speicher, stellt die originale Konstante der zu der Konstanten
in Bezug gesetzten Operation unter Verwendung von Teilkonstanten,
erhalten von den binären
Daten, wieder her, und ersetzt die Teilkonstante in der auf die
Konstante in Bezug gesetzte Operation gegen die wiederhergestellte,
originale Konstante. Die Konstantenwiederherstellungseinheit 49 erzeugt
dann Konstantenteilungsinformationen, die die originale Konstante und
die Adressen der sich auf die Konstante in Bezug gesetzte Operation
und Operationen, die die erhaltenen Teilkonstanten umfassen, bezieht,
und speichert die Konstantenteilungsinformationen in die Fehlersuchinformationsspeichereinheit 42.
-
In 7E ist,
da der mnemonische Code „MOV
0x78, R0" unmittelbar nach dem mnemonischen Code „SFST24
0x123456" geschrieben ist, „MOV
0x78, R0" die Benutzungsoperation der gespeicherten Konstanten,
deren Konstanten-Operand „0x78"
tatsächlich
eine einer Vielzahl von Teilkonstanten ist, um in dem Konstantenregister 76 gespeichert
zu werden. Dementsprechend ersetzt die Konstantenwiederherstellungseinheit 49 die
Teilkonstante gegen die originale Konstante und gibt den sich ergebenden
mnemonischen Code zu der Befehlsinterpretiereinheit 76 aus. Ähnlich ersetzt,
da der Konstanten-Operand „0x123456"
in dem mnemonischen Code „SFST24
0x123456" tatsächlich
eine der Vielzahl von Teilkonstanten ist, die in das Konstantenregister 76 hinein
gespeichert werden sollen, die Konstantenwiederherstellungseinheit 49 die
Teilkonstante gegen die originale Konstante und gibt den sich ergebenden,
mnemonischen Code zu dem Befehlinterpretierer 46 aus. Ähnlich ersetzt,
da der Konstanten-Operand „0x123456"
in dem mnemonischen Code „SFST24
0x123456" tatsächlich
einer der Mehrzahl von Teilkonstanten ist, die in dem Konstantenregister 76 gespeichert
werden sollen, die Konstantenwiederherstellungseinheit 49 die
Teilkonstante gegen die originale Konstante und gibt den sich ergebenden,
mnemonischen Code zu dem Befehlinterpretierer 46 aus. Diese
Ersetzungsverarbeitung wird im Detail später erläutert werden.
-
Wenn die Benutzerschnittstelle 44 den Änderungsbefehl
empfängt
und der Befehlsinterpretierer 46 einen neuen, mnemonischen
Code ausgibt, der zu der Ausführungscodeumwandlungseinheit 48 geschrieben
werden soll, gibt die Ausführungscodeumwandlungseinheit 48 einen
Schreibbefehl aus, der eine Startadresse und eine Datenlänge zu der
Sollschnittstelle 51 spezifiziert. Die Ausführungscodeumwandlungseinheit 48 wandelt
auch den neuen, mnemonischen Code in binäre Daten entspre chend den Ausführungscodeinformationen 802 um
und gibt die binären
Daten zu der Sollschnittstelle 51 aus.
-
Wenn der mnemonische Code zu den
binären
Daten in der Ausführungscodeumwandlungseinheit 48 umgewandelt
wird, beurteilt die Konstantenänderungseinheit 50,
ob die binären
Daten eine zu einer Konstante in Bezug stehende Operation umfassen.
Falls die zu der Konstanten in Bezug gesetzte Operation umfasst
ist, beurteilt die Konstantenänderungseinheit 50,
dass eine Langwortkonstante, umfasst in der alten, zu einer Konstante
in Bezug gesetzten Operation, die ersetzt werden soll, in eine Mehrzahl
von Teilkonstanten in dem Speicher unterteilt worden ist. Die Konstantenänderungseinheit 50 durchsucht
entsprechend die Fehlersuchinformationsspeichereinheit 42 nach
Konstantenteilungsinformationen, die sich auf die alte Langwortkonstante
beziehen, um die Konstantenteilungsbitpositionsinformationen 604 und
die Teilkonstantenbitlängeninformationen 605 zu
erhalten. Falls die Konstantenteilungsinformationen in der Fehlersuchinformationsspeichereinheit 42 existieren,
unterteilt die Konstantenänderungseinheit 50 die
Langwortkonstante, umfasst in der neuen, zu einer Konstanten in
Bezug stehenden Operation gemäß der Konstantenteilungsbitpositionsinformationen 604 und
den Teilkonstantenbitlängeninformationen 605.
-
Die Konstantenänderungseinheit 50 gibt dann
einen Schreibbefehl, der eine Startadresse und eine Datenlänge spezifiziert,
zu der Sollschnittstelle 41 aus, so dass jede Teilkonstante,
erhalten durch Unterteilen der neuen Langwortkonstanten, in den Arbeitsumgebungsspeicher
hinein geschrieben werden wird.
-
Die Grafikbenutzerschnittstelle 45 spezifiziert,
wenn der Programmierer eine Hinweisvorrichtung betätigt, wie
beispielsweise eine Mouse 38 oder Cursortasten, auf dem
Tastenfeld 12, und zwar auf der Anzeige 11, die
eine Mehrzahl von mnemonischen Coden anzeigt, und zwar einen der
Mehrzahl der mnemonischen Code, und wartet auf die Eingabe eines
neuen, mnemonischen Codes, der geschrieben werden soll. Der eingegebene,
neue, mnemonische Code wird dann in binäre Daten durch die Ausführungscodeumwandlungseinheit 48 umgewandelt. Die
Ausführungscodeumwandlungseinheit 48 gibt
einen Schreibbefehl, der eine Startadresse und eine Datenlänge spezifiziert,
zu der Arbeitsumgebung aus, die entsprechend die binären Daten
in den Arbeitsumgebungsspeicher hinein schreibt. Das Nachfolgende
ist eine Erläuterung
der Verarbeitung der Konstantenwiederherstellungseinheit 49 unter
Bezugnahme auf 9.
-
Die Konstantenwiederherstellungseinheit 49 stellt
eine Variable i auf 1 (Schritt S20) ein und wartet, bis
die Ausführungscoderückwandlungseinheit 47 einen
Ausführungscode
i, gelesen von der „i"-ten Adresse
in einem Speicherbereich, spezifiziert durch den Fehlersuchbefehl,
zurückgewandelt
hat. Die Konstantenwiederherstellungseinheit 49 empfängt dann
einen mnemonischen Code i (zurückgewandelter
Code i) von der Ausführungscoderückwandlungseinheit 47 (Schritt S21).
-
Die Konstantenwiederherstellungseinheit 49 beurteilt,
ob der zurückgewandelte
Code i eine zu einer Konstanten in Bezug gesetzte Operation ist (Schritt S22).
Wenn der zurückgewandelte
Code i nicht die zu der Konstanten in Bezug gesetzten Operation
ist, wird der zurückgewandelte
Code i direkt auf der Anzeige 11 angezeigt, und die Verarbeitung schreitet
zu Schritt S34 fort. Die Konstantenwiederherstellungseinheit 49 beurteilt,
ob die Variable i eine Variable n ist (Schritt S34). Wenn
die Variable i gleich zu der Variablen n ist, schließt die Konstantenwiederherstellungseinheit 49 die
Verarbeitung ab. Ansonsten schreitet die Konstantenwiederherstellungseinheit 49 zu
Schritt S35 fort, wo die Variable i erhöht wird, und kehrt dann zu
Schritt S21 zurück.
-
Wenn der zurückgewandelte Code i die sich auf
die Konstante beziehende Operation i (Schritt S22) ist,
erfasst die Konstantenwiederherstellungseinheit 49 Konstantenteilungsinformationen
j, die der zu der Konstanten in Bezug gesetzten Operation i in der
Fehlersuchinformationsspeichereinheit 42 entsprechen (Schritt S23),
und beurteilt, ob die Konstantenteilungsinformationen j existieren
(Schritt S24).
-
Hier wird erläutert, wie die Konstantenteilungsinformationen
j, die der zu der Konstanten in Bezug gesetzten Operation i entsprechen,
zu finden sind.
-
Die Konstantenwiederherstellungseinheit 49 nimmt
auf die Konstantenteilungsbitpositionsinformationen 604 in
den Konstantenteilungsinformationen Bezug und extrahiert Teilkonstanten
von einer originalen Konstanten, dargestellt in den Konstantenwertinformationen 602,
entsprechend den Konstantenteilungsbitpositionsinformationen 604. Die
Konstantenwiederherstellungseinheit 49 vergleicht dann
die Teilkonstante der zu der Konstanten in Bezug gesetzten Operation
i mit jeder der extrahierten Teilkonstanten.
-
Die vorstehende Extraktion und der
Vergleich werden für
alle Sätze
von Konstantenteilungsinformationen, gespeichert in der Fehlersuchinformationsspeichereinheit 42,
durchgeführt.
Wenn ein Satz von Konstantenteilungsinformationen dieselbe Teilkonstante
wie diejenige der zu der Konstanten in Bezug gesetzten Operation
i besitzt, identifiziert die Konstantenwiederherstellungseinheit 49 den
Satz von Konstantenteilungsinformationen als die Konstantenteilungsinformationen
j.
-
Wenn andererseits eine Mehrzahl von
Sätzen
von Konstantenteilungsinformationen dieselbe Teilkonstante wie diejenige
der zu der Konstanten in Bezug gesetzten Operation i besitzt, wird
eine Adresse i der zu der Konstanten in Bezug gesetzten Operation
i mit jeder Adresse, geschrieben in den Teilkonstantenbenutzungsoperations-Adresseninformationen 606,
in jeder der Mehrzahl Konstantenteilungsinformationen, verglichen.
Als Folge wird, falls ein Satz von Konstantenteilungsinformationen,
deren Teilkonstantenbenutzungsoperations-Adresseninformationen 606 eine
Adresse i der zu der Konstanten in Bezug gesetzten Operation i darstellen,
erfasst wird, wird der Satz von Konstantenteilungsinformationen als
die Konstantenteilungsinformationen j identifiziert.
-
Die Teilkonstante in dem zurückgewandelten Code
i wird gegen den originalen Konstantenwert, geschrieben in den Konstantenteilungsinformationen j,
ersetzt (Schritt S25). Als nächstes werden ein Komma „," und
eine Konstantenteilungsbitposition b, dargestellt in den Konstantenteilungsinformationen
j, an dem Ende des zurückgewandelten
Codes i hinzugefügt
(Schritt S26).
-
Die Konstantenwiederherstellungseinheit 49 sucht
eine Teilkonstantenbitlänge,
unter Teilkonstantenbitlängen,
dargestellt in den Konstantenteilungsinformationen j, auf, und passt
eine Teilkonstantenbitlänge
k der zu der Konstanten in Bezug gesetzten Operation i an (Schritt S27).
-
Die Konstantenwiederherstellungseinheit 49 beurteilt,
ob die Teilkonstante der zu der Konstanten in Bezug gesetzten Operation
i eine Teilkonstante ist, beginnend von der höchsten Bitposition aus der
originalen Konstanten (Schritt S28). Hierbei wird die Teilkonstantenbitlänge k zu
der Konstantenteilungsbitposition b hinzugefügt, um zu beurteilen, ob das
Additionsergebnis die Bitlänge
der originalen Konstanten anpasst.
-
Falls sie nicht zueinander passen,
wird der Wert „b
+ k" nach der Konstantenteilungsbitposition b hinzu addiert, die
zu dem zurückgewandelten
Code i hinzuaddiert worden ist (Schritt S30).
-
Als Folge wird der zurückgewandelte
Code i auf der Anzeige 11 zusammen mit der originalen Konstanten,
der Konstantenteilungsbitposition b und dem Wert „b + k"
angezeigt. Von den angezeigten Informationen kann der Programmierer
leicht verstehen, dass die Teilkonstante, angeordnet in den „b"-ten
bis „b
+ k"-ten Bitpositionen in der Langwortkon stanten, geschrieben in
dem Quellenprogramm, als ein Konstanten-Operand der sich auf eine
Konstante beziehenden Operation i verwendet wird.
-
Falls sie im Schritt S28 zueinander
passen, wird das Symbol $ nach der Konstantenteilungsbitposition
b hinzugefügt
(Schritt S29). Als Ergebnis wird der zurückgewandelte
Code i auf der Anzeige 11 zusammen mit der originalen Konstanten,
der Konstantenteilungsbitposition b und dem Symbol $ angezeigt.
Anhand der angezeigten Informationen kann der Programmierer leicht
verstehen, dass die Teilkonstante, angeordnet in den „b"-ten bis höchsten Bitpositionen
in der Langwortkonstanten, geschrieben in dem Quellenprogramm, als
ein Konstanten-Operand der sich auf eine Konstante beziehenden Operation
i verwendet wird.
-
Die Konstantenwiederherstellungseinheit 49 nimmt
auf die Konstantentypinformationen 601 in den Konstantenteilungsinformationen
j Bezug (Schritt S31). Falls die Konstantentypinformationen 601 „Identifizierer"
darstellen, sucht die Konstantenwiederherstellungseinheit 49 einen
Identifizierer entsprechend der originalen Konstanten der sich auf
die Konstante beziehenden Operation i von den Identifiziererinformationen 803 in
den Fehlersuchinformationen auf (Schritt S32). Die Konstantenwiederherstellungseinheit 49 ersetzt
dann die originale Konstante, geschrieben in der sich auf die Konstante
beziehenden Operation i, gegen den wieder aufgesuchten Identifizierer
(Schritt S33), und schreitet zu Schritt S34 fort.
-
Die vorstehende Erläuterung
basiert auf einem Fall, wenn die Konstantenteilungsinformationen j
in der Fehlersuchinformationsspeichereinheit 42 existieren.
Als nächstes
wird die Verarbeitung erläutert,
wenn die Konstantenteilungsinformationen j nicht existieren.
-
Es ist anzumerken, dass sich, da
die Ablaufplanung an dem Fehlersuchprogramm 24 zu dem Zeitpunkt
des Zusammenstellens durchgeführt
worden ist, die Ausführungsreihenfolge
der Operationen von der Ausführungsreihenfolge,
geschrieben in dem Quellenprogramm, unterscheidet. Allerdings werden, in
der Ablaufplanung, Teilkonstantenverschiebe- und Speicheroperationen
und eine Benutzungsoperation der gespeicherten Konstanten, die sich
auf eine Langwortkonstante bezieht, niemals voneinander durch eine
Operation separiert, die sich auf eine andere Langwortkonstante
bezieht. Auch wird die Reihenfolge, in der die Teilkonstantenverschiebungs- und
Speicheroperationen zum Defi nieren von Operanden durch die gespeicherte
Konstantenbenutzungsoperation zur Verwendung der Operanden gefolgt
wird, niemals geändert.
-
Da die Ausführungsreihenfolge der Operationen
ohne Unterbrechung der Reihenfolge, die vorstehend erwähnt ist,
modifiziert worden ist, ist es möglich,
die originale Konstante gerade dann zu erhalten, wenn die Konstantenteilungsinformationen
nicht während
der Zusammenstellung erzeugt worden sind. Dies kann durch aufeinanderfolgendes
Lesen der Teilkonstantenverschiebungs- und Speicheroperationen und/oder
der Benutzungsoperation der gespeicherten Konstanten von dem Arbeitsumgebungsspeicher
und Anordnen der Teilkonstanten-Operanden, umfasst in den gelesenen
Operationen, vorgenommen werden.
-
Wenn die sich auf die Konstante beziehende Operation
i eine gespeicherte Konstantenbenutzungsoperation ist, wird jede
Teilkonstantenverschiebungs- und Speicheroperation, angeordnet in
einer rückwärtigen Position
der Benutzungsoperationen der gespeicherten Konstante, gelesen,
und eine Teilkonstante, umfasst in jeder gelesenen Operation, wird
sequentiell in den Speicher 15 in dem Host Computer 10 hinein
geschrieben. Die originale Konstante wird durch Kombinieren der
Teilkonstanten, geschrieben in dem Speicher 15, mit einer
Teilkonstanten der gespeicherten Konstantenbenutzungsoperation,
erhalten.
-
Wenn die sich auf die Konstante beziehende Operation
i eine Teilkonstantenverschiebungs- und Speicheroperation ist, wird
eine gespeicherte Konstantenbenutzungsoperation von den Operationen, angeordnet
in einer Vorwärtsrichtung
der Teilkonstantenverschiebungs- und Speicheroperation, erfasst.
Da die erfasste, gespeicherte Konstantenbenutzungsoperation die
originale Konstante einer Teilkonstanten verwendet, umfasst in der
Teilkonstantenverschiebungs- und Speicheroperation, als einen der
Operanden, wird die originale Konstante in derselben Verarbeitung,
wie vorstehend, erhalten.
-
Die Teilkonstantenbitlänge k der
sich auf die Konstante beziehenden Operation i wird von der Standardbitlänge L der
originalen Konstanten subtrahiert, um die Differenzbitlänge m zu
erzeugen (Schritt S36). Als nächstes beurteilt die Konstantenwiederherstellungseinheit 49,
ob Ausführungshistorie-Informationen
in dem Arbeitsumgebungsspeicher gespeichert sind (Schritt S37).
-
Hierbei sind die Ausführungshistorie-Informationen
aus Adressen von Operationen in dem Fehlersuchsollprogramm 24 aufgebaut,
die ausgeführt
worden sind. Wenn die Si mulator-Software 17 die Arbeitsumgebung
ist, werden die Ausführungshistorie-Informationen in
dem Speicher 15 gespeichert. Wenn der ROM-Emulator 20 die
Arbeitsumgebung ist, können,
andererseits, die Ausführungshistorie-Informationen
nicht in dem Speicher 26 aufgrund dessen begrenzter Speichergröße gespeichert werden.
Wenn die ICE-Karte 30 die Arbeitsumgebung ist, kann nur
die eingeschränkte
Menge der Ausführungshistorie-Informationen
in dem Speicher 33 aufgrund dessen begrenzter Speichergröße gespeichert
werden (einige ICE-Karten besitzen nicht eine Kapazität zum Speichern
der Ausführungshistorie-Informationen).
-
Der Grund, warum die Konstantenwiederherstellungseinheit 49 beurteilt,
ob die Ausführungshistorie-Informationen
in dem Schritt S37 existieren, ist derjenige, dass die
originale Konstante akkurater unter Bezugnahme auf die Ausführungshistorie-Informationen wiederhergestellt
werden kann.
-
Zum Beispiel ist es, wenn eine herkömmliche Verzweigungsinstruktion,
die zu irgendeiner von zwei Routen führt, die jeweils eine Teilkonstantenverschiebung
umfasst, und eine Speicheroperation in dem Fehlersuchsollprogramm 24 umfasst
ist, notwendig, zu spezifizieren, welche Teilkonstantenverschiebungs-
und Speicheroperation ausgeführt
worden ist, um eine Teilkonstante, gespeichert in dem Konstantenregister 76,
zu identifizieren. In einem solchen Fall kann die originale Konstante
nicht nur durch Leseoperationen in den Vonrwärts/Rückwärtsrichtungen der zu der Konstanten
in Bezug gesetzten Operation i wiederhergestellt werden.
-
Allerdings kann, unter Verwendung
der Ausführungshistorie-Informationen,
die originale Konstante korrekt wiederhergestellt werden, da eine Adresse
der Teilkonstantenverschiebungs- und Wiederherstellungsoperation,
die ausgeführt
worden ist, in den Ausführungshistorie-Informationen
gespeichert worden ist. Demzufolge kann die originale Konstante
akkurater unter Verwendung der Ausführungshistorie-Informationen
identifiziert werden.
-
Wenn die Ausführungshistorie-Informationen in
dem Arbeitsumgebungsspeicher existieren, stellt die Konstantenwiederherstellungseinheit 49 Operationsadressen,
spezifiziert durch die Ausführungshistorie-Informationen,
als einen Suchbereich ein (Schritt S38). Wenn andererseits
die Ausführungshistorie-Informationen
nicht in dem Speicher existieren, stellt die Konstantenwiederherstellungseinheit 49 Operationsadressen
angrenzend an die zu der Konstanten in Bezug gesetzten Operation
i als einen Suchbereich ein (Schritt S39).
-
Die Konstantenwiederherstellungseinheit 49 erfasst
Operationen p, deren Teilkonstanten-Operand nicht mehr als die Differenzbitlänge m von
dem Suchbereich ist (Schritt S40).
-
Wenn eine Operation, deren Teilkonstante dieselbe
Länge wie
die Differenzbitlänge
m besitzt, erfasst wird, wird die Teilkonstante der zu der Konstanten
in Bezug gesetzten Operation i mit der Teilkonstanten und der erfassten
Operation kombiniert.
-
Wenn eine Mehrzahl von Operationen,
von denen jede eine Teilkonstante kürzer als die Differenzbitlänge m besitzt,
erfasst ist, wird die Teilkonstante der zu der Konstante in Bezug
gesetzten Operation i mit den Teilkonstanten der erfassen Operationen
kombiniert, bis die gesamte Bitlänge
die Standard-Langwort-Konstantenlänge (32 Bits in dem vorliegenden
Beispiel) erreicht.
-
Die Konstantenwiederherstellungseinheit 49 erzeugt
eine Mustervorlage der Konstantenteilungsinformationen j für die zu
der Konstanten in Bezug gesetzten Operation i (Schritt S41)
und berechnet die originale Konstante von der Teilkonstanten der
zu der Konstanten in Bezug gesetzten Operation i und der Teilkonstanten
der Operationen p, wobei die originale Konstante dann in die Konstantenteilungsinformationen
j als die Konstantenwertinformationen 602 hinein geschrieben
werden (Schritt S42). Die Konstantenwiederherstellungseinheit 49 schreibt
auch die Teilkonstantenzahlinformationen 603, die Konstantenteilungsbitpositionsinformationen 604 und
die Teilkonstantenbitlängeninformationen 605,
die von den Bitlängen
der Teilkonstanten der zu der Konstanten in Bezug gesetzten Operation
i und der Operation p erhalten sind, in die Konstantenteilungsinformationen
j hinein (Schritt S43). Die Konstantenwiederherstellungseinheit 49 schreibt
dann die Adresse der zu der Konstanten in Bezug gesetzten Operation
i und die Adressen der Operationen p in die Konstantenteilungsinformationen
j als die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 hinein (Schritt S44).
-
Um die originale Konstante so wiederherzustellen,
wie dies vorstehend angegeben ist, ist es notwendig, häufig Ausführungscode
von dem Speicher zu lesen. Wenn die Arbeitsumgebung die ICE-Karte 30 ist,
können
Daten unter einer hohen Geschwindigkeit zwischen dem Host Computer 10 und
der ICE-Karte 30 übertragen
werden, da sie durch die parallele Leitung 31 verbunden
sind. Auch kann, wenn die Arbeitsumgebung die Si mulator-Software 17 ist, die
Arbeitsumgebung Ausführungscode
leicht von dem Speicher 15 in dem Host Computer 10 lesen.
-
Wenn die Arbeitsumgebung der ROM-Emulator 20 allerdings
ist, können
Daten nicht unter einer hohen Geschwindigkeit zwischen dem Host
Computer 10 und dem ROM-Emulator 20 übertragen
werden, da sie durch die serielle Leitung 21 verbunden sind.
In einem solchen Fall nimmt es eine beträchtliche Zeit in Anspruch,
wiederholt die Ausführungscode
zu lesen und die originale Konstante wiederherzustellen. Demzufolge
ist es bevorzugt, Konstantenteilungsinformationen während der
Erzeugung des Fehlersuchsollprogramms zu erzeugen und die Konstantenteilungsinformationen
in der Fehlersuchinformationsspeichereinheit 42 zu speichern,
so dass das Fehlersuchen einfach durchgeführt werden kann.
-
Das Nachfolgende ist eine spezifische
Erläuterung
der Verarbeitung der Konstantenwiederherstellungseinheit 49 unter
Bezugnahme auf die 7B–7F.
-
Nachdem die Arbeitsumgebung den Ausführungscode „08123456"
von der Adresse 0x80000000 liest, wandelt die Ausführungscoderückwandlungseinheit 47 den
Ausführungscode
zu dem mnemonischen Code „SFST24
0x123456" zurück.
Die Konstantenwiederherstellungseinheit 49 beurteilt, dass
der mnemonische Code „SFST24
0x123456" eine zu der Konstanten in Bezug gesetzte Operation ist
(Schritt S22). Die Konstantenwiederherstellungseinheit 49 erfasst
Konstantenteilungsinformationen, deren Teilkonstantenbenutzungsoperations-Adresseninformationen 606 eine
Adresse 0x80000000 in den Fehlersuchinformationen, dargestellt in 6, darstellen (Schritt S23).
Wenn die Konstantenteilungsinformationen erfasst sind, erhält die Konstantenwiederherstellungseinheit 49 die
originale Konstante „0x12345678"
von den Konstantenwertinformationen 602 und ändert den
mnemonischen Code „SFST24
0x123456", angezeigt auf der Anzeige 11, zu dem mnemonischen
Code „SFST24 0x12345678".
Die Konstantenwiederherstellungseinheit 49 erhält dann
die Konstantenteilungsbitposition „8" und die Teilkonstantenbitlängen „24" und „8" jeweils
von den Konstantenteilungsbitpositionsinformationen 604 und
den Teilkonstantenbitlängeninformationen 605,
und ändert
den angezeigten, mnemonischen Code „SFST24 0x12345678" zu „SFST24 0x12345678,
8" (Schritt S26). Auch beurteilt, da 24 (Teilkonstanten-Bitlänge) + 8
(Konstanten-Teilungs-Bitposition) = 32 (Langwort-Konstanten-Bitlänge) gilt, die Konstantenwiederherstellungseinheit 49, dass
die Teilkonstante der zu der Konstanten in Bezug gesetzten Operation „SFST 0x12345678,
8" eine Teilkonstante ist, beginnend von der höchsten Bitposition der originalen
Konstanten (Schritt S28). Dementsprechend fügt die Konstantenwiederherstellungseinheit 49 das
Symbol $ zu dem angezeigten, mnemonischen Code hinzu, und das Ergebnis
wird als „SFST24
0x12345678, 8, $" auf der Anzeige 11 angezeigt (Schritt S29).
Da die Konstantentypinformationen 601 „Zahl" darstellen (Schritt S31),
schließt die
Konstantenwiederherstellungseinheit 49 die Verarbeitung
ab.
-
Wenn andererseits die Konstantenteilungsinformationen
nicht im Schritt S24 erfasst werden, subtrahiert die Konstantenwiederherstellungseinheit 49 die
Teilkonstantenbitlänge
(24) der zu der Konstanten in Bezug gesetzten Operation „SFST24 0x123456"
von der Standardkonstantenbitlänge
(32) und erhält
die Differenzbitlänge
(8). Die Konstantenwiederherstellungseinheit 49 erfasst
dann zu der Konstanten in Bezug gesetzte Operationen von den Adressen
angrenzend an die Adresse 0x80000000. Hierbei beurteilt die Konstantenwiederherstellungseinheit 49 zuerst,
ob die Ausführungshistorie-Informationen
in dem Speicher gespeichert sind (Schritt S37). Falls dies
der Fall ist, erfasst die Konstantenwiederherstellungseinheit 49 die
zu den Konstanten in Bezug gesetzten Operationen von Adressen, spezifiziert
durch die Ausführungshistorie-Informationen (Schritt S38).
Ansonsten erfasst die Konstantenwiederherstellungseinheit 49 die
zu der Konstanten in Bezug gesetzten Operationen von den Adressen
angrenzend an die Adresse 0x80000000 (Schritt S39).
-
Als Folge werden die zu der Konstante
in Bezug gesetzten Operationen „SFST12 0x000", „MOV 0x78,
R0" und „SFST24
0x000010" von dem mnemonischen Code, dargestellt in 7E, erfasst. Unter diesen wird die zu
der Konstanten in Bezug gesetzte Operation „SFST12 0x000" ausgeschlossen,
da sie die 12-Bit-Teilkonstante besitzt, die länger als die Differenzbitlänge (8 Bits)
ist. Demzufolge wird die zu der Konstanten in Bezug gesetzte Operation „MOV 0x78, R0"
ausgewählt,
die die Teilkonstante „0x78"
kürzer als
die Differenzbitlänge
(8 Bits) besitzt, und die näher
zu der Konstanten in Bezug gesetzten Operation „SFST 0x123456" liegt. Die
Konstantenwiederherstellungseinheit 49 spezifiziert die
zu der Konstanten in Bezug gesetzte Operation „MOV 0x78, R0" als die gespeicherte
Konstantenbenutzungsoperation, die die Teilkonstante der Teilkonstantenverschiebungs- und
Speicheroperation „SFST24
0x123456" verwendet.
-
In den Schritten S40–S44 spezifiziert
die Konstantenwiederherstellungseinheit 49 die Konstantenwertinformationen 602,
die Teilkonstantenzahlinformationen 603, die Kon stantenteilungsbitpositionsinformationen 604,
die Teilkonstantenbitlängeninformationen 605 und
die Teilkonstantenverwendungsoperationsadresseninformationen 606,
und schreibt sie in die Konstantenteilungsinformationen hinein,
ebenso wie „Zahl"
in die Konstantenwertinformationen 601 geschrieben wird. Als
Folge werden die Konstantenteilungsinformationen erzeugt und in
der Fehlersuchinformationsspeichereinheit 42 gespeichert.
Die Verarbeitung schreitet dann zu den Schritten S25–S33 fort,
und als Ergebnis wird der mnemonische Code „SFST24 0x12345678, 8, $"
erzeugt.
-
Als nächstes liest die Arbeitsumgebung
den Ausführungscode „08000010"
von der Adresse 0x80000008, die Ausführungscodeumwandlungseinheit 47 wandelt
den Ausführungscode
zu dem mnemonischen Code „SFST24
0x000010" zurück.
Die Konstantenwiederherstellungseinheit 49 beurteilt, dass
der mnemonische Code „SFST24
0x000010" eine zu einer Konstanten in Bezug gesetzte Operation ist
(Schritt S22). Die Konstantenwiederherstellungseinheit 49 erfasst
Konstantenteilungsinformationen, die der zu der Konstanten in Bezug
gesetzten Operation „SFST24
000010" in den Fehlersuchinformationen, dargestellt in 6, entspricht (Schritt S23).
Wenn die Konstantenteilungsinformationen erfasst sind, erhält die Konstantenwiederherstellungseinheit 49 die
originale Konstante „0x00001000"
von den Konstantenwertinformationen 602 und ändert den
mnemonischen Code „SFST24
0x000010", angezeigt auf der Anzeige 11, zu dem mnemonischen Code „SFST24
0x00001000". Die Konstantenwiederherstellungseinheit 49 erhält dann
die Konstante die Teilungsbitposition „8" und die Teilkonstantenbitlängen „24" und „8" jeweils
von den Konstantenteilungsbitpositioneninformationen 604 und
den Teilkonstantenbitlängeninformationen 605,
und ändert
den angezeigten, mnemonischen Code „SFST24 0x00001000" zu „SFST24
0x00001000, 8" (Schritt S26). Auch beurteilt, da 24 (Teilkonstanten-Bitlänge) + 8
(Konstanten-Teilungs-Bitpositionen) = 32 (Langwort-Konstanten-Bitlänge) gilt,
die Konstantenwiederherstellungseinheit 49, dass die Teilkonstante
der zu der Konstanten in Bezug gesetzten Operation „SFST 0x00001000,
8" eine Teilkonstante ist, beginnend von der höchsten Bit-Position der originalen Konstanten
aus (Schritt S28). Dementsprechend fügt die Konstantenwiederherstellungseinheit 49 das Symbol
$ zu dem angezeigten, mnemonischen Code hinzu, und als ein Ergebnis
wird „SFST24 0x00001000,
8, $" auf der Anzeige 11 angezeigt (Schritt S29).
Die Konstantenwiederherstellungseinheit 49 beurteilt dann,
ob die Konstantentypinformationen 601 „Identifizierer" darstellen
(Schritt S31). Da die Konstantentypinformation 601 für die Konstante „0x00001000" „Identifizierer"
in 6 darstellen, wird ein
Identifizierer _a entsprechend zu der Konstanten „0x00001000"
von den Identifiziererinformationen 803 aufgesucht, und
der angezeigte, mnemonische Code „SFST24 0x00001000, 0, $"
wird zu „SFST24 _a,
8, $" geändert.
Der mnemonische Code, angezeigt als ein Ergebnis der vorstehenden
Verarbeitung, ist in 7F dargestellt.
-
Hierbei codiert die Benutzerschnittstelle 44 farbemäßig jede
Gruppe zu einer Konstanten in Bezug gesetzten Operationen, die sich
auf eine Langwortkonstante beziehen, während andere Ausgaben in einer
unterschiedlicher Farbe angezeigt werden. In 7F werden, zum Beispiel, „SFST24 0x12345678,
8, $" und „MOV
0x12345678, R0", die sich auf die Konstante „0x12345678" beziehen, in
einer Farbe 1 angezeigt, während „SFST24 a, 8, $" und ST R0,
(a)", die sich auf einen Identifizierer _a beziehen, in einer Farbe 2 angezeigt
werden.
-
Dieselbe Verarbeitung wird für die Adressen 0x80000010
bis 0x80000018 wiederholt, und als Ergebnis werden mnemonische Code „SFST24 0x12345678,
8, $" bis „ST
R0, (_b)" auf der Anzeige 11 angezeigt.
-
Das Nachfolgende ist eine Erläuterung
der Verarbeitung der Konstantenänderungseinheit 50, wenn
der Programmierer einen Ausführungscodeänderungsbefehl über das
Tastenfeld 12 ausgibt, und zwar unter Bezugnahme auf die 10A und 10B.
-
In 10A wartet,
wenn der Änderungsbefehl
eingegeben ist, die Konstantenänderungseinheit 50 auf
die Eingabe zur Änderung
einer Solladresse d (Schritt S70). Die Arbeitsumgebung
liest einen Ausführungscode
von der Änderungssolladresse
d (Schritt S71) und die Ausführungscoderückumwandlungseinheit 47 wandelt
den gelesenen Ausführungscode
zurück,
um den alten, mnemonischen Code x zu erhalten. Der alte, mnemonische
Code x wird auf der Anzeige 11 zusammen mit dem Symbol „?" zum Anfordern,
einen neuen mnemonischen Code y einzugeben, angezeigt (Schritt S72).
Die Konstantenänderungseinheit 50 wartet
auf die Tasteneingabe.
-
Beim Empfangen der Tasteneingabe
wird beurteilt, ob der eingegebene Tastencode ein Freiraum ist (Schritt S75).
Falls dies der Fall ist, schreitet die Verarbeitung zu Schritt S74 fort
und eine Adresse d wird erneuert. Ansonsten schreitet die Verarbeitung zu
Schritt S76 fort.
-
Es wird beurteilt, ob der eingegebene
Tastencode eine Periode „."
ist (Schritt S76). Falls dies der Fall ist, endet die Verarbeitung.
Ansonsten schreitet die Verarbeitung zu Schritt S51 fort,
wo die Konstantenänderungseinheit 50 beurteilt,
ob der neue, mnemonische Code y eine zu einer Konstanten in Bezug
gesetzte Operation ist. Falls er nicht die zu einer Konstanten in
Bezug gesetzte Operation ist, beurteilt die Konstantenänderungseinheit,
ob eine Konstante des neuen, mnemonischen Codes y ein Identifizierer
ist (Schritt S52). Falls dies der Fall ist, wird eine Zahl
entsprechend dem Identifizierer von den Fehlersuchinformationen
aufgesucht und der Identifizierer wird gegen die Zahl ersetzt (Schritt S53).
-
Als nächstes wird beurteilt, ob der
alte, mnemonische Code x eine zu einer Konstanten in Bezug gesetzte
Operation ist (Schritt S54). Falls dies nicht der Fall
ist, wird eine Warnung angezeigt (Schritt S55), und der
alte, mnemonische Code x wird gegen den neuen, mnemonischen Code
y ersetzt (Schritt S56), bevor zu dem Schritt S74 fortgeschritten
wird.
-
Falls der alte, mnemonische Code
x die zu der Konstanten in Bezug gesetzte Operation im Schritt S54 ist,
erfasst die Konstantenänderungseinheit 50 Konstantenteilungsinformationen
z, deren Teilkonstantenbenutzungsoperations-Adresseninformationen 606 eine
Adresse d des alten, mnemonischen Codes x von den Fehlersuchinformationen
anzeigen (Schritt S57). Die Konstantenänderungseinheit 50 beurteilt,
ob die Konstantenteilungsinformationen z existieren (Schritt S58).
-
Falls die Konstantenteilungsinformationen
z existieren, werden die Konstante des neuen, mnemonischen Codes
y in die Konstantenteilungsinformationen z als neue Konstantenwertinformationen 602 hineingeschrieben
(Schritt S60). Die Konstantenänderungseinheit 50 nimmt
dann auf die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 Bezug,
um Adressen von zu Konstanten in Bezug gesetzten Operationen zu
finden, die sich auf dieselbe Langwortkonstante wie der alte, mnemonische
Code x beziehen. Die Konstantenänderungseinheit 50 teilt
auch die Konstante des neuen, mnemonischen Codes y an der Bitposition,
dargestellt in den Konstantenteilungsbitpositionsinformationen 604 (Schritt S61).
Die erzeugten Teilkonstanten werden dann jeweils in die Adressen,
dargestellt durch die Teilkonstantenbenutzungsoperations-Adresseninformationen 606,
als die neuen Konstanten-Operanden hineingeschrieben.
-
Wenn andererseits die Konstantenteilungsinformationen
z nicht im Schritt S58 existieren, schreitet die Verarbeitung
zu den Schritten S36–S44 fort,
dargestellt in 10B.
Die Schritte S36–S44 in 10B sind dieselben wie die
Schritte S36–S74, dargestellt
in
-
9,
wo die Konstantenteilungsinformationen z durch Erfassen von zu Konstanten
in Bezug gesetzten Operationen erzeugt werden. Die erzeugten Konstantenteilungsinformationen
z werden dann in den Schritten S60 und S61 verwendet,
bevor die Verarbeitung abgeschlossen wird.
-
Die 8A–8E stellen
ein spezifisches Beispiel des Prozesses eines Umschreibens von Ausführungscoden
durch die Konstantenänderungseinheit 50 gemäß eines
Fehlersuchbefehls, eingegeben durch den Programmierer, dar. Der
Code „0014>" in 8A stellt eine Anforderung zum Eingeben
des 14. Fehlersuchbefehls dar. Hierbei gibt der Programmierer
einen Ausführungscodeänderungsbefehl „A" als
den Fehlersuchbefehl und eine Änderungszieladresse
0x80000000 ein.
-
Die Arbeitsumgebung liest den Ausführungscode „08123456",
gespeichert in der Adresse 0x8000000, von dem Speicher (Schritt S71).
Nach der Rückumwandlung
wird der mnemonische Code „SFST24
0x12345678, 8, $" auf der Anzeige 11 zusammen mit dem Symbol „?" zum
Anfordern, einen neuen, mnemonischen Code einzugeben, angezeigt, wie
in 8B dargestellt ist
(Schritt S72). Wenn der Programmierer einen mnemonischen
Code „SFST24 0x87654321,
8, $" eingibt, wie dies in 8C dargestellt
ist, erfasst die Konstantenänderungseinheit 50 Konstantenteilungsinformationen
entsprechend zu dem alten, mnemonischen Code „SFST24 0x12345678, 8, $"
in der Fehlersuchinformationsspeichereinheit 42 (Schritt 57).
Die Konstantenänderungseinheit 50 schreibt
dann die Konstante „0x87654321"
des neuen, mnemonischen Codes „SFST24
0x87654321, 8, $" in die erfassten Konstantendivisionsinformationen
als die neuen Konstantenwertinformationen 602 hinein (Schritt S60).
-
Die Konstantenänderungseinheit 50 nimmt auf
die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 Bezug,
um Adressen von zu Konstanten in Bezug gesetzte Operationen zu finden,
die sich auf die Langwortkonstante 0x12345678" beziehen, wie dies
auch bei dem alten, mnemonischen Code „SFST24 0x12345678, 8, $" der
Fall ist. In 6 stellen
die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 Adressen
0x8000000 und 0x8000004 dar.
-
Die Konstantenänderungseinheit 50 teilt dann
die neue Langwortkonstante „0x87654321"
an der 8. Bitposition entsprechend den Konstantendivisionsbitpositionsinformationen 604.
Die erzeugten Teilkonstanten „0x876543"
und „0x21"
werden jeweils in die Adresse 0x8000000 und 0x80000004 als die neuen
Konstanten-Operanden hinein geschrieben (Schritt S61).
-
Hierbei werden die Ausführungscode „08123456"
und „67280500"
in Adressen 0x80000000 und 0x80000004 jeweils gegen Ausführungscode „08876543"
und „62210500"
ersetzt, wie dies in 8D dargestellt
ist.
-
Beim Abschluss der Ausführungscodeänderung
in der Adresse 0x80000000 wird eine Änderungssolladresse d erhöht (Schritt S74).
Die Arbeitsumgebung liest den Ausführungscode „62210500" von der Adresse
0x80000004 (Schritt S71) und die Ausführungscoderückumwandlungseinheit 47 wandelt
den Ausführungscode
zu einem mnemonischen Code „MOV
0x21, R0" zurück.
Die Konstantenwiederherstellungseinheit 49 erfasst die Konstantenteilungsinformationen 807 für den mnemonischen
Code „MOV
0x21, R0" in der Fehlersuchinformationsspeichereinheit 42 und
ersetzt die Teilkonstante „0x21"
gegen die neue Langwortkonstante „0x87654321 ", dargestellt
in den Konstantenwertinformationen 602. Als Ergebnis wird
ein mnemonischen Code „MOV
0x87654321, R0", dargestellt in 8E,
für den
Ausführungscode,
gespeichert in der Adresse 0x80000004, angezeigt.
-
Der Fall, wenn der Programmierer
das Änderungsziel
nicht durch die Tasteneingabe, sondern unter Verwendung der Cursortasten
oder der Mouse 38, spezifiziert, wird nachfolgend erläutert.
-
Zum Beispiel spezifiziert, auf der
Anzeige 11, die die Rückumwandlungsergebnisse „SFST24 0x12345678,
8, $" bis „ST
R0, (_b)", dargestellt in 7F,
anzeigt, der Programmierer eine zu einer Konstanten in Bezug gesetzte
Operation, die die Konstante „0x12345678"
umfasst, als das Änderungsziel,
unter Verwendung der Cursortasten oder der Mouse 38. Die
Grafikbenutzerschnittstelle 45 lässt die Konstantenänderungseinheit 50 die
Konstantenteilungsinformationen 807 für die Konstante „0x12345678"
von der Fehlersuchinformationsspeichereinheit 42 lesen
und nimmt auf die Konstantenteilungsbitpositioneninformationen 604, die
Teilkonstantenbitlängeninformationen 605 und die
Teilkonstantenbenutzungsoperations-Adresseninformationen 606 Bezug,
um die anderen, zu einer Konstanten in Bezug gesetzten Operationen
zu spezifizieren, die sich auf die Konstante „0x12345678" beziehen. Wenn
der Programmierer die zu der Konstanten in Bezug gesetzte Operation „SFST24 0x12345678,
8, $" auf der Anzeige 11, zum Beispiel, spezifiziert, spezifiziert
die Konstantenänderungseinheit 50 die
zu der Konstanten in Bezug gesetzte Operation „MOV 0x12345678, R0" als sich
auf dieselbe Konstante „0x12345678" beziehend.
Die Konstantenänderungseinheit 50 schreibt
dann die zwei zu Konstanten in Bezug gesetzten Operationen in derselben
Art und Weise, wie dies vorstehend angegeben ist, um.
-
Innerer Aufbau
der Programmkompiliervorrichtung
-
Das Nachfolgende ist eine Erläuterung
der Programmkompiliervorrichtung unter Bezugnahme auf die 11–17.
-
11 stellt
den funktionalen Aufbau der Programmkompiliervorrichtung 81 dar.
Ein Programmarbeitsbereich 82 ist aus Dateiverzeichnissen
(directories), geschrieben in dem Festplattenlaufwerk 13,
aufgebaut, und speichert das Quellenprogramm, eingegeben unter Verwendung
von Texteditoren in dem Host Computer 10. Der Programmarbeitsbereich 82 wird
auch zum Erzeugen des Fehlersuchsollprogramms und der Fehlersuchinformation
verwendet.
-
12A stellt
ein Beispiel des Quellenprogramms, gespeichert in dem Programmarbeitsbereich 82,
dar.
-
Das beispielhafte Programm in 12A ist aus einer Angabe
einer Zuordnung einer hexadezimalen Zahl „0x12345678" zu einer globalen
Variablen a und einer Angabe einer multiplizierenden, globalen Variablen
a mit 2, Addieren des Werts „4"
zu dem Multiplikationsergebnis und Zuordnen des Additionsergebnisses
zu einer globalen Variablen b, aufgebaut. Die globalen Variablen
a und b werden als Identifizierer _a und _b ausgedrückt. Es
ist anzumerken, dass die Grammatikprüfung bereits an dem Quellenprogramm
durchgeführt
worden ist.
-
Eine Programmumwandlungseinheit 83 wandelt
das Quellenprogramm, gespeichert in dem Programmarbeitsbereich 82,
zu einem Zwischenbeschreibungsprogramm um. Zum Beispiel wandelt, wenn
Variablen a und b, geschrieben in dem Quellenprogramm in 12A, als Register R0 und
R1 spezifiziert sind, die Programmumwandlungseinheit 83 das
Quellenprogramm zu einem Zwischenbeschreibungsprogramm, dargestellt
in 12B, um. Jede Angabe
in der Figur besitzt die folgende Bedeutung.
-
„_DATA SECTION DATA": Pseudo-Instruktion,
die einen Start von Daten darstellt. „GLOBAL _a": Pseudo-Instruktion,
die darstellt, dass die Variable a eine globale Variable ist.
-
„DS 4": Pseudo-Instruktion
zum Sichern eines Bereichs für
die Variable a.
-
GLOBAL _b": Pseudo-Instruktion, die
darstellt, dass die Variable b eine globale Variable ist.
-
„DS 4": Pseudo-Instruktion
zum Sichern eines Bereichs für
die Variable b.
-
„_TEXT SECTION TEXT": Pseudo-Instruktion,
die einen Start von Ausführungscoden
darstellt.
-
„MOV 0x12345678, R0": Instruktion
zum Zuordnen einer Konstanten „0x12345678"
zu einem Register R0.
-
„ST R0, (_a)": Instruktion
zum Speichern des Werts des Registers R0 in einer Adresse, spezifiziert durch
eine Variable a.
-
„ADD R0, R0": Instruktion
zum Addieren des Werts des Registers R0 und des Werts des Registers R0
und Zuordnen des Additionsergebnisses zu dem Register R0.
-
„ADD 4, R0": Instruktion zum
Addieren einer Konstanten „4"
zu dem Wert des Registers R0 und zum Zuordnen des Additionsergebnisses
zu dem Register R0.
-
„ST R0, (_b)": Instruktion
zum Speichern des Werts des Registers R0 in eine Adresse, spezifiziert durch
eine Variable b.
-
In dieser Stufe sind die Konstanten,
umfasst in den Instruktionen „MOV
0x12345678, R0", „ST
R0, (_a)", und „ST
R0, (_b)", bis jetzt noch nicht dividiert worden. Der Konstanten-Operand „4" in
der Instruktion „ADD
4, R0" ist nicht dividiert, und zwar aufgrund der kurzen Länge.
-
Eine Konstantenteilungseinheit 84 erfasst jede
Instruktion, die eine Langwortkonstante in dem Zwischenbeschreibungsprogramm
umfasst, und ändert
die Instruktion zu einer Operationssequenz, die aus (k-1) Teilkonstantenverschiebungs-
und Speicheroperationen und einer gespeicherten Konstantennutzungsoperation
zusammengesetzt ist, wobei jede Operation eine von k Teilkonstanten,
erhalten durch Dividieren der Langwortkonstanten, umfasst. In der
gespeicherten Konstantenbenutzungsoperation ist der Operationscode
derselbe wie der Operationscode in der Instruktion, während die
Langwortkonstante in der Instruktion gegen den Teilkonstanten-Operanden,
ein anderer als die (k-1) Teilkonstanten in den Teilkonstantenverschiebungs-
und Speicheroperationen, ersetzt worden ist.
-
Es ist anzumerken, dass die Konstantenteilungsbitposition
und die Teilkonstantenzahl variieren, wenn eine Langwortkonstante
dividiert wird.
-
12C stellt
ein Ergebnis einer Teilung jeder 32-Bit-Konstanten in dem Zwischenbeschreibungsprogramm,
dargestellt in 12B,
in eine 24-Bit-Teilkonstante und eine 8-Bit Teilkonstante dar. Wie in den Figuren
dargestellt ist, wird die Instruktion „MOV 0x12345678, R0" gegen
Operationen „SFST24
0x123456, 8, $" und „MOV
0x78, R0" ersetzt. Die Instruktion „ST R0, (_a)" wird gegen Operationen „SFST24
a, 8, $" und „ST
R0, (_a)" ersetzt. Die Instruktion „ST R0, (_b)" wird gegen Operationen „SFST24
b, 8, $" und „ST
R0, (_b)" ersetzt.
-
Es sollte angemerkt werden, dass
die Konstantenteilungsbitposition und die Teilkonstantenzahl, die
hier verwendet sind, nicht festgelegt sind, und demzufolge könnten sie
zu dem Zeitpunkt geändert
werden, zu dem die Ausführungscode
erzeugt werden. Die Bedeutung jeder Operation nach der Konstantenteilung
wird nachfolgend erläutert.
-
„SFST24 0x123456, 8, $": Speichere
die 24 Bits hoher Ordnung der Konstanten „0x12345678" in das Konstantenregister 76 hinein.
-
„MOV 0x78, R0": Kombiniere
die 8 Bits niedriger Ordnung der Konstanten „0x12345678" mit der Teilkonstanten,
gespeichert in dem Konstantenregister 76, und Ordne die
Kombination dem Register R0 zu.
-
„SFST24 _a, 8, $": Speichere
die 24 Bits hoher Ordnung der Variablen a in das Konstantenregister 76 hinein.
-
„ST R0, (_a)": Speichere den
Wert des Registers R0 in einer Adresse, spezifiziert durch eine Variable
a.
-
SFST24 _b, 8, $": Speichere die 24
Bits hoher Ordnung der Variablen b in das Konstantenregister 76 hinein.
-
ST R0, (_b)": Speichere den Wert
des Registers R0 in einer Adresse, spezifiziert durch eine Variable
b.
-
In 12C besitzen
die Operationen „MOV 0x78,
R0", „ST
R0, (_a)", „ADD
R0, R0", „ADD
4, R0" und „ST
R0, (_b)" 12 Bits oder weniger. Allerdings kann keine davon parallel
ausgeführt
werden, entweder aus dem Grund, dass eine angrenzende Operation
länger
als 12 Bits ist, oder da die angrenzende Operation einen Zugang
zu derselben Ressource erfordert.
-
Eine Fehlersuchinformationsausgabeeinheit 85 beurteilt,
ob der Programmierer eine Fehlersuchinformationserzeugungsoption
bei dem Start der Programmkompiliervorrichtung 81 spezifiziert
hat. Falls der Programmierer die Fehlersuchinformationserzeugungs option
spezifiziert hat, überwacht
die Fehlersuchinformationsausgabeeinheit 85 die Programmkompilierungsverarbeitung
der Programmumwandlungseinheit 83, der Konstantendivisionseinheit 84,
einer Programmoptimierungseinheit 87 und einer Ausführungscodeausgabeeinheit 88,
und erzeugt Fehlersuchinformationen in dem Programmarbeitsbereich 82 durch
Schreiben von Parametern, unter allen Parametern, erzeugt in der
Kompilierungsverarbeitung, die sich auf die Fehlersuchverarbeitung
beziehen, und zwar in ein vorbestimmtes Format hinein. Die Erzeugung
der Fehlersuchinformationen, die nicht Konstantenteilungsinformationen
umfassen, können
durch herkömmliche
Programmkompiliervorrichtungen durchgeführt werden, und die vorliegende Erfindung
enthält
nicht irgendeine neue Offenbarung, die sich hierauf bezieht. Dementsprechend
wird die Verarbeitung einer Erzeugung der Fehlersuchinformationen,
die nicht die Konstantenteilungsinformationen umfassen, durch die
Fehlersuchinformationsausgabeeinheit 85, nicht hier im
Detail erläutert.
Allerdings werden, da die Erzeugung der Konstantenteilungsinformationen
die Hauptmerkmale der vorliegenden Erfindung bilden, die Komponenten,
die sich auf eine solche Erzeugung beziehen (Konstantenteilungsinformationserzeugungseinheit 86 und
Konstantenteilungsinformationsmodifikationseinheit 89)
im Detail nachfolgend erläutert.
-
Die Konstantenteilungsinformationserzeugungseinheit 86 erzeugt
Konstantenteilungsinformationen für jede Langwortkonstante, die
durch die Konstantenteilungseinheit 84 geteilt ist.
-
13 zeigt
ein Flussdiagramm, das die Erzeugung der Konstantenteilungsinformationen
darstellt. In der Figur spezifiziert eine Variable k die „k"-te Konstante
(nachfolgend Konstante k) von L Bits in dem Quellenprogramm. Eine
Variable q spezifiziert eine Bitposition in der Konstante k, während eine
Variable j eine von Operationen, umfasst in einer Instruktionssequenz,
spezifiziert. Wenn eine Operation j einen Konstanten-Operanden umfasst,
spezifiziert eine Variable r eine Bitlänge des Konstanten-Operanden.
Die 14A und 14B stellen Beispiele von
Operationen und eine Langwortkonstante, geschrieben unter Verwendung
der vorstehenden Variablen, dar.
-
In den Beispielen stellen „imm1,
imm2, ..., immx" dar, dass eine Langwortkonstante in eine gegebenen
Zahl von Teilkonstanten angegebenen Bitpositionen unterteilt ist.
Die gegebene Zahl von Teilkonstanten wird jeweils in einer der Operationen 1–10 (j =
1 bis j = 10) als ein Operand verwendet. Die Variable q stellt eine
Bitposition dar, an der jede Teilkonstante startet, während die
Variable r eine Bitlänge
jeder Teilkonstanten darstellt.
-
In 13 setzt
die Konstantenteilungsinformationserzeugungseinheit 86 sowohl
die Variable k als auch die Variable j bei 1 ein (Schritt S1)
und sucht eine Konstante k der Bitlänge L von dem Quellenprogramm
wieder auf (Schritt S2). Die Konstantenteilungsinformationserzeugungseinheit 86 erzeugt
einen Mustervorschlag von Konstantenteilungsinformationen k für die Konstante
k (Schritt S3) und schreitet dann zu Schritt S4 fort,
wo eine Variable q auf 1 gesetzt wird.
-
Die Konstantenteilungsinformationserzeugungseinheit 86 sucht
eine Operation j von der Instruktionssequenz auf (Schritt S5)
und beurteilt, ob eine Operation j eine Operation „SFST(r)
imm, q, q + r" ist (Schritt S6). Hierbei ist die Operation „SFST(r) imm,
q, q + r" eine Teilkonstantenverschiebungs- und Speicheroperation,
die eine r-Bit-Teilkonstante (1 ≦ r ≦ L) verwendet,
beginnend von dem „q"-ten
Bit einer Konstanten k. Falls die Operation j die Teilkonstantenverschiebungs-
und Speicheroperation ist, dann schreibt die Konstantenteilungsinformationserzeugungseinheit 86 eine
Konstante k in die Konstantenwertinformationen 602 in Konstantenteilungsinformationen
k hinein (Schritt S7) und schreibt eine Adresse einer Operation
j in die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 in
Konstantenteilungsinformationen k hinein (Schritt S8).
Die Konstantenteilungsinformationserzeugungseinheit 86 beurteilt,
ob q (Bit-Position) + r (Bit-Länge) = L (Bit-Länge einer
Konstanten k) gilt (Schritt S9). Falls q + r ≠ L,
wird die Variable q auf „q
+ r" gesetzt und die Variable j wird erhöht (Schritt S10),
bevor zu Schritt S5 zurückgegangen
wird.
-
Die Konstantenteilungsinformationserzeugungseinheit 86 sucht
wieder eine Operation j von der Instruktionssequenz auf (Schritt S5)
und beurteilt, ob die Operation j eine Operation „SFST(r)
imm, q, q + r" ist (Schritt S6). Wenn zwei aufeinanderfolgende Teilkonstantenverschiebungs-
und Speicheroperationen in der Instruktionsequenz existieren, schreitet
die Verarbeitung zu den Schritten S7–S8 fort.
-
Wenn andererseits die Operation j
nicht eine Teilkonstantenverschiebungs- und Speicheroperation ist,
beurteilt die Konstantenteilungsinformationserzeugungseinheit 86,
ob die Operation j eine gespeicherte Konstantennutzungsoperation
ist, die eine r-Bit-Teilkonstante
als einen Operanden umfasst (Schritt S17). Falls dies der
Fall ist, wird eine Adresse einer Operation j in die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 hinein
in die Konstantenteilungsinformationen k geschrieben (Schritt S18).
Die Konstantenteilungsinformationserzeugungseinheit 86 füllt auch
die Kon stanteteilungsbitpositionsinformationen 604 und
die Teilkonstantenbitlängeninformationen 605 basierend
auf einer Bitposition q und einer Bitlänge r (Schritt S19)
und schreitet zu Schritt S9 fort.
-
Falls im Schritt S17 eine
Operation j nicht die gespeicherte Konstantenbenutzungsoperation
ist, wird eine Variable j erhöht
(Schritt S20), bevor zu dem Schritt S5 zurückgekehrt
wird.
-
Wenn q + r = L im Schritt S9 gilt,
beurteilt die Konstantenteilungsinformationserzeugungseinheit 86,
ob eine Variable k die gesamte Zahl n der Langwortkonstanten, geschrieben
in dem Quellenprogramm, anpasst (Schritt S15). Wenn sie
nicht zueinander passen, wird die Variable k erhöht (Schritt S16),
und die Verarbeitung kehrt zu Schritt S2 zurück. Als
ein Ergebnis der vorstehenden Verarbeitung werden Konstantenteilungsinformationen
für jede
Langwortkonstante in dem Programmarbeitsbereich 82 erzeugt.
-
Die 15A–15C stellen
Konstantenteilungsinformationen, erzeugt für die Langwortkonstanten, umfasst
in dem Zwischenbeschreibungsprogramm, dargestellt in 12C, dar.
-
15A stellt
Konstantenteilungsinformationen für die Konstante „0x12345678"
dar. In der Figur stellen die Konstantentypinformationen 601 dar,
dass die Konstante als eine Zahl ausgedrückt ist, die Konstantenwertinformationen 602 stellen
den originalen Konstantenwert „0x12345678"
dar und die Teilkonstantenzahlinformationen 603 stellen
dar, dass die Konstante in zwei Konstanten unterteilt worden ist. Die
Konstantenteilungsbitpositionsinformationen 604 stellen
dar, dass die Konstante an dem achten Bit unterteilt worden ist,
und die Teilkonstantenbitlängeninformationen 605 stellen
dar, dass die zwei Teilkonstanten 24 Bits und 8 Bits sind. Die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 stellen
relative Adressen 0x0000.0 und 0x0004.0 der Operationen „SFST24
0x123456, 8, $" und „MOV 0x78,
R0" dar, dargestellt in 12C.
-
15B stellt
Konstantenteilungsinformationen für einen Identifizierer _a dar.
In der Fig. stellen die Konstantentypinformationen 601 dar,
dass die Konstante als ein Identifizierer ausgedrückt ist,
die Konstantenwertinformationen 602 stellen einen Identifizierer
_a als den originalen Konstantenwert dar, und die Teilkonstantenzahlinformationen 603 stellen dar,
dass die Konstante in zwei Konstanten unterteilt worden ist. Die
Konstantenteilungsbitpositionsinformationen 604 stellen
dar, dass die Konstante an dem achten Bit unterteilt worden ist,
und die Teilkonstantenbitlängeninformationen 605 stellen
dar, dass die zwei Teilkonstanten 24 Bits und 8 Bits sind. Die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 stellen
relative Adressen 0x0008.0 und 0x000C.0 der Operationen „SFST24
_a, 8, $" und „ST
R0, (_a)" dar, dargestellt in 12C.
-
15C stellt
Konstantenteilungsinformationen für einen Identifizierer _b dar.
In der Fig. stellen die Konstantentypinformationen 601 dar,
dass die Konstante als ein Identifizierer ausgedrückt wird,
die Konstantenwertinformationen 602 stellen einen Identifizierer
_b als den originalen Konstantenwert dar, und die Teilkonstantenzahlinformationen 603 stellen dar,
dass die Konstante in zwei Konstanten unterteilt worden ist. Die
Konstantenteilungsbitpositionsinformationen 604 stellen
dar, dass die Konstante an dem achten Bit unterteilt worden ist,
und die Teilkonstantenbitlängeninformationen 605 stellen
dar, dass die zwei Teilkonstanten 24 Bits und 8 Bits sind.
Die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 stellen
relative Adressen 0x0018.0 und 0x001C.0 der Operationen „SFST24
b, 8, $" und „ST R0,
(_b)", dar, dargestellt in 12C.
-
Die Programmoptimierungseinheit 87 optimiert
das Zwischenbeschreibungsprogramm durch Ändern der Ausführungsreihenfolge
von Operationen und durch Löschen
unnötiger
Operationen: Indem dies so vorgenommen wird, erzeugt die Programmoptimierungseinheit 87 parallele
Assemblercode, in denen optimierte Assemblerinstruktionen hineingepackt
sind. Hierbei ist der parallele Assemblercode ein Assemblercode,
der durch einen VLIW Prozessor verarbeitet werden soll, und umfasst
seriell und parallel angeordnete Assembler-Instruktionen, die jeweils
eine Mehrzahl von parallel ausführbaren
Operationen spezifizieren.
-
Die vorstehende Verarbeitung durch
die Programmoptimierungseinheit 87 ist besonders effektiv dann,
wenn Langwortkonstanten unterteilt werden. Die Optimierung, die
sich auf die Konstantenteilung bezieht, kann in die folgenden Typen
klassifiziert werden.
-
Der erste Typ dient dazu, das Konstantenteilungsmuster
zu ändern,
wie beispielsweise durch Dividieren einer Konstanten, die in 24
Bits unterteilt worden ist, und 8 Bits in 12 Bits, 12 Bits und 8
Bits, oder durch Teilen einer Konstanten, die in 12 Bits, 12 Bits,
und 8 Bits in 24 Bits, und 8 Bits unterteilt worden ist.
-
Der zweite Typ ist derjenige, die
Konstantenteilungsbitposition, wie beispielsweise durch Teilen einer
Teilkonstanten, die in 24 Bits und 8 Bits in 8 Bits und 24 Bits
unterteilt worden ist, zu ändern.
-
Der dritte Typ dient dazu, die Ausführungsreihenfolge
zwischen zu einer Konstanten in Bezug gesetzten Operationen und
anderer Operationen umzuschalten, um so Konflikte an den Bussen
zu vermeiden. Diese verschiedenen Typen werden separat oder zusammen
zum Optimieren des Zwischenbeschreibungsprogramms eingesetzt.
-
Zusätzlich optimiert, wenn eine
Bitlänge
eine Adresse als Folge einer Absolutadressenzuordnung geändert wird,
die Programmoptimierungseinheit 87 das Programm entsprechend
der Änderung.
-
Spezifische Beispiele der Optimierung
werden nachfolgend erläutert.
-
12D stellt
ein Ergebnis einer Optimierung des Zwischenbeschreibungsprogramms,
dargestellt in 12C,
dar. In der Fig. wird die Operation „SFST24 _b, 8, $" in 12C in Operationen „SFST12
_b, 20, $" und „SFST12
_b, 8, 20" unterteilt, darstellend, dass die Programmoptimierungseinheit 87 das
Konstantenteilungsmuster von „24
+ 8" zu „12+12+8"
geändert
hat. Als Folge werden die Operationen „SFST12 _b, 20, $" und „ADD R0,
R0" in eine Instruktion hineingepackt, während die Operationen „SFST12
_b, 8, 20" und „ADD
4, R0" in die andere Instruktion hineingepackt werden.
-
Demzufolge können die vorstehenden zwei Sätze von
Operationen jeweils parallel als Folge einer Unterteilung der Langwortkonstanten
in kleinere Konstanten und Umordnen der Operationen ausgeführt werden.
-
Die Ausführungscodeausgabeeinheit 88 wandelt
die parallelen Assemblercode, ausgegeben von der Programmoptimierungseinheit 87,
in versetzbare Objektcode um, die durch den VLIW Prozessor ausgeführt werden
kann, und in Umordnungsinformationen zum Darstellen von Label, verwendet
für die
Objektcode, Operationsadressen entsprechend zu den Label und jede
Label-Größe.
-
Die Ausführungscodeausgabeeinheit 88 verknüpft dann
die versetzbaren Objektcode in eine Sequenz hinein, ebenso wie sie
eine Endadresse für
jedes Label berechnet und jede Label-Größe bestimmt. Zum Beispiel fügt, wenn
eine absolute Adresse 0x80000000 den Ausführungscoden, dargestellt in 12D, zugeordnet wird, die
Ausführungscodeausgabeeinheit 88 die
absolute Adresse zu jeder Offset-Adresse hinzu.
-
Es wird angenommen, dass Adressen 0x80000000
und 0x00001000 jeweils dem Codebereich und dem Datenbereich zugeordnet
werden, während
Adressen 0x0000 und 0x0004 Variablen a und b in dem Datenbereich
zugeordnet werden. Das Adressenzuordnungsergebnis ist in 12E dargestellt.
-
Die Ausführungscodesequenz, die absoluten Adressen
so zugeordnet worden ist, wie dies vorstehend angegeben ist, wird
in jeden Speicher der Simulator-Software 17, des ROM-Emulators 20 und
der ICE-Karte 30 ebenso als das ausführbare Fehlersuchsollprogramm 24 gespeichert
werden. Die Fehlersuchinformationen, die die Konstantenteilungsinformationen
umfassen, werden in die Fehlersuchinformationsspeichereinheit 42 hineingespeichert.
Der vorstehenden Kompilierungsverarbeitung folgend führt die
Fehlersuchhilfsvorrichtung eine Fehlersuche in Bezug auf das Fehlersuchsollprogramm 24 durch.
-
Die Konstantenteilungsinformationsmodifikationseinheit 89 erneuert
eine relative Adresse jeder Operation in dem Zwischenbeschreibungsprogramm entsprechend
den Änderungen
der relativen Adresse nach der Optimierung durch die Programmoptimierungseinheit 87 und
berechnet jede Ladeadresse von der erneuerten, relativen Adresse
und der Programmadresse, die durch die Ausführungscodeausgabeeinheit 88 zugeordnet
ist, wobei die Ladeadresse dann in die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 in
den Konstantenteilungsinformationen 807 hineingeschrieben
werden.
-
Demzufolge werden die Konstantenteilungsinformationen 807 so
modifiziert, um mit den Inhalten des Fehlersuchsollprogramms 24 in
Abhängigkeit der
Optimierung des Programms durch die Programmoptimierungseinheit 87 übereinzustimmen,
wie beispielsweise durch Umanordnen/Löschen der Operationen.
-
Die 16A–16C stellen
Beispiele von Konstantenteilungsinformationen dar, die in Abhängigkeit der
Optimierung modifiziert worden sind. Die 16A und 16B stellen
die Konstantenteilungsinformationen für die Konstanten „0x12345678"
und „_a"
dar, die nicht modifiziert sind.
-
16C stellt
die modifizierten Konstantenteilungsinformationen für die Konstante „_b" dar.
In der Fig. werden die Teilkonstantenzahlinformationen 603 von „2" zu „3" geändert, während die Konstantenteilungsbitpositionsinformationen 604 von „8" zu „8, 20"
hin geändert
werden. Die Teilkonstantenbitlängeninformationen 605 werden
von „24,
8" zu „12,
12, 8" geändert,
das neue Konstantenteilungsmuster „12 + 12 + 8" darstellend.
Die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 stellen
relative Adressen 0x0010.0, 0x0014.1 und 0x0018.1 jeweils für die Operationen „SFST12
_b, 20, $", „SFST12
_b, 8, 20" und „ST
R0, (_b)" dar, gezeigt in 12D,
anstelle von vorherigen Adressen 0x0008.0 und 0x000C.0.
-
Die 17A–17C stellen
Beispiele von Konstantenteilungsinformationen dar, die entsprechend der
absoluten Adressenzuordnung durch die Ausführungscodeausgabeeinheit 88 modifiziert
worden sind.
-
Die 17A stellt
die modifizierten Konstantenteilungsinformationen für die Konstante „0x12345678"
dar. In der Fig. werden die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 zu
Adressen 0x8000000.0 und 0x8000004.0 als ein Ergebnis eines Addierens
der absoluten Adresse 0x8000000 zu jeder der relativen Adressen
0x0000.0 und 0x0004.0 geändert.
-
17B stellt
die modifizierten Konstantenteilungsinformationen für einen
Identifizierer _a dar. In der Fig. werden die Konstantenwertinformationen 602 von „_a" zu „0x00001000"
geändert,
während
die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 von
den relativen Adressen 0x0008.0 und 0x000C.0 zu absoluten Adressen
0x80000008.0 und 0x8000000C.0 geändert
werden.
-
17C stellt
die modifizierten Konstantenteilungsinformationen für den Identifizierer
_b dar. In der Fig. werden die Konstantenwertinformationen 602 von „_b" zu „0x00001004"
geändert,
während
die Teilkonstantenbenutzungsoperations-Adresseninformationen 606 von
den relativen Adressen 0x0010.0, 0x0014.1 und 0x0018.1 zu absoluten
Adressen 0x80000010.0, 0x80000014.1 und 0x80000018.1 geändert werden.
-
Mit der vorstehenden Ausführungsform
kann ein mnemonischer Code ohne die originale Konstante anstelle
der Teilkonstanten unter Verwendung der Konstantenwiederherstellungsfunktion
der Fehlersuchhilfsvorrichtung angezeigt werden. Dementsprechend
kann der Programmierer leicht die Programminhalte verstehen. Auch
kann, wenn die Konstantenteilungsinformationen nicht in der Programmkompiliervorrichtung
erzeugt werden, die Fehlersuchhilfsvorrichtung die originale Konstante
unter Verwendung von Ausführungshistorie-Informationen und
angrenzenden Ausführungscoden
wieder herstellen. Demzufolge ist es möglich, die originale Konstante
in den Fehlersuchsollprogrammen, erzeugt durch herkömmliche
Programmkompiliervorrichtungen, wiederherzustellen. Insbesondere
kann die korrekte, originale Konstante unter Verwendung der Ausführungshistorie-Informationen
wieder hergestellt werden, gerade wenn eine Verzweigungsinstruktion
in zu Konstanten in Bezug gesetzten Operationen für die originale
Konstante umfasst sind. Auch kann, durch Erzeugen von Konstantenteilungsinformationen
in der Fehlersuchstufe, die originale Konstante unter einer hohen
Geschwindigkeit zum nächsten
Zeitpunkt wieder hergestellt werden. Auch können die Ausführungshistorie-Informationen
gelöscht
werden, wenn einmal die Konstantenteilungsinformationen erzeugt
sind.
-
Auch kann mit der Konstantenwiederherstellungsfunktion
der Fehlersuchhilfsvorrichtung der Programmierer einfach Ausführungscode ändern, ohne zu
wissen; dass die originale Konstante in Teilkonstanten unterteilt
worden ist.
-
Während
Verschiebe- und Speicheroperationen als die auf die Konstante in
Bezug gesetzten Operationen in der vorliegenden Ausführungsform verwendet
werden, können
Verzweigungsoperationen auch verwendet werden.
-
Während
die originale Konstante in zwei aufeinanderfolgende Adressen in
der vorliegenden Ausführungsform
unterteilt ist, kann sie auch in drei oder mehr Adressen unterteilt
werden, die nicht aufeinanderfolgend sind.
-
Während
die Fehlersuche durch Eingeben des Fehlersuchbefehls oder unter
Verwendung der Hinweisvorrichtung, wie beispielsweise der Mouse
in der vorliegenden Ausführungsform,
ausgeführt
wird, können
andere Eingabevorrichtungen, wie beispielsweise ein Trackball, eine
Berührungstafel
und ein Lichtstift, anstelle davon verwendet werden.
-
Während
eine Gruppe von zu Konstanten in Bezug gesetzte Operationen, die
sich auf dieselbe Konstante beziehen farblich auf der Anzeige codiert sind,
um sie von anderen Operationen in der vorliegenden Ausführungsform
zu unterscheiden, kann ein unterschiedliches Anzeigeverfahren verwendet
werden, wie beispielsweise Anzeigen in einem eindeutigen Zeichenbild,
Hinzufügen
eines eindeutigen Symbols, oder Unterstreichung.
-
Obwohl die vorliegenden Erfindung
vollständig
anhand von Beispielen unter Bezugnahme auf die beigefügten Zeichnungen
beschrieben worden ist, sollte angemerkt werden, dass verschiedene Änderungen
und Modifikationen Fachleuten auf dem betreffenden Fachgebiet ersichtlich
werden. Deshalb sollten, ohne dass solche Änderungen und Modifikationen
außerhalb
des Schutzumfangs der vorliegenden Erfindung liegen, sie als darin
eingeschlossen angesehen werden.