Die vorliegende Erfindung betrifft eine Programmumwandlungseinheit
zum Umwandeln einer höheren Programmiersprache in ein Maschinensprachenprogramm.
(2) Stand der Technik
Mit den jüngsten Fortschritten auf dem Gebiet der Elektronik
werden Datenprozessoren und Mikrocomputer verbreitet verwendet. Der typische Datenprozessor
von heute kann Daten von verschiedener Breite verarbeiten, und ein mit einer 16-Bit-CPU
(16-Bit-Zentraleinheit) oder mit einer 24-Bit-CPU (24-Bit-Zentraleinheit) ausgerüsteter
Datenprozessor ist entwickelt worden, um den Bedarf an effizienterer Datenverarbeitung
und fortgeschritteneren Funktionen zu befriedigen. Ein solcher Prozessor kann zusätzlich
mit verschiedenen Arten von Registergruppen, einschließlich einem Adressregister
und einem Datenregister, ausgerüstet werden, um die Leistungsfähigkeit
zu verbessern. Weiterhin besteht ein Bedarf an einem Prozessor mit einer effizienteren
Adressenverwaltungsfunktion, da die Datenmengen und die Programme als Reaktion auf
die Weiterentwicklung und die Erweiterung und Vergrößerung von Anwendungen
größer geworden sind. Im Folgenden werden fünf herkömmliche
Prozessoren beschrieben werden, wobei sowohl deren Verbesserungen oder Weiterentwicklungen
als auch deren Nachteile bei der Adressenverwaltung diskutiert werden.
ERSTER HERKÖMMLICHER PROZESSOR
Zuerst wird ein 16-Bit-Segment-Adressprozessor beschrieben werden.
Diese Art von Prozessor wird zum Beispiel in Hardware for Microprocessor", Iwan
Morishita, Iwanami-shoten, 9.November 1984, beschrieben. Der Prozessor umfasst ein
Segmentregister, das eine höhere Adresse, einschließlich von Bit über
16 Bit hinaus speichert, um einen Adressenbereich über 64 Kilobbyte (kByte)
(216) zu sichern, während er 16-Bit-Daten verarbeitet. Genauer gesagt,
wird der Adressenbereich über 64 Kilobyte in eine Menge von 64-Kilobyte-Segmente,
die seriell zu nummerieren sind, unterteilt, und die Adressen werden nach Segmentnummern
verwaltet, die somit in dem Segmentregister gespeichert werden, und einem Versatz,
das heißt einer Entfernung von dem Kopf eines jeden 16-Bitegmentes.
Weiterhin wird in der oben genannten Schrift „Hardware for
Microprocessor" ein 32-Bit-Segment-Prozessor beschrieben. Dieser Prozessor kann
einen Adressenbereich von 4 Gigabyte (232) speichern, indem er 32-Bitadressen
verwaltet, während er 32-Bitdaten verarbeitet.
Diese Segmentadressprozessoren lassen ein Maschinensprachenprogramm
laufen, das durch eine Programmumwandlungseinheit, wie zum Beispiel einen Compiler,
übersetzt wird.
Eine Adressenverwaltung eines Compilers für einen 16-Bit-Prozessor
umfasst zwei Modelle: eines ist ein Großmodell und das andere ist ein Nah-Fern-Modell.
Ein Großmodell-Compiler setzt stets eine Zeigervariable mit einer
Segmentnummer und einem 16-Bit-Versatz paarweise. Somit berechnet der 16-Bit-Prozessor,
der einen Objektcode von dem Compiler laufen lässt, den Inhalt des Segmentregisters,
um denselben jedes Mal zu aktualisieren, wenn eine Adresse berechnet wird. Demzufolge
wird die Leistungseffizienz im Vergleich zu einem 16-Bit-Nichtsegment-Adressprozessor
wesentlich verschlechtert.
Ein Nah-Fern-Modell-Compiler beseitigt dieses Problem, indem er eine
von zwei Zeigervariablen bezeichnet: eine Nah-Zeigervariable und eine Fern-Zeigervariable;
die erstgenannte wird verwendet, um auf eine Adresse in einem Segment zuzugreifen,
und die letztgenannte wird verwendet, um auf eine Adresse über eine Segmentgrenze
hinweg zuzugreifen. Der Compiler setzt den 16-Bit-Versatz allein mit der Nah-Zeigervariablen,
während er ein Paar aus der Segmentnummer und dem 16-Bit-Versatz mit der Fern-Zeigervariablen
setzt. Wenn der 16-Bit-Nah-Fern-Modell-Compiler die Nah-Zeigervariable verwendet,
wird die Leistungseffizienz im Vergleich zu dem 16-Bit-Großmodell-Compiler
verbessert. Andererseits verschlechtert sich jedoch die Programmierleistung, da
es sich um einen Programmierer handelt, der eine von zwei Zeigervariablen auswählt,
indem er die Segmentgrenze prüft.
Ein Compiler für einen 32-Bit-Prozessor ist dahingehend vorteilhaft,
dass er die oben genannten Probleme nicht aufweist. Da dieser Compiler eine 32-Bitadresse
für eine 32-Bitdatenvariable zu der Zeigervariablen setzt und der Programmierer
somit keine Segmentgrenze prüfen muss. Natürlich lässt der 32-Bit-Prozessor
das kompilierte Programm ohne Verschlechterung der Leistung laufen, während
er den Adressenbereich von 4 Gigabyte sichert.
Die Mehrzahl der Anwendungen für einen eingebetteten Mikrocomputer
erfordert jedoch weder die 32-Bitdaten noch den Adressenbereich von 4 Gigabyte,
sondern erfordert 16-Bitdaten und einen Adressenbereich über 64 Kilobyte. Wenn
somit der 32-Bit-Prozessor und der Compiler verwendet werden, wird die Hardware
nicht vollständig ausgenutzt, wodurch Kosten und Strom vergeudet werden. Weiterhin
bezeichnet der 32-Bit-Prozessor stets eine 32-Bitadresse in einem Programm, und
somit erhöht sich eine Programmcode-Größe unerwünscht. Weiterhin
wird die Leistung verschlechtert, wenn ein 16-Bitdatenbus verwendet wird, um die
Verbindung des 32-Bit-Prozessors zu einem Speicher im Vergleich zu einem 32-Bitdatenbus
herzustellen.
Daher erfüllen weder die 16-Bitegment-Adressprozessoren noch
die 32-Bit-Segment-Adressprozessoren, die bislang entwickelt worden sind, die praktischen
Anforderungen.
ZWEITER HERKÖMMLICHER PROZESSOR
Ein zweiter herkömmlicher Prozessor umfasst verschiedene Arten
von Registergruppen, einschließlich Adressregistern und Datenregistern, die
zum Beispiel in „M68000 8/16/32 MICROPROCESSOR USER MANUAL Motorola Inc.,
beschrieben werden.
Eine Struktur des zweiten herkömmlichen Prozessors wird in
1 veranschaulicht. Der Prozessor umfasst eine Registereinheit
11 mit einer Vielzahl von 32-Bit-Adressregistern, eine Befehls-Dekodiereinheit
12 zum Dekodieren eines Befehls, eine Externspeichereinheit 13
und eine Externzugriff-Ausführungseinheit 14 zum Eingeben und Ausgeben
von Daten einer bezeichneten Bitbreite mit der Extemspeichereinheit 13.
Die Befehls-Dekodiereinheit 12 sendet Registerinformationen 15
und Bitbreiteinformationen 16 an die Externzugriff-Ausfuhreinheit
14; Registerinformationen 15 und Bitbreiteninformationen
16 deuten ein Register an, das Datenübertragung unterliegt, beziehungsweise
eine Bitbreite von Übertragungsdaten. In einer Anwendung wird hierin angenommen,
dass ein 16-Megabyte-Adressenbereich und 16-Bitdaten verwendet werden.
Ein Format eines Befehls zur Übertragung von Daten von einem
der Register in der Registereinheit 11 zu der Externspeichereinheit
13 wird in 2 gezeigt: OP ist eine Operationsfeldbezeichnung
einer Art von Befehl; SIZE ist eine Größenfeldbezeichnung der Bitbreite
der Übertragungsdaten; SRC ist ein Quellenfeld und bezeichnet ein Quellenregister;
und DEST ist ein Zielfeld zur Angabe einer Zieladresse in der Externspeichereinheit
13.
Der zweite herkömmliche Prozessor führt den oben genannten
Datenübertragungsbefehl auf die folgende Weise aus.
Zuerst dekodiert die Befehlsdekodiereinheit 12 den Datenübertragungsbefehl
als: OP bezeichnet MOVE; SIZE bezeichnet 32-Bitdaten; SRC bezeichnet ein Register
A1; und DEST bezeichnet eine in einem Register A2 gespeicherte Adresse. Dementsprechend
gibt die Dekodiereinheit 12 die Registerinformationen 15 und die
Bitbreiten-Informationen 16 an die Zugriffs-Ausführungseinheit
14 aus, die als Reaktion darauf den Inhalt in dem Register A1 in die Externspeichereinheit
13 an der Adresse @A2 in der bezeichneten 32-Bitbreite schreibt.
Jedoch erfordert der zweite herkömmliche Prozessor das Größenfeld
in jedem Datenübertragungsbefehl, was weiterhin eine Größenfeld-Dekodierfunktion
erfordert und einen Befehlscode erweitert oder die Codegröße vergrößert.
Da weiterhin das Größenfeld entweder 32-Bitdaten oder 16-Bitdaten
oder 8-Bitdaten bezeichnet, werden 32-Bitdaten stets an das Adressregister übertragen,
wenn die Adresse für die Anwendung 24 Bit oder weniger breit ist. Wenn 16-Bitdaten
übertragen werden, wird die Ausführungsgeschwindigkeit nicht verringert
werden, wenn der Compiler eine 16-Bitbreite durch das Größenfeld bezeichnet.
Einige Compiler beurteilen jedoch gegebenenfalls die effektive 16-Bitbreite nicht,
wenn das Programm 16-Bitdaten verwendet. Wenn somit die Daten zu einem 8-Bitbreiten-Speicher
übertragen werden, werden die Daten vier Mal pro 8 Bit übertragen und
die letzten beiden 8-Bitdatenübertragungen sind redundant.
DRITTER HERKÖMMLICHER PROZESSOR
Ein dritter herkömmlicher Prozessor kann Daten einer Vielzahl
von Datenbreiten verarbeiten. Immediate-Daten zum Beispiel, die direkt einen Wert
in einem Programmbefehl spezifizieren, werden verarbeitet, nachdem die Immediate-Daten
vorzeichenvervielfacht werden. Diese Art von Prozessor wird zum Beispiel in „Microcomputer
Series 14 68000 Microcomputer", Yuzo Kida, Maruzen, März 1983, beschrieben.
Eine Struktur des dritten herkömmlichen Prozessors wird in
3 veranschaulicht. Der Prozessor umfasst eine Gruppe
von Datenregistern 31 zum Speichern von 32-Bitadressen, eine Gruppe von
Adressregistern 32 zum Speichern von 32-Bitadressen, ein Vorzeichen-Vervielfachungsmodul
33 für Vorzeichenvervielfachung des MSB (höchstwertigsten Bit)
von 16-Bitdaten zur Ausgabe von 32-Bitdaten, eine Befehls-Dekodiereinheit
34 zum Dekodieren eines Befehls und einen Rechner 35 zum Durchführen
einer Berechnung gemäß dem Dekodierergebnis.
Der wie oben beschrieben aufgebaute Prozessor arbeitet wie folgt.
Zuerst dekodiert die Befehls-Dekodiereinheit 34 einen Eingangsbefehl von
einer externen Einheit, und die anderen Komponenten arbeiten in zwei Fällen
gemäß dem dekodierten Befehl unterschiedlich.
(1) In dem Fall eines Befehls zum Übertragen der Daten zwischen einem der
Datenregister 31 und einem der Adressregister 32 oder zur Ausführung
einer arithmetischen Operation unter Verwendung der Daten in denselben empfängt
der Rechner 32-Bitdaten von beiden Registern und führt eine Berechnung unter
Verwendung derselben durch, um das Ergebnis der Operation in ein bezeichnetes Register
zu speichern.
(2) In dem Fall eines Befehls zur Übertragung von 16-Bit-Immediate-Daten
zu einem der Datenregister 32 oder Adressregister 32 oder zur
Ausführung einer arithmetischen Operation unter Verwendung derselben werden
die Immediate-Daten durch das Vorzeichen-Vervielfachungsmodul 33 auf 32-Bitdaten
erweitert, um an den Rechner 35 ausgegeben zu werden; der Rechner
35 führt eine Berechnung unter Verwendung der vorzeichenvervielfachten
Daten durch und speichert das Ergebnis der Operation in ein bezeichnetes Register.
Die Operation des Vorzeichen-Vervielfachungsmoduls 33 wird
unter Bezugnahme auf die 4A, 46 ausführlicher
beschrieben werden. Wenn das höchstwertigste Bit (MSB) der 16-Bitdaten wie
in 4A gezeigt "0" ausweist, werden die 16-Bitdaten
auf 32-Bitdaten erweitert, indem die Nullen in dem 32. Bit aufgefüllt werden.
Wenn das MSB andererseits wie in 4B gezeigt „1"
ausweist, werden die 16-Bitdaten auf 32-Bitdaten erweitert, indem Einsen in dem
32. Bit aufgefüllt werden.
Nehmen wir an, dass die Immediate-Daten kürzer sind als das für
die Berechnung und die Datenspeicherung bezeichnete Register. Die Operation des
dritten herkömmlichen Prozessors bei der Ausführung eines Programms mit
solchen Immediate-Daten wird unter Bezugnahme auf die 5,
6 und 7 erläutert
werden. 5 zeigt ein Beispiel eines Programms,
6 zeigt Details des Operationsflusses, um das Programm
laufen zu lassen, und 7 zeigt einen Adressenbereich.
Wie aus 6 hervorgeht, liest das Programm
in 5: summiere die Daten an sechzehn Adressen von den
Adressen H8000 bis H8100 (H stellt Hexadezimaladressen dar und eine jede Adresse
ist H10 Adressen entfernt) und schreibe das Ergebnis an die Adresse H10000000. Jedoch
ergibt sich nicht die Ausführung der Befehle 2, 5 und 6 wie durch
6 veranschaulicht. Um somit das Programm wie durch
6 veranschaulicht laufen zu lassen, werden die Befehle
2, 5 und 6 auf die Befehle 2', 5' beziehungsweise 6' überschrieben.
Zum weiteren Verständnis wird das Programm in 5
ausführlicher erläutert werden.
Befehl 1: Lösche das Datenregister D0.
Befehl 2: Setze die 16-Bit-Immediate-Daten H8000 in einem Adressregister A0.
Da der Befehl 2 eine Darstellungsweise der 16-Bit-Immediate-Daten
H8000 verwendet, werden die Immediate-Daten H8000 durch das Vorzeichen-Vervielfachungsmodul
33 auf 32-Bitdaten HFFFF8000 erweitert, um in das Adressregister A0 gespeichert
zu werden.
Befehl 3: Lies den an einer von dem Adressregister A0 bezeichneten Adresse gespeicherten
Inhalt aus dem Speicher aus, um denselben in ein Datenregister D1 zu speichern.
Befehl 4: Addiere den Inhalt in dem Datenregister D1 zu dem des Datenregisters
D0 hinzu, um das Ergebnis in dem Datenregister D0 zu speichern.
Befehl 5: Addiere die Immediate-Daten H0010 zu dem Adressregister A0, um das
Ergebnis in das Adressregister A0 zu speichern.
Die 16-Bit-Immediate-Daten H0010 werden durch das Vorzeichen-Vervielfachungsmodul
33 zu den 32-Bit-Daten HFFFF0010 erweitert. Danach addiert der Rechner
35 die in dem Adressregister A0 gespeicherten Adressdaten HFFFF8000 zu
den erweiterten Daten HFFFF0010, um die Daten HFFFF8010 auszugeben, die in dem Adressregister
A0 gespeichert sind.
Befehl 6: Vergleiche die Ausgabedaten mit den Immediate-Daten H8100.
Die Immediate-Daten H8100 werden ebenfalls von dem Vorzeichen-Vervielfachungsmodul
33 auf 32-Bitdaten HFFFF8100 erweitert, um an den Rechner 35 ausgegeben
zu werden. Dementsprechend vergleicht der Rechner 35 dieselben mit den
aus dem Adressregister A0 ausgelesenen Adressdaten HFFFF8010.
Befehl 7: Kehre zu dem mit A bezeichneten Befehl 3 zurück, wenn der erstgenannte
größer ist als der letztgenannte; ansonsten gehe zu dem Befehl 8 über.
Die Schleife der Befehle 3 bis 7 wird wiederholt, bis der Ausgangswert
des Adressregisters A0, das heißt HFFFF8000, durch H00000010 bis auf HFFFF8100
inkrementiert wird. Das bedeutet, dass der Prozessor zu dem Befehl 8 übergeht,
wenn das Ergebnis der sechzehn Additionsoperationen in dem Datenregister D0 gespeichert
worden ist.
Befehl 8: Speichere den Inhalt des Datenregisters D0 an der Adresse H10000000
in dem Speicher.
Mit dem dritten herkömmlichen Prozessor können die für
einen Zugriff auf das Adressregister verwendeten Immediate-Daten einen in dem in
6 gezeigten Fließbild unerwarteten Wert aufweisen.
Dies wird ausführlicher beschrieben werden. In 5
werden die Immediate-Daten H8000, H0010 und H8100 für den Zugriff auf das Adressregister
durch die Befehle 2, 5 beziehungsweise 6 verwendet. In dem Fall der Immediate-Daten
H8000 werden sie nicht auf H00008000 vorzeichenvervielfacht, sondern auf HFFFF8000.
Dies ist darauf zurückzuführen, dass das MSB derselben „1" anzeigt
und die höhere Ordnung mit allen Einsen gefüllt ist. Natürlich werden
die Immediate-Daten HFFFF8000 in das Adressregister A0 gespeichert und die Daten
an der Adresse HFFFF8000 werden durch den Befehl 3 ausgelesen, wo die Daten an der
Adresse H00008000 wie in 7 gezeigt anstelle dessen
ausgelesen werden sollen hätten. Somit werden die von 6
unerwarteten Daten als Ergebnis ausgelesen.
Analog dazu werden die Immediate-Daten H8100 durch den Befehl 6 nicht
auf H00008100, sondern auf HFFFF8100 erweitert, was den Prozessor veranlasst, einen
unerwarteten Wert als Operationsergebnis auszugeben.
Wie bereits ausgeführt worden ist, bewirkt bei dem dritten herkömmlichen
Prozessor die Vorzeichenvervielfachung, dass die Immediate-Daten einen Wert aufweisen,
der von einem Programmierer von dem Fließbild in 6
während des Programmdurchlaufes nicht erwartet wird. Dies tritt nur auf, wenn
das MSB der Immediate-Daten in dem Adressenbereich mit einem Wert „1" adressiert
ist. Um dieses Problem zu beseitigen, ist daher ein Verfahren unter Verwendung einer
32-Bit-Schreibweise für die Immediate-Daten-Bezeichnung vorgeschlagen worden.
Zum Beispiel werden die Immediate-Daten durch den Befehl 2 als H00008000 anstelle
von H8000 bezeichnet. Dieses Verfahren erfordert jedoch die 32-Bit-Schreibweise,
selbst wenn 16-Bitdaten bezeichnet werden, und somit unnötiges Erweitern der
Befehlsgröße und des Objektcodes.
Angesichts dieser Umstände ist ein Verfahren zum Überschreiben
des Programms unter Verwendung der 16-Bit-Immediate-Daten vorgeschlagen worden,
um das oben genannte Problem zu beseitigen, was in 8
gezeigt wird.
In dem Überschreibprogramm wird der ursprüngliche Befehl
2 in zwei Schritten ausgeführt: Befehle 2-1, 2-2. Die Immediate-Daten H8000,
die durch den Befehl 2-1 gegeben sind, werden zuerst auf HFFFF8000 vorzeichenvervielfacht,
und danach werden die erweiterten Daten HFFFF8000 und H0000FFFF durch eine UND-Funktion
verknüpft, um die höherwertigen 16 Bit durch den Befehl 2-2 auf Nullen
zu löschen, wodurch 32-Bitdaten H00008000 ausgegeben werden.
Analog dazu wird der ursprüngliche Befehl 6 in drei Schritten
ausgeführt: die Befehle 6-1, 6-2 und 6-3. Die durch den Befehl 6-1 gegebenen
Immediate-Daten H810 werden auf HFFFF8100 vorzeichenvervielfacht, um zuerst in dem
Adressregister Al gespeichert zu werden, und danach werden die erweiterten Daten
HFFFF8100 und H0000FFFF mit einer UND-Verknüpfung verknüpft, um die höherwertigen
16 Bit durch den Befehl 6-2 auf Nullen zu löschen, wodurch 32-Bitdaten H00008100
ausgegeben werden. Schließlich werden die Adressregister A0 und A1 durch den
Befehl 6-3 verglichen.
Dies ermöglicht die Anwendung der 16-Bit-Immediate-Daten; jedoch
erhöht dies die Anzahl der Schritte im Vergleich zu dem Programm
in 5.
Somit ist ein Prozessor, der zugreifen kann, um Daten in dem Adressenbereich
wirksam zu korrigieren, unter Verwendung der Immediate-Daten, die kürzer sind
als das Adressregister, noch nicht realisiert worden.
VIERTER HERKÖMMLICHER PROZESSOR
Ein vierter herkömmlicher Prozessor ist entweder ein Prozessor
des Typs CISC (Complex Instruction Set Computer) oder ein Prozessor des Typs RISC
(Reduced Instruction Set Computer). Der erstgenannte, wie zum Beispiel ein TRON
oder ein MC68040, kann verschiedene Arten von Befehlen ausführen, während
der letztgenannte, wie zum Beispiel SPARC oder MIPS, die Operation beschleunigen
kann, indem die Arten verfügbarer Befehle begrenzt werden. Sowohl die CISC-
als auch die RISC-Prozessoren verwenden im Allgemeinen eine Vielzahl von 32-Bitregistern
und einen 32-Bit-Rechner.
In einem 32-Bit-CISC-Prozessor können alle 32-Bit-Register beliebige
8-Bitdaten, 16-Bitdaten und 32-Bitdaten für einen beliebigen arithmetischen
Operationsbefehl handhaben. Als Reaktion erzeugt ein Compiler für den 32-Bit-CISC-Prozessor
einen Operationscode gemäß der Datenbreite, die in den 32-Bit-Registern
verwendet wird. Um zum Beispiel einen Befehl zum Speichern einer 8-Bitreichen-Datenvariable
oder einer 16-Bit-Kurzganzzahl-Datenvariable in das 32-Bitregister zu speichern,
wird ein Code erzeugt, der diese Datenvariablen in die unteren 8 beziehungsweise
16 Bit in dem 32-Bitregister speichert, sowie um die höhenwertigen 24 beziehungsweise
8 Bit intakt zu lassen.
Die Anzahl der Befehle erhöht sich jedoch auf die oben beschriebene
Weise beachtlich, was größere und ausgereiftere Hardware für die
Befehlsdekodierung und die Befehlsausführung erfordert. Dieses Problem wird
durch den RISC-Prozessor beseitigt.
Im Gegensatz zu dem CISC-Prozessor begrenzt der RISC-Prozessor die
Arten der verfügbaren Befehle und erzeugt keinen Befehl, der nur die unteren
8 Bit oder die unteren 16 Bit des 32-Bitregisters aktualisiert. Anstelle dessen
erzeugt er einen Code zur Aktualisierung aller 32 Bit in dem Register, und danach
erzeugt er einen Code zum Kompensieren der höhenwertigen 24 Bit beziehungsweise
16 Bit zum Einstellen der Bitbreiten auf angemessene Bereiche, die weiter unten
genannt werden. Dies erfolgt, um einen Überlauf zu kompensieren, der möglicherweise
durch die arithmetische Operation für die Datenvariablen verursacht wird.
ANGEMESSENE BEREICHE
Art der DatenvariableBereich (dezimal)Vorzeichenbehaftetes Zeichen-128 bis (einschl.) +127Vorzeichenloses Zeichen0 bis (einschl.) +255Vorzeichenbehaftete Kurzganzzahl-32768 bis (einschl.) +32767Vorzeichenlose Kurzganzzahl0 bis (einschl.) +65535
Mit dem 32-Bitregister können diese Datenvariablen die oben genannten
Bereiche infolge der Operation überschreiten. Wenn zum Beispiel ein 32-Bitregister
zu einer vorzeichenbehafteten Zeichendatenvariablen, die +127 ausweist, zugeteilt
wird, ergibt das Addieren eines Wertes von „2" zu diesem 32-Bitregister +129,
wodurch dieses veranlasst wird, einen falschen Wert für eine vorzeichenbehaftete
Zeichendatenvariable zu halten.
Um dies zu kompensieren, erzeugt der RISC-Compiler einen Code mit
den folgenden Kompensationsbefehlen und den Maschinensprachenbefehlen uneingeschränkt
jedes Mal, wenn der Inhalt des Registers durch die Operation aktualisiert wird.
Art der Datenvariable KompensationsbefehlVorzeichenbehaftetes Zeichen Linksverschiebung um 24 Bit undarithmetische Rechtsverschiebung um24 BitVorzeichenloses Zeichen Linksverschiebung um 24 Bit undlogische Rechtsverschiebung um 24 BitVorzeichenbehaftete Kurzganzzahl Linksverschiebung um 16 Bit undarithmetische Rechtsverschiebung um16 BitVorzeichenlose KurzganzzahlLinksverschiebung um 16 Bit undlogische Rechtsverschiebung um 16Bit
Linksverschiebung bedeutet eine Verschiebung in der Richtung des MSB
(des höchstwertigen Bits); arithmetische Rechtsverschiebung bedeutet eine Verschiebung
in der Richtung des LSB (des geringstwertigen Bit) bei Abdeckung eines Wertes „1"
in dem MSB der erweiterten Daten; und logische Rechtsverschiebung bedeutet eine
Verschiebung in der Richtung des LSB bei Abdeckung eines „0" in allen höherwertigen
Bit über die niederwertigen 8 Bit hinaus. Somit wird das Register
24, das +129 (100000001 als Binärzahl) speichert, um 24 Bit nach links
verschoben, um die höherwertigen 8 Bit, einschließlich des höchstwertigen
Bit (MSB), zu verwerfen, und arithmetisch wieder zurück nach rechts verschoben,
um die erweiterten 32-Bitdaten zu erhalten, die einen Wert „1 enthalten.
Der RISC-Compiler kompiliert das Programm jedoch unter Verwendung
von Zeichen- oder Kurzganzzahl-Datenvariablen mit einer wesentlichen Anzahl von
Kompensationsbefehlen, was die Codegröße des daraus resultierenden Maschinensprachenprogramms
erhöht und somit die Datenverarbeitungszeit verlängert.
Zusätzlich ergibt sich kein Vorteil durch die Nutzung der Kompensationsbefehle,
wenn ein Programm keinen Überlauf hat, oder ein Programmierer umgeht den Überlauf,
indem er den für eine jede Datenvariable zur Verfügung stehenden Bereich
überprüft.
Weiterhin verursacht eine Ganzzahl-Datenvariable neben den Zeichen-
und Kurzganzzahl-Datenvariablen das gleiche Problem in einem System, in dem die
Bitbreite des Registers größer ist als die der Ganzzahl-Datenvariablen.
Da die Ganzzahl-Datenvariablen am häufigsten verwendet werden, wird das Problem
sehr verstärkt. Wenngleich die Wirkungen willkommen sind, wenn der Programmierer
den Überlauf umgehen kann oder sich des Überlaufs nicht bewusst ist, erhöht
sich die Codegröße und die Programmausführung verlängert sich
wesentlich, da die kompensierten Codes die Linksverschiebung- und die arithmetischen
oder logischen Rechtsverschiebungsbefehle beinhalten,
FÜNFTER HERKÖMMLICHER PROZESSOR
Ein fünfter herkömmlicher Prozessor umfasst zwei Kennzeichengruppen
für eine arithmetische Operation mit unterschiedlichen Datenoperationsbreiten,
wie zum Beispiel in der japanischen offengelegten
Patentanmeldung Nr. 54-117646 beschrieben wird, und eine Struktur desselben
wird in 9 veranschaulicht. Der Prozessor umfasst eine
Befehls-Dekodiereinheit 91, einen 16-Bit-Rechner 92 zum Berechnen
von 16-Bitdaten, eine Kennzeichengruppe 93 für bedingte Verzweigungsbeurteilung,
eine weitere Kennzeichengruppe 94 für Berechnung und eine Verzweigungs-Beurteilungseinheit
95 zum Beurteilen, ob eine bedingte Verzweigung genommen wird.
Der oben genannte Prozessor arbeitet wie folgt. Zuerst dekodiert die
Befehls-Dekodiereinheit 91 einen Befehl. Wenn der dekodierte Befehl ein
arithmetischer Operationsbefehl ist, arbeitet der 16-Bit-Rechner 92 unter
Referenzierung der Kennzeichengruppe 94. Wenn andererseits der folgende
dekodierte Befehl ein bedingter Abzweigungsbefehl ist, bezieht sich die Abzweigungs-Beurteilungseinheit
95 auf die Kennzeichengruppe 93, um zu beurteilen, ob eine bedingte
Abzweigung genommen wird.
Ein weiteres Beispiel des Prozessors, der zwei Kennzeichengruppen
verwendet, wird in „16-bit Microprocessor 8086 Family" Shoko-do, März
1982, beschrieben. Eine Struktur des Prozessors wird in 10
veranschaulicht. Der Prozessor umfasst eine Befehls-Dekodiereinheit 101
zum Dekodieren eines Befehls, einen 16-Bit-Rechner 102 zum Berechnen von
16-Bitdaten, eine Kennzeichengruppe 103, die entsprechend dem Ergebnis
der 8- oder 16-Bitdaten-Operation geändert wird, einen Kennzeichenselektor
104 zum Wählen eines Einganges der Kennzeichengruppe 103,
die entsprechend dem Ergebnis der 8- oder 16-Bitdaten-Operation geändert
wird, ein Kennzeichen 105, das entsprechend dem Ergebnis einer 4-Bitdaten-Operation
geändert wird, und eine Abzweigungs-Beurteilungseinheit 106 zum Beurteilen,
ob eine bedingte Abzweigung genommen wird, indem die Kennzeichengruppe
103 verwendet wird.
Eine Bitstruktur von Additions-, Subtraktions- und Vergleichsbefehlen
und die eines Verzweigungsbefehls in der Maschinensprache werden in den
11A beziehungsweise 11B gezeigt. Mit den in
den 11A gezeigten Additions-, Subtraktions- und Vergleichsbefehlen
bezeichnet das erste Byte (Operationscode) eine Art von Operation und ein Bit (mit
W bezeichnet) darin bezeichnet entweder die 8-Bitdaten-Operation oder die 16-Bitdaten-Operation.
Das zweite Byte bezeichnet Register und einen Adressierungsmodus für Speicheroperanden.
Das dritte und das vierte Byte bezeichnen Speicheradressen. Mit dem in
11B gezeigten bedingten Abzweigungsbefehl bezeichnen
vier Bit in dem ersten Byte eine Abzweigungsbedingung.
Der oben in seinem Aufbau beschriebene Prozessor arbeitet wie folgt.
Zuerst dekodiert die Befehls-Dekodiereinheit 101 einen Befehl. Wenn der
Befehl ein arithmetischer Operationsbefehl ist, rechnet der 16-Bit-Rechner unter
Verwendung der Daten. Dementsprechend werden die Kennzeichen in der Kennzeichengruppe
103 entsprechend dem Operationsergebnis geändert. Gleichzeitig bezeichnet
die Befehls-Dekodiereinheit 101 entweder die 8-Bit-Operation oder die 16-Bit-Operation
an den 16-Bit-Rechner 102 und der Selektor 104 gibt Kennzeichenänderungsdaten
an die Kennzeichengruppe 103 aus, die durch die Datenoperationsbreite ermittelt
werden.
Wenn der folgende dekodierte Befehl ein bedingter Abzweigungsbefehl
ist, referenziert die Abzweigungs-Beurteilungseinheit 106 auf die Kennzeichengruppe
103, um zu beurteilen, ob die bedingte Abzweigung genommen wird.
Es ist zu beachten, dass in dem Fall, in dem auf die arithmetische
Operation eine arithmetische Operation mit Dezimaldaten folgt, der Rechner
102 auf das Kennzeichen 105 referenziert.
In dem ersten Beispiel werden die Kennzeichengruppe 103 und
das Kennzeichen 105 jedoch für den arithmetischen Operationsbefehl
beziehungsweise den Abzweigungsbefehl verwendet, und daher muss, wenn das Operationsergebnis
kürzer ist als die Datenoperationsbreite, das Operationsergebnis in der Richtung
einer höheren Ordnung erweitert werden, wenn die bedingte Abzweigung genommen
wird.
Es folgt eine Erläuterung für einen Fall, in dem 8-Bitdaten
in der 16-Bitdaten-Operaton verarbeitet werden. Wie in 12A
gezeigt wird, werden, wenn die Abzweigung auf Basis eines vorzeichenlosen 8-Bitdatenelementes
beurteilt wird, die Daten auf H0088, H00F8 erweitert, indem Nullen in den höherwertigen
8 Bit kopiert werden. Wie andererseits in 12B gezeigt
wird, wenn die Abzweigung auf Basis eines vorzeichenbehafteten 8-Bitdatenelementes
beurteilt wird, werden die Daten auf HFF88, HFFF8 erweitert, indem ein Wert „1"
von dem achten Bit in der niederen Ordnung bis zu dem MSB (höchstwertigen Bit)
kopiert wird. Das bedeutet, dass die betreffenden 8-Bitdaten auf die höherwertigen
8 Bit erweitert werden müssen, was zu einem erhöhten Überhang führt
und nicht bevorzugt wird.
Mit dem zweiten Beispiel, wenngleich die beiden Kennzeichen, die auf
den Operationsergebnissen an unterschiedlichen Datenoperationsbreiten (4 Bit und
8 oder 16 Bit) basieren, gleichzeitig gesetzt werden, ist die Anwendung des 4-Bit-Kennzeichens
auf die Dezimaldatenoperation begrenzt und kann nicht auf eine bedingte 4-Bitdaten-Abzweigung
angewendet werden. Darüber hinaus wird ein Kennzeichen aus der Kennzeichengruppe
103 ausgewählt, um den Überhang zu beseitigen, der in dem ersten
Beispiel verursacht wird; dies erfordert jedoch zwei Arten von arithmetischen Operationsbefehlen,
was wiederum eine größere Befehls-Dekodiereinheit erfordert.
KURZFASSUNG DER ERFINDUNG
Dementsprechend besteht eine Aufgabe der vorliegenden Erfindung in
der Bereitstellung einer Programmumwandlungseinheit, die geeignet einen Operationscode
auswählt, um ein Objektprogramm gemäß einer Datenbitbreite und eines
Anwendungsprogramm-Adressenbereiches zu erzeugen, das nicht von der Datenbitbreite
abhängig ist, um die Operationsleistung nicht aufgrund von Adressenberechnung
abzubauen, sowie in der Bereitstellung eines Prozessors, der das hierbei entstehende
Objektprogramm laufen lassen kann.
Die Aufgabe wird durch eine Programmumwandlungseinheit zum Erzeugen
eines Maschinensprachenprogramms aus einem Quellenprogramm für einen Prozessor
erfüllt, der eine N-Bit-Adresse verwaltet, während er M-Bitdaten verarbeitet,
wobei N und M ganze Zahlen größer als Null sind, wobei N größer
als M ist, wobei die Programmumwandlungseinheit umfasst: eine Parameter-Halteeinheit
zum Halten einer Datenbreite M und einer Zeigerbreite N, die von einem Benutzer
bezeichnet werden, wobei die Datenbreite, die die Anzahl von Bit von in dem Quellenprogramm
verwendeten Daten darstellt, während die Zeigerbreite die Anzahl von Bit einer
zusammen mit dem erzeugten Maschinensprachenprogramm anzuwendenden Adresse darstellt;
und eine Erzeugungseinheit zum Erzeugen eines Befehles zum Verwalten der Zeigerbreite,
wenn eine durch den Befehl verarbeitete Variable die Adresse darstellt.
Die M kann 16 sein und die N kann eine ganze Zahl in einem Bereich
von 17 bis einschließlich 31 sein.
Die Erzeugungseinheit kann umfassen: eine Beurteilungseinheit zum
Beurteilen einer Art von Maschinensprachenbefehl, wobei der Maschinensprachenbefehl
umfasst:
(1) einen Befehl zum Zugreifen auf einen Speicher, (2) einen Befehl zum Verwenden
eines Registers und (3) einen Befehl zum Anwenden eines Immediate-Datenelementes;
eine Speicher-Verwaltungseinheit zum Ausgeben einer Anweisung, in dem Fall des Befehls
(1), zum Verwalten der Datenbreite als effektive Speicherzugriffs-Breite, wenn eine
Variable, die in das Register zu schreiben oder aus dem Register auszulesen ist,
das Datenelement darstellt, und zum Verwalten der Zeigerbreite als effektive Bitbreite,
wenn die Variable die Adresse darstellt; eine Immediate-Verwaltungseinheit zum Ausgeben
einer Anweisung, in dem Fall des Befehls (3), zum Verwalten der Datenbreite als
effektive Bitbreite, wenn das Immediate-Datenelement das Datenelement darstellt,
und zum Verwalten der Zeigerbreite als effektive Bitbreite, wenn das Immediate-Datenelement
die Adresse darstellt; sowie eine Codeerzeugungseinrichtung zum Erzeugen des Maschinensprachenbefehls
entsprechend den Anweisungen von der Speicher-Verwaltungseinheit, der Register-Verwaltungseinheit
und der Immediate-Datenelement-Verwaltungseinheit.
Die N kann 24 sein, und die Codeerzeugungseinheit kann einen Befehl
für eine 24-Bitdatenoperation erzeugen, wenn die Zeigerbreite größer
als 16 Bit und kleiner als 24 Bit ist, und erzeugt einen Befehl für eine 16-Bitdatenoperation,
wenn die Zeigerbreite 16 Bit oder kleiner ist.
Die Programmumwandlungseinheit kann umfassen: eine Syntax-Analysiereinrichtung
zum Analysieren einer Syntax des Quellenprogramms, um dieses in eine Zwischensprache
umzuwandeln, die Zwischenbefehle umfasst, und zum nachfolgenden Beurteilen, ob eine
jede in den Zwischenbefehlen enthaltene Variable in einer Adresse verwendete Daten
darstellt; eine Tabellenerzeugungseinheit zum Erzeugen einer Tabelle für eine
jede Variable in den Zwischenbefehlen, wobei die Tabelle einen Namen zusammen mit
einem Typ einer jeden Variablen hält, wobei der Typ die Daten oder die Adresse
darstellt; eine Parameter-Halteeinrichtung zum Halten einer Datenbreite und einer
Zeigerbreite, die von einem Benutzer bezeichnet werden, wobei die Datenbreite die
Anzahl von Bit der Daten darstellt, während die Zeigerbreite die Anzahl von
Bit der Adresse darstellt; sowie eine Erzeugungseinheit eines Befehles zum Verwalten
der Datenbreite, wenn die Variable in dem Zwischenbefehl die Daten darstellt, sowie
eines Befehls zum Verwalten der Zeigerbreite, wenn die Variable die Adresse darstellt.
Die Erzeugungseinheit kann umfassen: eine Beurteilungseinheit zum
Beurteilen einer Art des Maschinensprachenbefehls, wobei der Maschinensprachenbefehl
umfasst:
(1) einen Befehl zum Zugreifen auf einen Speicher, (2) einen Befehl zum Verwenden
eines Registers und (3) einen Befehl zum Verwenden eines Immediate-Datenelementes;
eine Speicher-Verwaltungseinheit zum Ausgeben einer Anweisung, im Falle des Befehles
(1), zum Verwalten einer entsprechenden Bitbreite, die in der Parameter-Halteeinheit
gehalten wird, als effektive Speicherzugriffsbreite in Abhängigkeit von dem
Typ einer Variablen, auf die zuzugreifen ist, wie er in der Tabelle gezeigt wird;
eine Register-Verwaltungseinheit zum Ausgeben einer Anweisung, in dem Fall des Befehles
(2), Verwalten einer Variablen, die aus dem Register zu lesen beziehungsweise in
dieses zu schreiben ist, wie sie in der Tabelle gezeigt wird; eine Immediate-Verwaltungseinheit
zum Ausgeben einer Anweisung, in dem Fall des Befehles (3), zum Verwalten der entsprechenden
Bitbreite, die in der Parameter-Halteeinrichtung für das Immediate-Datenelement
gehalten wird, als effektive Bitbreite in Abhängigkeit von dem Typ des in der
Tabelle gezeigten Immediate-Datenelementes; und eine Codeerzeugungseinheit zum Erzeugen
des Maschinensprachenbefehles entsprechend den Anweisungen von der Speicher-Verwaltungseinheit,
der Register-Verwaltungseinheit und der Immediate-Verwaltungseinheit.
Gemäß der vorstehenden Ausführung können eine
willkürliche Datenbreite und Zeigerbreite in der Parameter-Einstelleinheit
eingestellt werden. Somit muss ein Programmierer keine Unregelmäßigkeit
in dem Adressenbereich, wie zum Beispiel eine Segmentgrenze, überprüfen.
Weiterhin kann ein Adressenbereich, der größer ist als der durch die Datenbreite
der Programmanwendung gesicherte, gesichert werden, ohne dass die Operationsleistung
aufgrund von Adressenberechnung verschlechtert wird: die Größe des Adressenbereiches
ist nicht von der Datenoperationsbreite abhängig.
Weiterhin kann die vorstehende Ausführung für die meisten
Anwendungen für einen eingebetteten Mikroprozessor angewendet werden, der weder
32-Bitdaten noch einen Adressenbereich von 4 Gigabyte erfordert, sondern der 16-Bitdaten
und einen Adressenbereich von über 64 Kilobyte erfordert.
KURZE BESCHREIBUNG DER ZEICHNUNGEN
Diese und weitere Aufgaben, Vorteile und Merkmale der Erfindung werden
aus der nun folgenden Beschreibung in Verbindung mit den anhängenden Zeichnungen,
die ein konkretes Ausführungsbeispiel der Erfindung veranschaulichen, erkennbar
werden.
Kurze Beschreibung der Zeichnungen:
1 ist ein Blockschema und veranschaulicht eine Struktur
des zweiten herkömmlichen Prozessors.
2 ist eine Ansicht und zeigt ein Befehlsformat für
den zweiten herkömmlichen Prozessor.
3 ist ein Blockschema und veranschaulicht eine Struktur
des dritten herkömmlichen Prozessors.
Die 4A und 4B
sind Ansichten und erläutern die Operation des Vorzeichenvervielfältigers.
5 ist ein Beispiel eines Programms, das auf dem Prozessor
in 3 läuft.
6 ist ein Fließbild und zeigt die entsprechende
Operation zu 5.
7 ist eine Ansicht und zeigt einen Speicherbereich
entsprechend 5.
8 ist ein Beispiel eines überschriebenen Programmlaufs
durch den dritten herkömmlichen Prozessor.
9 ist ein Blockschema und zeigt eine Struktur des zweiten
Beispieles des fünften herkömmlichen Prozessors.
10 ist ein Blockschema und veranschaulicht eine Struktur
des zweiten Beispieles des fünften herkömmlichen Prozessors.
Die 11A und 11B
sind Ansichten zur Erläuterung der Strukturen der Befehlsformate, die von dem
Prozessor in 10 verwendet werden.
Die 12A und 12B
sind Ansichten zur Erläuterung der Datenverarbeitung durch den Prozessor in
10.
13 ist ein Blockschema und veranschaulicht ein Verarbeitungssystem
der vorliegenden Erfindung.
14 ist ein Blockschema und veranschaulicht eine Ausführungseinheit
in 13.
15 ist ein Blockschema und veranschaulicht Strukturen
eines PSW (eines Programmstatuswortes) und einer Abzweigungs-Beurteilungseinheit
in 14.
Die 16A und 166 sind
Ansichten und zeigen Strukturen von Befehlsformaten, die in der vorliegenden Erfindung
verwendet werden.
17 ist ein Blockschema und veranschaulicht Strukturen
einer Registereinheit, einer Bussteuereinheit, einer Dekodiereinheit und eines Speichers
in 13.
Die 18A und 18B
sind Ansichten und zeigen ein Format für einen Datenübertragungsbefehl.
19 ist ein Fließschema und veranschaulicht die
Operation eines Compilers.
Die 20A und 20B
sind Beispiele einer Symboltabelle.
21 ist eine Teilgrafik aus Schritt 26 in
19.
22 ist ein Fließschema und veranschaulicht die
Operation einer Speicher-Verwaltungseinheit.
23 ist ein Fließschema und veranschaulicht die
Operation einer Register-Verwaltungseinheit.
24 ist ein Fließschema und veranschaulicht die
Operation einer Immediate-Verwaltungseinheit.
25 ist ein Fließschema und veranschaulicht eine
Überlauf-Kompensationsoperation.
26 ist ein Fließschema und veranschaulicht die
Operation einer Dekodiereinheit; und
27 ist ein Beispiel eines Programms mit Immediate-Datenübertragung.
BESCHREIBUNG DES BEVORZUGTEN AUSFÜHRUNGSBEISPIELES
Eine Hardwarestruktur eines Datenverarbeitungssystems mit einem Computer
und einer Programmumwandlungseinheit (einem Compiler) wird in 13
gezeigt. Das Datenverarbeitungssystem umfasst eine Speichereinheit 1 zum
Speichern einer C-Programmiersprache, einen Compiler 2 zum Übersetzen
des C-Sprachenprogramms in ein Maschinensprachenprogramm und einen Computer
3 zum Ausführen eines Objektcodes; der Computer 3 umfasst
einen Prozessor und einen Speicher.
Insbesondere umfasst der Computer 3 einen Speicher
130 und einen Adressbus 131, einen Datenbus 132, eine
Befehlssteuereinheit 134, eine Operations-Ausführungseinheit
135 und eine Bussteuereinheit 136.
Der Speicher 130 speichert einen Objektcode und Daten, die
in einem Programm verwendet werden.
Der Adressbus 131 ist 24 Bit breit und sendet eine Adresse
an den Speicher 130.
Der Datenbus 132 ist 16 Bit breit und überträgt
Daten an eine jede Komponente in dem Computer 3.
Die Befehlssteuereinheit 134 umfasst eine Abrufeinheit
139 und eine Dekodiereinheit 140 zum Abrufen eines Befehles über
die Bussteuereinheit 136 und dekodiert denselben; die Abrufeinheit
139 umfasst einen nicht veranschaulichten 24-Bit-Programm-Computer zur
Bezeichnung einer Befehlsadresse; die Dekodiereinheit 140 dekodiert einen
Befehl zur Ausgabe eines entsprechenden Steuersignals an eine jede Komponente in
dem Computer 3.
Die Operations-Ausführungseinheit 135 umfasst eine Registereinheit
137 und eine Ausführungseinheit 138 zum Ausführen eines
Befehles gemäß dem Steuersignal:
die Registereinheit 137 umfasst eine Vielzahl von 24-Bit-Adressregistern
und 24-Bit-Datenregistern; die Ausführungseinheit 138 führt eine
arithmetisch-logische 24- oder 16-Bitoperation aus. Es ist zu beachten, dass die
24-Bit-Ausführungseinheit 134 eine 24-Bit-Adressenberechnung und eine
16-Bit-Datenoperation ausführt. Das bedeutet, dass der Computer 3
eine 16-Bit-Datenoperation für die Datenverarbeitung durchführt, während
er eine 24-Bit-Datenoperation für die Adressenberechnung durchführt.
Die Bussteuereinheit 136 steuert die Adresse und die Datenübertragung
zwischen den Komponenten in dem Computer 3, die über den Adressbus
131 und den Datenbus 132 miteinander verbunden sind, sowie Datenübertragung
mit dem Speicher 130 in einer Bitbreite desselben.
Eine Struktur der Ausführungseinheit 138 wird in
14 veranschaulicht, und die Ausführungseinheit
138 umfasst eine ALU (eine arithmetisch-logische Einheit) 141,
ein PSW (ein Programmstatuswort) 142, eine Abzweigungs-Beurteilungseinheit
143, ein erstes Erweiterungsmodul 144 und ein zweites Erweiterungsmodul
145.
Insbesondere führt die ALU 141 eine arithmetisch-logische
24-Bit-Operation unter Verwendung der in der Registereinheit 137 gespeicherten
Daten aus.
Das PSW 142 ist ein Register, das eine Vielzahl von Kennzeichen
hält, die jeweils den Prozessorstatus anzeigen, und umfasst Kennzeichengruppen,
die entsprechend dem Operationsergebnis der ALU 142 geändert werden.
Die Kennzeichengruppen umfassen eine erste Kennzeichengruppe, die das Ergebnis der
16-Bitdaten-Operation anzeigt, und eine zweite Kennzeichengruppe,
die das Ergebnis der 24-Bitdaten anzeigt; es ist jedoch zu beachten, dass sowohl
die erste als auch die zweite Kennzeichengruppe jedes Datenoperationsergebnis anzeigen.
Die Abzweigungs-Beurteilungseinheit 143 beurteilt, ob ein
bedingter Abzweigungsbefehl genommen wird, indem sie die Kennzeichengruppen referenziert.
Das erste Erweiterungsmodul 144 führt Vorzeichenvervielfachung
oder Nullauffüllung an den niederwertigen Bit in dem Datenregister auf 24 Bit
durch oder es führt Vorzeichenvervielfachung oder Nullauffüllung an einem
16-Bit-Immediate-Datenelement auf 24 Bit durch, die an das Datenregister zu senden
sind.
Die Daten werden auf die gleiche Art und Weise vorzeichenvervielfacht,
wie dies unter Bezugnahme auf die 4A, 46
erläutert wurde, mit Ausnahme der Bitlänge; in dem ersten Erweiterungsmodul
144 ist N gleich vierundzwanzig und M gleich acht, während in dem
zweiten Erweiterungsmodul 145N gleich vierundzwanzig ist und M gleich sechzehn
ist. Weiterhin werden die Daten auf die gleiche Art und Weise nullaufgefüllt
wie die Vorzeichenvervielfachung, außer dass Nullen in die Bit höherer
Ordnung kopiert werden. Die beiden Erweiterungsmodule operieren selektiv in Abhängigkeit
von einem Befehl, und sie operieren nur an zwei Arten an Befehlen: Erweiterungsbefehle
zum Erweitern der Daten in dem Datenregister, und Übertragungsbefehle zum Übertragen
und Erweitern von Übertragungsdaten. Ein jeder Befehl wird unten beschrieben
werden, wobei Dn ein Datenregister ist, An ein Adressregister ist, n eine Registernummer
ist, Mem ein Speicherdatenelement ist sowie #imm8 und #imm16 Immediate-Datenelemente
mit den Zahlen 8, 16, die Bitlängen darstellen, sind.
ÜBERTRAGUNGSBEFEHL MIT ERWEITERUNGSDATEN
EXTX Dn;vorzeichenvervielfachte 16 Bit bis 24 BitEXTXU Dn;nullaufgefüllte 16 Bit bis 24 BitEXTXB Dn;vorzeichenvervielfachte 8 Bit bis 24 BitEXTXBU Dn;nullaufgefüllte 8 Bit bis 24 Bit
ERWEITERUNGSBEFEHL FÜR ÜBERTRAGUNGSDATEN
MOVI #imm16, Dn ; vorzeichenvervielfachte 16-Bit-Immediate-Datenauf 24 Bit (#imml6→Dn)MOVI #imm8, Dn ; vorzeichenvervielfachte 8-Bit-Immediate-Datenauf 24 Bit (#imm8→Dn)MOVI #imm16, An ; nullaufgefüllte 16-Bit-Immediate-Datenauf 24 Bit (#imm16→An)MOV Mem, Dn ; vorzeichenvervielfachte 16 Bit auf 24 Bit(Mem→Dn)MOVB Mem, Dn ; vorzeichenvervielfachte 8 Bit auf 24 Bit(Mem→Dn)MOVBU Mem, Dn ; nullaufgefüllte 8 Bit auf 24 Bit(Mem→Dn)
Strukturen des PSW (Programmstatuswortes) 142 und der Abzweigungs-Beurteilungseinheit
143 werden in 15 veranschaulicht. Das PSW
142 ist ein 16-Bit-Register, bei dem jedes Bit als unabhängiges Kennzeichen
oder Steuerkennzeichen dient, das den aktuellen Status des Computers 3
setzt. Es ist zu beachten, dass nur die niederwertigen 8 Bit, die als Operationskennzeichen
dienen, in der Zeichnung gezeigt werden, da die höherwertigen 8 Bit, welche
Steuerkennzeichen sind, für die hier vorliegende Erfindung bedeutungslos sind.
Die niederwertigen 8 Bit bestehen aus einer ersten Kennzeichengruppe 151
und aus einer zweiten Kennzeichengruppe 152; die erstgenannte umfasst die
Kennzeichen Z16, N16, V16 und C16, die entsprechend dem Ergebnis der 16-Bit-Datenoperation
geändert werden; und die letztgenannte umfasst die Kennzeichen Z24, N24, V24
und C24, die entsprechend dem Ergebnis der 24-Bit-Datenoperation geändert werden.
Die Kennzeichen Z16, Z24 (als 151a beziehungsweise
152a bezeichnet) sind Nullkennzeichen, die ein Nullergebnis ausweisen.
Die Kennzeichen N16, N24 (als 151b beziehungsweise
152b bezeichnet) sind negative Kennzeichen und deuten
ein negatives Ergebnis an.
Die Kennzeichen V16, V24 (als 151c beziehungsweise
152c bezeichnet) sind Überlaufkennzeichen und deuten Überlauf
an, wenn dieser während der Operation auftritt.
Die Kennzeichen C16, C24 (als 151d beziehungsweise
152d bezeichnet) sind Übertragskennzeichen und deuten einen Übertragsausgang
an.
Die Abzweigungs-Beurteilungseinheit 143 umfasst Selektoren
153 bis 156 und eine Bedingungs-Beurteilungseinheit
157. Der Ausgang von der ersten Kennzeichengruppe 151 oder der
zweiten Kennzeichengruppe 152 wird von den Selektoren 153 bis
156 entsprechend einer Bezeichnung von der Dekodierungseinheit
140 ausgewählt, wenn diese einen bedingten Abzweigungsbefehl dekodiert.
Eine Bitstruktur eines bedingten Abzweigungsbefehles, der von dem
Computer 3 laufen gelassen wird, wird in 16A
gezeigt. Der bedingte Abzweigungsbefehl besteht aus einem 8-Bit-OP-Code, der eine
bedingte Abzweigung und eine (relative) 8-Bit-Abzweigungs-Zieladresse andeutet.
Ein in dem OP-Code mit W bezeichnetes Bit bezeichnet eine Kennzeichengruppe, und
dementsprechend bezeichnet die Dekodiereinheit 140 diese Kennzeichengruppe
zu den Selektoren 153 bis 156 auf der Grundlage des Wertes von
W.
Eine Bitstruktur von Additions-/Subtraktions-Nergleichs-Befehlen zwischen
dem Register und dem Speicher 130 wird in 168 gezeigt.
Diese Befehle bestehen aus einem 8-Bit-OP-Code, der eine Operationsart anzeigt,
wobei 8 Bit Register bezeichnen und 16 Bit eine Speicheradresse bezeichnen. Es ist
zu beachten, dass der OP-Code kein Bit umfasst, das eine Datenbreite anzeigt. Dies
ist darauf zurückzuführen, dass sowohl die erste als auch die zweite Kennzeichengruppe
151, 152 bei der Ausführung der in 16B
gezeigten Additions-/Subtraktions-Nergleichs-Befehle geändert werden, und eine
geeignete Kennzeichengruppe wird entsprechend dem in 16A
gezeigten bedingten Abzweigungsbefehl ausgewählt.
Strukturen der Registereinheit 137 und der Bussteuereinheit
136 mit der Dekodiereinheit 140 und dem Speicher 130
werden in 17 veranschaulicht; es wird von der Annahme
ausgegangen, dass der Speicher 130 16 Bit breit ist.
Die Registereinheit 137 umfasst eine Adressregistergruppe
137a, ein Eingabepuffergate 137b, ein Ausgabepuffergate
137c, eine Datenregistergruppe 137d, ein weiteres Eingabepuffergate
137e, ein weiteres Ausgabepuffergate 137f, zwei Dekodierer
137g, 137h sowie einen Selektor 137i.
Die Adressregistergruppe 137a umfasst acht 24-Bit-Adressregister
A7 bis A0 und hält Eingabedaten von der Bussteuereinheit 136 oder
von der Ausführungseinheit 138 über den Selektor 137i
und das Eingabepuffergate 137b in einem der acht von dem Dekodierer
137g bezeichneten Register, während sie die Daten aus einem der acht
von dem Dekodierer 137h bezeichneten Register über das Ausgabepuffergate
137c ausgibt.
Die Datenregistergruppe 137d umfasst acht 24-Bit-Datenregister
D7 bis D0 und hält die Eingabedaten von der Bussteuereinheit 136 oder
von der Ausführungseinheit 138 über den Selektor 137i
und das Eingabepuffergate 137e in einem der acht von dem Dekodierer
137g bezeichneten Register, während sie die Daten aus einem der acht
von dem Dekodierer 137h bezeichneten Register über das Ausgabepuffergate
137f ausgibt.
Der Dekodierer 137g empfängt eine Art eines Zielregisters
(DT) und seine Nummer (DN) von der Befehls-Dekodiereinheit 140 und wählt
dementsprechend ein Register für Datenschreiben aus, wobei er ein Auswahlsignal
an den Selektor 137i und ein Gatesteuersignal von den Puffergates
137b, 137e ausgibt.
Der Dekodierer 137h empfängt eine Art eines Quellenregisters
(ST) und seine Registernummer (SN) oder ein Zielregister (DT) und seine Registernummer
(DN) von der Befehls-Dekodiereinheit 140 und wählt dementsprechend
ein Register für Datenauslesen; wobei er ein Gatesteuersignal für die
Puffergates 137c, 137f ausgibt. Es ist zu beachten, dass ST anzeigt,
ob das Quellenregister das Adressregister oder das Datenregister ist. Die Registernummern
(SN, DN) zeigen die Register an, die als Quellenregister beziehungsweise als Zielregister
bezeichnet sind.
Die Dekodiereinheit 140 dekodiert einen Befehl zum Ausgeben
eines geeigneten Steuersignals. In dem Fall eines Datenübertragungsbefehles
gibt die Dekodiereinheit 140 das Steuersignal einschließlich ST, SN,
DT und DN aus: DT und DN werden in den Dekodierer 137g eingegeben, wohingegen
entweder DT und DN oder ST und SN über einen Selektor 140a in den
Dekodierer 137h eingegeben werden. Zur gleichen Zeit gibt die Dekodiereinheit
140 die Arten der bezeichneten Quellen- und Zielregister für die Übertragungsdaten
(Adresse) oder Registerinformationen 171 über einen Selektor
140b an die Bussteuereinheit 136 aus, und sie gibt ein Aktivierungssignal
an die Bussteuereinheit 136 aus.
Die Bussteuereinheit 136 umfasst eine Externzugriffsbreiten-Steuereinheit
136j, einen Lastpuffer 136a, eine Eingabepuffer-Gategruppe
136b, einen Selektor 136d und einen Adresspuffer 136e,
einen Selektor 136f, einen inkrementierer 136g, ein Ausgabepuffergate
136h, eine Ablaufsteuerung 136i und ein drittes Erweiterungsmodul
136k. Die Bussteuereinheit 136 überträgt die Daten zwischen
den Registern in der Registereinheit 137 und dem Speicher 130
in der Bitbreite desselben.
Die Externzugriffsbreiten-Steuereinheit 136j empfängt
die Registerinformationen 171 und die Bitbreiteninformationen
172, die Bitbreiten für jede Registergruppe enthalten. Insbesondere
empfängt die Externzugriffssteuereinheit 136j die Registerinformationen
171, die eine Art des Registers, das dem Datenübertragungsbefehl unterliegt,
andeuten. Wenn das Adressregister bezeichnet wird, gibt die Externzugriffsbreiten-Steuereinheit
136j die Bitbreiteninformationen 172 aus, die 24-Bit-Datenübertragung
andeuten. Wenn das Datenregister bezeichnet wird, gibt es die Bitbreiteninformationen
172 aus, die 16-Bit-Datenübertragung andeuten. Die in dieser Schrift
genannte Registerinformation 171 ist ein 1-Bit-Signal, das „1" für
das Adressregister und „0" für das Datenregister anzeigt. Analog dazu
ist die Bitbreiteninformation 172 ein 1-Bit-Signal, das „1" für
die 24-Bit-Datenübertragung und „0" für die 16-Bit-Datenübertragung
anzeigt. Die Bussteuereinheit 136 steuert die Datenübertragungs-Bitbreiten:
24 Bit für das Adressregister und 16 Bit für das Datenregister.
Der Lastpuffer 136a hält Daten, die eine Vielzahl von
Malen von dem Speicher 130 über die Eingabepuffer-Gategruppe
136b eingegeben werden, und gibt dieselben über das dritte Erweiterungsmodul
136k an die Registereinheit 137 aus. Insbesondere ist der Lastpuffer
136a ein 24-Bit-Register, und 16-Bitdaten von dem Speicher 130
werden in die niederwertigen 16 Bit (15-0) eingegeben, wohingegen 8-Bitdaten von
dem Speicher 130 in die niederwertigen 8 Bit (7-0) eingegeben werden; wenn
der 8-Bitbreitenbus verwendet wird, überträgt die Bussteuereinheit
136 die 16-Bitdaten zwei Mal pro 8 Bit (Bit 7-0 und Bit 15-8) und die 24-Bitdaten
drei Mal pro 8 Bit (Bit 7-0, Bit 15-8, Bit 123-16). Der Speicherpuffer
136 hält die von der Registereinheit 137 eingegebenen 24-Bitdaten
und gibt die 24-Bitdaten über den Selektor 136d an den Speicher
130 aus, indem dieselben in die niederwertigen 16 Bit (15-0) und die höherwertigen
8 Bit (23-16) unterteilt werden.
Der Adresspuffer 136e hält eine Zugangsadresse, die
von der Registereinheit 137 über den Selektor 136f eingegeben
wird, und gibt dieselbe über das Ausgabepuffergate 136h an den Speicher
130 aus. Der Inkrementierer 136g inkrementiert die Ausgabeadresse
von dem Ausgabepuffergate 136h, die über den Selektor 136f
erneut in den Adresspuffer 136e eingegeben wird.
Die Ablaufsteuerung 136i steuert die Ausführung des
Lade-/Speicher-Befehls durch den Speicher 130 entsprechend der Bitbreiteninformation
172 von der Externzugriffs-Steuereinheit 136j: wenn die Bitbreiteninformation
172 24-Bit-Datenübertragung anzeigt, wird der Lade-/Speicher-Befehl
pro 16 Bit und 8 Bit ausgeführt, wohingegen er, wenn die Bitbreiteninformation
172 16-Bit-Datenübertagung anzeigt, pro 16 Bit ausgeführt wird.
Das dritte Erweiterungsmodul 136k führt an den 8-Bitdaten
und den 16-Bitdaten von dem Lastpuffer 136a unter der Steuerung der Dekodiereinheit
140 entsprechend dem Operationscode entweder Nullauffüllung oder Vorzeichenvervielfachung
auf 24-Bitdaten durch.
Ein Format des Datenübertragungs-Befehls wird in den
18A, 186 gezeigt. Das Format in
18A ist zum Beispiel ein Befehl zur Übertragung
der Daten aus dem Datenregister zu dem Speicher 130 (MOVE D1, @A2), und
das Format in 186 ist zum Beispiel ein Befehl zum Übertragen
der Daten aus dem Adressregister zu dem Speicher 130 (MOVE Al, @A2). In
den Zeichnungen ist OP ein Operationscodefeld, das eine Art der Operation anzeigt,
SRC ist ein Quellenfeld, das ein Datensenderegister bezeichnet, und DEST ist ein
Zielfeld, das einen Datenempfangsspeicher bezeichnet. Weiterhin bedeutet MOVE einen
Übertragungsbefehl, D1 bedeutet das Datenregister, A1, A2 bedeuten die Adressregister,
und @A2 ist eine Adresse in dem Speicher 130, den das Adressregister A2
anzeigt. Sowohl SRC als auch DEST sind bei Verwendung in dieser Schrift 3 Bit lang,
und der Übertragungsbefehl umfasst eine Vielzahl von OPs, um zu bestimmen,
ob SRC und DEST das Adressregister oder das Datenregister bezeichnen. Dies erfolgt,
um die Anzahl von Bit in den Feldern SRC und DEST weiter zu reduzieren.
Eine Struktur des Compilers 2 wird in 13
veranschaulicht. Der Compiler 2 umfasst eine Syntax-Analysiereinheit
120, eine Options-Anweisungseinheit 121, eine Codeerzeugungseinheit
122, eine Parameter-Einstelleinheit 123, eine Speicher-Verwaltungseinheit
124, eine Register-Verwaltungseinheit 125 und eine Immediate-Verwaltungseinheit
126.
Die Syntax-Analysiereinheit 120 analysiert eine Syntax in
einem C-Sprachenprogramm, um eine Zwischendatei zu erstellen, die aus Zwischenanweisungen
oder Zwischencodes besteht.
Die Options-Anweisungseinheit 121 wird verwendet, um eine
Anweisung für Überlaufkompensation einzugeben: sie weist die Codeerzeugungseinheit
122 an, einen Kompensationscode einzufügen, wenn eine Datenvariable
berechnet wird, was an späterer Stelle ausführlicher beschrieben werden
wird.
Die Codeerzeugungseinheit 122 erzeugt einen Objektcode entsprechend
der Zwischendatei.
Die Parameter-Einstelleinheit 123 hält die Bandbreite
einer Ganzzahl-Datenvariablen und die einer Zeigervariablen. Die in dieser Schrift
genannte Ganzzahl-Datenvariable und Zeigervariable sind 1 Bit beziehungsweise 24
Bit.
Die Speicher-Verwaltungseinheit 124 bezeichnet eine Speicherdaten-Auslese-/-Schreib-Breite
in Abhängigkeit von der Art der Variablen, die dem von der Codeerzeugungseinheit
122 erzeugten Lade-/Speicher-Befehl unterliegen.
Die Immediate-Verwaltungseinheit 126 bezeichnet eine Immediate-Datenbreite
in dem Operationscode in Abhängigkeit von der Art der Variablen für einen
Befehl unter Verwendung des Immediate-Datenelementes, das von der Codeerzeugungseinheit
122 erzeugt wird.
Die Operation des oben genannten Compilers 2 wird in dem
Fließbild in 19 ausführlich dargestellt.
In dem Schritt 20 wird ein C-Sprachenprogramm aus der Speichereinheit
1 genommen, und die Syntax desselben wird auf der Grundlage einer C-Sprachen-Grammatik
analysiert, um Zwischenbefehle und eine Zwischendatei zu erzeugen, die Zwischenanweisungen
enthält.
In dem Schritt 21 werden die Datenvariablen aus der Zwischendatei
ausgewählt, um eine Variablentabelle (eine Symboltabelle) zu erzeugen, die
Informationen zu einer jeden Variablen enthält. Beispiele von Symbolen werden
in den 20A, 20B gezeigt.
In den Zeichnungen wird das Symbol der Datenvariablen in einer Symbolspalte angegeben,
während das Vorzeichen und der Typ der Datenvariablen in einer Variablentyp-Spalte
angegeben werden; die Variable enthält eine Zeigervariable und eine Ganzzahlvariable
(einschließlich einem Zeichen). Die Anzahl von Bytes der Datenvariablen wird
in der Spalte Bytezahl angegeben, und eine Kopfadresse wird in Spalte für die
Kopfadresse angegeben, wenn diese dem Speicher 130 zugewiesen ist.
In dem Schritt 122 wird geprüft, ob alle Befehle aus den Zwischenbefehlen
übersetzt worden sind. Wenn dies der Fall ist, wird die Codeerzeugung beendet;
ansonsten geht der Programmablauf zu dem Schritt 23 über.
In dem Schritt 23 wird ein auszuführender Zwischenbefehl aus
der Zwischendatei ausgelesen.
In dem Schritt 24 wird ein Maschinensprachenbefehl oder werden mehrere
Maschinensprachenbefehle ausgewählt, um den in dem Schritt 23 ausgelesenen
Zwischenbefehl auszuführen.
In dem Schritt 25 wird einer der ausgewählten Maschinensprachenbefehle
zur Ausführung bezeichnet.
In dem Schritt 26 wird ein Operationscode für den bezeichneten
Maschinensprachenbefehl (ein Einzelbefehl) erzeugt; der Codeerzeugungsvorgang wird
als „Einzelvorgang" bezeichnet werden.
In dem Schritt 27 wird eine Möglichkeit für einen Überlauf
oder ob der erzeugte Operationscode einen arithmetischen Operationsbefehl bezeichnet
beurteilt. Wenn eine Möglichkeit besteht, geht der Programmablauf zu dem Schritt
30 über, im anderen Fall zu dem Schritt 28.
In dem Schritt 28 wird beurteilt, ob einer der in dem Schritt 24 ausgewählten
Maschinensprachenbefehle unverarbeitet geblieben ist. Wenn dies
der Fall ist, kehrt der Programmablauf zu dem Schritt 25 zurück, im anderen
Fall zu dem Schritt 22.
Die Operation der Codeerzeugungseinheit 122 in dem Schritt
26 wird anhand der Fließbilder in den 21 bis
24 ausführlicher beschrieben werden.
In dem Schritt 30 wird beurteilt, ob der Einzelbefehl ein Lade-/Schreib-Befehl
ist. Wenn das der Fall ist, wird die Beurteilung an die Speicher-Verwaltungseinheit
124 benachrichtigt; ansonsten geht der Programmablauf zu dem Schritt 31
über. Bei Benachrichtigung der Entscheidung operiert die Speicher-Verwaltungseinheit
124, wie dies in dem Fließschema in 22
dargestellt wird.
In dem Schritt 40 wird der Typ der durch den Einzelbefehl aus dem
Speicher 130 zu ladenden/speichernden Variablen unter Bezug auf die Symboltabelle
überprüft.
In dem Schritt 41 wird der Variablentyp beurteilt; wenn es sich um
eine Ganzzahldaten-Variable handelt, geht der Programmablauf zu dem Schritt 42 über,
sowie zu dem Schritt 43, wenn es sich um eine Zeigerdaten-Variable handelt.
In dem Schritt 42 wird eine Anweisung zur Erzeugung eines Lade-/Speicherbefehles
für 2-Byte-Daten an die Codeerzeugungseinheit 122 gesendet, und der
Programmablauf geht zu dem Schritt 31 über; der Lade-/Speicherbefehl zeigt
hierbei eine Zugriffdatenbreite von 2 Byte an.
In dem Schritt 43 wird eine Anweisung zur Erzeugung eines Lade/Speicherbefehles
für 3-Byte-Daten an die Codeerzeugungseinheit 122 gesendet, um zu
dem Schritt 31 überzugehen; der Lade-/Speicherbefehl zeigt hierbei eine Zugriffsdatenbreite
von 3 Byte an.
In dem Schritt 31 wird beurteilt, ob der Einzelbefehl ein Register
verwendet. Wenn das der Fall ist, wird die Entscheidung an die Register-Verwaltungseinheit
125 benachrichtigt; im anderen Fall geht der Programmablauf zu dem Schritt
32 über. Bei Benachrichtigung der Entscheidung operiert die Register-Verwaltungseinheit
125, wie dies in dem Fließbild in 23
veranschaulicht wird.
In dem Schritt 50 wird der Typ der von dem Einzelbefehl in dem Register
zu speichernden Variable unter Referenzierung auf die Symboltabelle überprüft.
In dem Schritt 51 wird der Variablentyp beurteilt; in dem Fall einer
Ganzzahldaten-Variablen geht der Programmablauf zu dem Schritt 52 über, und
zu dem Schritt 53 in dem Fall einer Zeigerdaten-Variablen.
In dem Schritt 52 wird eine Anweisung, dass die niederwertigen 16
Bit des zu verwendenden Registers effektiv sind, an die Codeerzeugungseinheit
122 gesendet, um zu dem Schritt 32 überzugehen.
In dem Schritt 53 wird eine Anweisung, dass die niederwertigen 24
Bit des zu verwendenden Registers effektiv sind, an die Codeerzeugungseinheit
122 gesendet, um zu dem Schritt 32 überzugehen.
In dem Schritt 32 wird beurteilt, ob der Einzelbefehl Immediate-Daten
verwendet. Wenn das der Fall ist, wird die Entscheidung an die Immediate-Verwaltungseinheit
126 benachrichtigt; im anderen Fall geht der Programmablauf zu dem Schritt
33 über. Bei Benachrichtigung der Entscheidung operiert die Immediate-Verwaltungseinheit
126, wie dies in dem Fließbild in 24
veranschaulicht wird.
In dem Schritt 60 wird der Typ der mit dem Immediate-Datenelement,
welches der Einzelbefehl verwendet, verwendeten Variable unter Bezug auf die Symboltabelle
überprüft.
In dem Schritt 61 wird der Variablentyp beurteilt; in dem Fall einer
Ganzzahldaten-Variablen geht der Programmablauf zu dem Schritt 62 über, und
zu dem Schritt 63 in dem Fall einer Zeigerdaten-Variablen.
In dem Schritt 62 wird eine Anweisung zur Erzeugung eines Befehles
unter Verwendung von 2-Byte-Immediate-Daten an die Codeerzeugungseinheit
122 gesendet, und der Programmablauf geht zu dem Schritt 33 über.
In dem Schritt 63 wird eine Anweisung zur Erzeugung eines Befehles
unter Verwendung von 3-Byte-Immediate-Daten an die Codeerzeugungseinheit
122 gesendet, und der Programmablauf geht zu dem Schritt
33 über.
In dem Schritt 33 wird ein Operationscode für den Einzelbefehl
entsprechend einer Anweisung von der Speicher-Verwaltungseinheit 124, der
Register-Verwaltungseinheit 125 und der Immediate-Verwaltungseinheit
126 erzeugt.
Als Nächstes wird die Überlaufkompensation, zu der von dem
Schritt 27 übergegangen wird, anhand des Fließbildes in 25
ausführlich dargestellt.
In dem Schritt 70 wird überprüft, ob es eine Anweisung zur
Durchführung von Überlaufkompensation von der Options-Anweisungseinheit
121 gibt. Wenn das der Fall ist, geht der Programmablauf zu dem Schritt
71 über; im anderen Fall geht er zu dem Schritt 72 über.
In dem Schritt 71 wird der Typ der Variablen für den Einzelbefehl
unter Bezug auf die Symboltabelle geprüft.
In dem Schritt 72 wird der Variablentyp beurteilt; in dem Fall der
Zeichendaten-Variablen geht der Programmablauf zu dem Schritt 73 über, beziehungsweise
zu dem Schritt 76 in dem Fall der Ganzzahldaten-Variablen.
In dem Schritt 73 wird beurteilt, ob die Zeichendaten-Variable vorzeichenbehaftet
ist. Wenn sie vorzeichenbehaftet ist, geht der Programmablauf zu dem Schritt 74
über, im anderen Fall zu dem Schritt 75.
In dem Schritt 74 wird die vorzeichenbehaftete Zeichendaten-Variable
vorzeichenvervielfältigt: ein Niedrigstwortlänge-Befehl zur Vorzeichenvervielfachung
der 8 Bit auf 24 Bit wird erzeugt.
In dem Schritt 75 wird die vorzeichenlose Zeichendaten-Variable nullaufgefüllt:
ein Niedrigstwortlänge-Befehl zur Nullauffüllung von 8 Bit auf 24 Bit
wird erzeugt.
In dem Schritt 76 wird beurteilt, ob die Ganzzahldaten-Variable vorzeichenbehaftet
oder vorzeichenlos ist. Wenn sie vorzeichenbehaftet ist, geht der Programmablauf
zu dem Schritt 77 über, im anderen Fall zu dem Schritt 78.
In dem Schritt 77 wird die vorzeichenbehaftete Datenvariable vorzeichenvervielfältigt:
ein Niedrigstwortlänge-Befehl zur Vorzeichenvervielfachung von 16 Bit auf 24
Bit wird erzeugt.
In dem Schritt 78 wird die vorzeichenlose Ganzzahldaten-Variable nullaufgefüllt:
ein Niedrigstwortlänge-Befehl zur Nullauffüllung von 16 Bit auf 24 Bit
wird erzeugt.
Als Nächstes wird die Operation des Computers 3 und
des Compilers 2 in den folgenden fünf Fällen erläutert,
um die Verbesserung im Vergleich zu herkömmlichen Prozessoren in der Spalte
Stand der Technik hervorzuheben.
(1) Parametereinstellung
(2) Überlaufkompensation
(3) Datenübertragung mit dem Speicher 130
(4) Datenübertragung und Operation einschließlich der Immediate-Daten
(5) Bedingte Abzweigung
(1) Parametereinstellung
Es wird in dieser Schrift von der Annahme ausgegangen, dass die Options-Anweisungseinheit
121 keine Überlaufkompensation befiehlt, und ein C-Sprachenprogramm
in der Speichereinheit 1 lautet wie folgt:
Die Syntax-Analysiereinheit 120 nimmt das C-Sprachenprogramm
aus der Speichereinheit 1, um eine Zwischendatei zu erzeugen, indem die Syntax mit
der C-Sprachen-Grammatik verglichen wird. Die Zwischendatei lautet wie folgt, wenn
sie des besseren Verständnisses wegen leichter geschrieben wird:
Zwischenanweisung 1: (int *a, b, c)
Zwischenbefehl 1: t1: =*a
Zwischenbefehl 2: t2: = t1+b
Zwischenbefehl 3: t3: = t2+1
Zwischenbefehl 4: c: = t3
Die Zwischenanweisung 1 entspricht der Deklarationsanweisung int *a,
b, c, während die Zwischenbefehle 1 bis 4 dem Operationsausdruck c = *a + b
+ 1 entsprechen.
Diese Zwischenanweisung und Zwischenbefehle werden wie folgt in Objektcodes
umgewandelt.
Wenn die Zwischendatei eingegeben wird, fragt die Codeerzeugungseinheit
122 die Datenvariablen sowohl mit als auch ohne Deklarationen ab, um ihre
jeweiligen Typen zu prüfen. Erforderlichenfalls weist die Codeerzeugungseinrichtung
122 die Datenvariablen dem Speicher 130 zu, um die Symboltabelle
wie in 20A gezeigt zu erzeugen (Schritt 21 in
19).
Hierbei werden die Variablen *a, b, c explizit erklärt und somit
aus der Zwischenanweisung 1 abgefragt. Die Variable *a, die als Zeigervariable erklärt
wird, wird einem Bereich in dem Speicher 130 zugewiesen; da die Zeigervariable
durch die Parameter-Einstelleinheit 123 auf 24 Bit festgelegt ist, wird
ein 24-Bit-Bereich (3-Byte-Bereich) gesichert. Die Variablen b, c, die als Ganzzahldaten-Variablen
erklärt werden, werden ebenso ihren jeweiligen Bereichen in dem Speicher
130 zugewiesen; da die Ganzzahl-Variable durch die Parameter-Einstelleinheit
123 auf 16 Bit festgelegt ist, werden jeweils 16-Bit-Bereiche (2-Byte-Bereiche)
gesichert. Es wird von der Annahme ausgegangen, dass die Variablen *a, b, c beginnend
mit der Adresse H1000 dem 3-Byte-Bereich zugewiesen werden, dem 2-Byte-Bereich beginnend
mit der Adresse H1004 beziehungsweise dem 2-Byte-Bereich beginnend mit der Adresse
H10006; es ist zu beachten, dass an der Adresse H1003 kein 1-Byte verwendet wird.
Weiterhin werden die Hilfsvariablen t1, t2, t3 aus den Zwischenbefehlen
1 bis 4 ausgewählt, die als Reaktion auf die der Operation unterliegenden Variablen
als Ganzzahldaten-Variablen verwaltet werden.
Dementsprechend werden Informationen für diese Variablen in die
Symboltabelle geschrieben, die in 20A gezeigt wird;
die Registerspalte und die Kopfadressen-Spalte für die Hilfsvariablen sind
leer, da noch keine Daten zugewiesen worden sind; die Symboltabelle wird jedes Mal,
wenn sich die Registerzuweisung ändert, dynamisch aktualisiert.
Danach erzeugt die Codeerzeugungseinheit 122 Maschinensprachenbefehle
für die oben genannten Zwischenbefehle, die im Folgenden getrennt erläutert
werden.
Zwischenbefehl 1
Die Codeerzeugungseinheit 122 beurteilt, ob ein nicht ausgeführter
Zwischenbefehl in der Zwischendatei vorhanden ist (Schritt 22 in 19).
Da die Zwischenbefehle 1 bis 4 hierbei noch nicht ausgeführt worden sind,
geht die Codeerzeugungseinheit 122 zu dem Schritt 23 über.
Danach liest die Codeerzeugungseinheit 122 einen voranstehenden
Zwischenbefehl aus (Schritt), um einen Maschinensprachenbefehl oder mehrere Maschinensprachenbefehle
auszuwählen, um diesen Zwischenbefehl auszuführen (Schritt 24).
Der eine Maschinensprachenbefehl oder die mehreren Maschinensprachenbefehle
wird oder werden wie folgt ausgewählt.
Der Zwischenbefehl 1 lautet:
(1) Finde die Adresse H1000, zu der die Datenvariable *a zugewiesen ist;
(2) Lies 3 Bytes beginnend mit der Adresse H1000 aus;
(3) Lies 2 Bytes beginnend mit der durch die 3-Byte-Auslesung ermittelten Adresse
aus, um dieselben in der Hilfsvariablen t1 zu speichern.
Dementsprechend wählt die Codeerzeugungseinheit 122
die folgenden drei Datenübertragungsbefehle in Maschinensprache aus:
(1) Den Befehl MOV unter Verwendung der Adresse H1000 als die Immediate-Daten
und mit Speichern derselben in dem ersten Adressregister.
(2) Den Befehl MOV unter Verwendung des Inhaltes der Zeigervariablen *a als
Adresse, um die Daten darin an das zweite Adressregister unter Verwendung des ersten
Adressregisters auszulesen.
(3) Den Befehl MOV mit Auslesen der von dem Zeiger bezeichneten Daten an das
Adressregister unter Verwendung des zweiten Adressregisters.
Das erste und das zweite Adressregister werden den Registern A0 beziehungsweise
A1 zugewiesen, die dementsprechend in die Symboltabelle geschrieben werden.
Die Codeerzeugungseinheit 122 bezeichnet einen Befehl (Einzelbefehl
1) von den oben genannten drei Befehlen (Schritt 25), um einen entsprechenden Operationscode
zu erzeugen (Schritt 26).
Der Vorgang dieser Codeerzeugung wird unter Bezugnahme auf die
21 bis 24 erläutert
werden.
Die Codeerzeugungseinheit 122 beurteilt, dass der Einzelbefehl
1 kein Lade-/Speicher-Befehl zum Zugreifen auf den Speicher 130 ist (Schritt
30 in 21), sondern ein Befehl unter Verwendung des
Registers A0; die Entscheidung wird an die Register-Verwaltungseinheit
125 benachrichtigt (Schritt 31).
Die Register-Verwaltungseinheit 125 referenziert die Symboltabelle
(Schritt 50 in 23) und entscheidet, dass die in dem
Register A0 zu speichernde Variable der Zeiger ist (Schritt 51). Somit weist die
Register-Verwaltungseinheit 125 die Codeerzeugungseinheit 122
an, einen Befehl zur Ausführung aller 24 Bit in dem Register zu erzeugen (Schritt
53).
Weiterhin benachrichtigt die Codeerzeugungseinheit 122 die
Immediate-Verwaltungseinheit 126, dass der Einzelbefehl 1 die Immediate-Daten
verwendet (Schritt 32). Somit referenziert die Immediate-Verwaltungseinheit
126 die Symboltabelle (Schritt 60 in 24)
und entscheidet, dass das in dem Register A0 zu speichernde Immediate-Datenelement
der Zeiger ist (Schritt 61). Somit weist die Immediate-Verwaltungseinheit
126 die Codeerzeugungseinheit 122 an, einen Befehl zu erzeugen,
der 3-Byte-Immediate-Daten enthält (Schritt 63).
Gemäß den Schritten 53, 63 erzeugt die Codeerzeugungseinheit
122 den Befehl 1, der dem Einzelbefehl 1 entspricht, wie folgt (Schritt
33):
Befehl 1: MOV #H001000,A0
Danach bestätigt die Codeerzeugungseinheit 122, dass
zwei Maschinensprachenbefehle (die Einzelbefehle 2, 3) noch nicht ausgeführt
worden sind (Schritt 28) und geht somit zu dem Schritt 25 über.
Der Vorgang dieser Operationscodeerzeugung wird unter Bezugnahme auf
die 21 bis 24 erläutert
werden.
Die Codeerzeugungseinheit 122 entscheidet, dass der Einzelbefehl
2 ein Lade-/Speicher-Befehl zum Zugreifen auf den Speicher
130 ist und benachrichtigt die Entscheidung an die Speicher-Verwaltungseinheit
124 (Schritt 30 in 21).
Die Speicher-Verwaltungseinheit 124 referenziert die Symboltabelle
(Schritt 40 in 22) und entscheidet, dass die in dem
zweiten Register A1 zu speichernde Variable der Zeiger ist (Schritt 41). Somit weist
die Speicher-Verwaltungseinheit 124 die Codeerzeugungseinheit
122 an, einen Ladebefehl zu erzeugen, dessen Zugriffsbreite 3 Byte ist
(Schritt 43).
Weiterhin entscheidet die Codeerzeugungseinheit 122, dass
der Einzelbefehl 2 die Register A0, A1 verwendet und benachrichtigt die Entscheidung
an die Register-Verwaltungseinheit 125 (Schritt 31).
Die Register-Verwaltungseinheit 125 referenziert die Symboltabelle
(Schritt 50 in 23) und entscheidet, dass die in dem
zweiten Register A1 zu speichernde Variable der Zeiger ist (Schritt 51). Somit weist
die Register-Verwaltungseinheit 125 die Codeerzeugungseinheit
122 an, eine Befehl zu erzeugen, um alle 24 Bit in dem Register auszuführen
(Schritt 53).
Danach geht die Codeerzeugungseinheit 122 zu dem Schritt
33 über, da der Einzelbefehl die Immediate-Daten nicht verwendet (Schritt 32).
Gemäß den Befehlen aus dem Schritt 43, 53 erzeugt die Codeerzeugungseinheit
122 den Befehl 2 unten entsprechend dem Einzelbefehl 2 (Schritt 33):
Befehl 2: MOV @A0, A1
Die Codeerzeugungseinheit 122 erzeugt den Befehl 3 unten
auf die gleiche Art und Weise wie oben (Schritte 25, 26); dieses Mal wird die Hilfsvariable
t1 dem Register D0 zugeordnet.
Befehl 3: MOV @A1, D0
Jeder Zwischenbefehl wird in der Schleife der Schritte 22 bis 28 verarbeitet,
und jeder Einzelbefehl wird in den Schritten 24, 25, 26 auf die gleiche Art und
Weise wie oben ausgeführt, und die Erläuterung wird an dieser Stelle nicht
wiederholt.
Zwischenbefehl 2
Der Zwischenbefehl 2 lautet:
(4) Lies 2 Bytes beginnend mit der Adresse H1004 aus, der die Variable b zugeordnet
ist.
(5) Addiere die 2 ausgelesenen Bytes zu der Hilfsvariablen t1, um das Ergebnis
in der Hilfsvariablen t2 zu speichern.
Die Codeerzeugungseinheit 122 erzeugt den Befehl 4, um vier
Bytes weg von der Adresse H1000, gespeichert in dem Register A0 für den Einzelbefehl
4, von der Adresse zu laden. Die Speicher-Verwaltungseinheit 124 referenziert
die Symboltabelle (Schritt 40) und entscheidet, dass der Einzelbefehl 4 die Ganzzahldaten-Variable
lädt (Schritt 41). Somit weist die Speicher-Verwaltungseinheit 124
die Codeerzeugungseinheit 122 an, einen Ladebefehl zu erzeugen, dessen
Zugriffsbreite 2 Bytes ist (Schritt 42). Die Register-Verwaltungseinheit
125 referenziert die Symboltabelle (Schritt 50) und speichert die Ganzzahldaten
in dem Register (Schritt 51). Somit weist die Register-Verwaltungseinheit
125 die Codeerzeugungseinheit 122 an, einen Befehl zu erzeugen,
um die niederwertigen 16 Bit in dem Register auszuführen (Schritt 52); die
Variable b wird dieses Mal in dem Register D1 gespeichert.
Befehl 4: MOV @(04,A0), D1
Danach erzeugt die Codeerzeugungseinheit 122 den Befehl 5,
um die in dem Register D1 gespeicherte Variable b zu der Hilfsvariablen t1 hinzuzufügen,
die in dem Register D0 zum Speichern des Ergebnisses in dem Register D1 angezeigt
wird. Dementsprechend referenziert die Register-Verwaltungseinheit 125
die Symboltabelle (Schritt 50) und speichert die Ganzzahldaten-Variable in dem Register
(Schritt 51). Somit weist die Register-Verwaltungseinheit 125 die Codeerzeugungseinheit
122 an, einen Befehl zum Ausführen der niederwertigen 16 Bit in dem
Register zu erzeugen (Schritt 52); die Hilfsvariable t2 wird dieses Mal dem Register
D1 zugewiesen.
Befehl 5: ADD D0, D1
Zwischenbefehl 3
Der Zwischenbefehl 3 lautet:
(6) Addiere einen Wert „1" zu der Hilfsvariablen t2, um das Ergebnis
in der Hilfsvariablen t3 zu speichern.
Entsprechend den Anweisungen von der Register-Verwaltungseinheit
125 und der Immediate-Verwaltungseinheit 126 erzeugt die Codeerzeugungseinheit
122 den Befehl 6 unten, um ein 2-Byte-Immediate-Datenelement #H0001 zu
dem Register D1 hinzuzufügen und um das Ergebnis in dem Register D1 zu speichern;
die Hilfsvariable t3 wird dieses Mal dem Register D1 zugewiesen.
Befehl 6: ADD #H0001, D1
Zwischenbefehl 4
Der Zwischenbefehl 4 lautet:
(7) Schreibe die Hilfsvariable t3 in zwei Bytes beginnend mit der Adresse H1006,
wo die Variable c zugeordnet ist.
Entsprechend der Anweisung von der Speicher-Verwaltungseinheit
124 erzeugt die Codeerzeugungseinrichtung 122 den Befehl 7 zum
Speichern des Inhaltes des Registers D1 sechs Bytes weg von der von dem Inhalt des
Registers A0 spezifizierten Adresse.
Befehl 7: MOV D1,@(06, AO)
Zwischenbefehle werden in der oben genannten Abfolge verarbeitet und
als Ergebnis gibt die Codeerzeugungseinheit 122 die Objektcodes wie folgt
an den Speicher 130 aus. Es wird von der Annahme ausgegangen, dass die
Befehle 1 bis 7 an den Adressen H100000, H100005, H100007, H100008, H10000a, H10000b
beziehungsweise H10000f in dem Speicher 130 angeordnet sind.
Diese Befehle sind der Objektcode, der besseren Übersichtlichkeit
wegen ausgedrückt in mnemonischen Objektcodes (Assemblersprache). Dies sind
Hexadezimalzahlen, jedoch werden sie in dem Speicher 130 faktisch als Binärzahlen
gespeichert.
Der Computer 3 lässt die somit in dem Speicher
130 befindlichen Objektcodes wie folgt laufen.
Befehl 1
Die Bussteuereinheit 136 und die Befehlssteuereinheit
134 geben einen in dem Programmzähler in der Abrufeinheit
139 gehaltenen Wert H100000 an den Adressbus 131 aus und rufen
den Befehl 1 über den Datenbus 132 ab, um denselben zu dekodieren.
Entsprechend dem Dekodierergebnis empfängt die Operations-Ausführungseinheit
135 das von dem Operanden des Befehls 1 bezeichnete Immediate-Datenelement
H0010000 von der Befehls-Steuereinheit 134, um dasselbe in das Register A0 in der
Registereinheit 137 zu speichern.
Befehl 2
Analog dazu rufen die Bussteuereinheit 136 und die Befehls-Steuereinheit
234 den Befehl ab und dekodieren diesen auf die gleiche Art und Weise.
Die Operations-Ausführungseinheit 135 liest den Inhalt des Registers
A0 aus, um den Speicher 130 auszulesen, indem derselbe an den Adressbus
131 ausgegeben wird, wodurch die ausgelesenen 16-Bitdaten über den
Datenbus 132 in den niederwertigen 16 Bit des Registers A1 gespeichert
werden. Danach addiert die Operations-Ausführungseinheit 135 einen
Wert „2" zu dem Wert H001000 des Registers A0, indem die Ausführungseinheit
138 den Speicher 130 ausliest, indem H001002 durch
die Bussteuereinheit 136 an den Adressbus 131 ausgegeben wird.
Die Operations-Ausführungseinheit 135 speichert die über den
Datenbus 132 ausgelesenen 8-Bitdaten in die höherwertigen 8 Bit in
dem Register Al.
Befehl 3
Analog dazu rufen die Bussteuereinheit 136 und die Befehls-Steuereinheit
134 den Befehl 3 ab und dekodieren diesen. Die Operations-Ausführungseinheit
135 liest den Inhalt des Registers A1 aus, um den Speicher 130
auszulesen, indem derselbe an den Adressbus 131 gesendet wird. Danach speichert
die Operations-Ausführungseinheit 135 den über das dritte Erweiterungsmodul
136k, das die niederwertigen 16 Bit auf 24 Bit vorzeichenvervielfältigt,
um diese in dem Register D0 zu speichern, gespeicherten 16-Bit-Wert; das Register
D0 halt somit die von dem Zeiger *a bezeichneten Daten.
Befehl 4
Die Bussteuereinheit 136 und die Befehls-Steuereinheit
135 rufen den Befehl 4 ab und dekodieren denselben. Die Operations-Ausführungseinheit
135 empfängt eine Verschiebung „04" von der Befehls-Steuereinheit
134, um dieselbe zu dem Wert H001000 des Registers A0 zu addieren, der von der Ausführungseinheit
138 ausgelesen wird, und liest den Speicher 130 aus, indem das
Ergebnis durch die Bussteuereinheit 136 an den Adressbus 131 gesendet
wird. Danach speichert die Operations-Ausführungseinheit 135 den über
das dritte Erweiterungsmodul 136k, das die niederwertigen 16 Bit auf 24
Bit vorzeichenvervielfältigt, ausgelesenen 16-Bit-Wert, um denselben in das
Register D1 zu speichern; das Register D1 hält somit die Variable b.
Befehl 5
Die Bussteuereinheit 136 und Befehl rufen den Befehl 5 ab
und dekodieren diesen ((so im englischen Ausgangstext – d. Übers.)).
Die Operations-Ausführungseinheit 135 addiert den Wert des Registers
D1 zu dem von der Registereinheit 137 ausgelesenen Wert des Registers D0,
um das 24-Bit-Ergebnis in das Register D1 zu speichern. Wenngleich die Ausführungseinheit
138 die 24-Bitdaten operiert, sind die niederwertigen 16 Bit in dem Register
D1 effektiv. Das Register D1 hält somit das Additionsergebnis der von der Zeigervariablen
*a und der Variablen b gezeigten Daten.
Befehl 6
Die Bussteuereinheit 136 und die Befehls-Steuereinheit
134 rufen den Befehl 6 ab und dekodieren diesen. Die Operations-Ausführungseinheit
135 addiert den durch die Ausführungseinheit 138 von der
Registereinheit 137 ausgelesenen Wert des Registers D1 zu dem von der Befehls-Verwaltungseinheit
134 empfangenen Immediate-Datenelement H0001, um das Ergebnis in dem Register
D1 zu speichern; der Register D1 hält somit das Additionsergebnis der Daten,
die von der Zeigervariablen *a gezeigt werden, der Variablen b und dem Immediate-Wert
H0001.
Befehl 7
Die Bussteuereinheit 136 und die Befehls-Steuereinheit
134 rufen den Befehl 7 ab und dekodieren diesen. Die Operations-Ausführungseinheit
135 empfängt eine Verschiebung „06" von der Befehls-Steuereinheit
134. Dementsprechend addiert die Ausführungseinheit 138 den
durch die Ausführungseinheit 138 von der Registereinheit
137 ausgelesenen Wert H001000 des Registers A0 zu der empfangenen Verschiebung
„06" und gibt das Additionsergebnis H001006 über die Bussteuereinheit
136 an den Datenbus 132 aus, während die niederwertigen 16
Bit des Registers D1 an den Datenbus 132 ausgegeben werden, wobei die 16
Bit in den Speicher 130 geschrieben werden; das Additionsergebnis der durch
die Zeigervariable *a, Variable b und den Immediate-Wert H0001 angezeigten Daten
wird somit an der Adresse H001006 in den Speicher 130 geschrieben.
Auf diese Weise wird der durch den Compiler 2 von dem C-Sprachenprogramm
übersetzte Objektcode durch den Computer 3 laufen gelassen.
Wie bereits erläutert worden ist, verwaltet der Compiler
2 die Speicherzellen aller Variablen und der Objektcodes in dem Speicher
130 mit 24-Bit-Adressen. Der Computer 3 berechnet diese 24-Bit-Adressen
unter Verwendung der 24-Bit-Registereinheit 137 und der Ausführungseinheit
138, um über den 24-Bit-Adressbus 131 auf den Speicher
130 zuzugreifen. Somit kann das Datenverarbeitungssystem der vorliegenden
Erfindung einen gleichmäßigen 16-Megabyte-Adressenbereich
ohne Segmentunterteilung sichern. Infolgedessen muss ein C-Sprachen-Programmierer
nicht die Unregelmäßigkeit des Bereiches oder die Segmentgrenzen überprüfen.
Darüber hinaus wird die Leistungswirksamkeit durch die Adressenberechnung nicht
wie bei dem Segmentregister verschlechtert. Somit kann das Programm effizienter
ausgelegt werden.
Das Datenverarbeitungssystem der vorliegenden Erfindung ist geeignet
für die Anwendung, die 16-Bitdaten operiert und einen Adressenbereich von 16
Megabyte erfordert. Dies ist darauf zurückzuführen, dass der Computer
3 die 24-Bit-Registereinheit 137 und die Ausführungseinheit
138 umfasst, wodurch das Problem der Kosten für überschüssige
Hardware und laufende Stromkosten beseitigt wird.
Der Computer 3 lässt einen Befehl laufen, der die Immediate-Daten
enthält, die die Adresse zeigen; die Immediate-Daten beinhalten höchstens
24 Bit. Im Gegensatz dazu ist der herkömmliche Maschinensprachenbefehl
16 oder 32 Bit breit und die Wortlänge überschreitet 32 Bit,
da das Immediate-Datenelement der Adresse höchstens 32 Bit ist. Somit kann
die Größe des Objektcodes im Vergleich zu dem herkömmlichen 32-Bit-Prozessor
wesentlich reduziert werden. Weiterhin wird die Codegröße im Vergleich
zu dem 16-Bit-Prozessor, der den 64-Kilobyte-Adressenbereich verwaltet, kaum vergrößert,
da die Codegröße aufgrund des Immediate-Datenelements in dem Befehl lediglich
um ein Byte vergrößert wird.
In dem vorstehenden Ausführungsbeispiel wird ein 16-Bit-Datenbus
132 in dem Computer 3 verwendet; ein 24-Bit-Datenbus kann ebenso
verwendet werden. Wenngleich die Ausführungszeit für Datenschreiben/Datenlesen
in/aus dem Speicher 130 im Vergleich zu dem 24-Bit-Datenbus 132 verlängert
wird, ist diese Latenzzeit im Vergleich zu dem Fall, in dem ein 16-Bit-Datenbus
132 in dem 32-Bit-Prozessor verwendet wird, vernachlässigbar, da sich nur die
Ausführungszeit um eine Auslesezeit für einen Wert für eine in der
Registereinheit 137 von dem Speicher gespeicherte 24-Bit-Adresse verlängert.
In dem vorstehenden Ausführungsbeispiel sind der Adressbus
131 in dem Computer 3, der Programmzähler in der Abrufeinheit
139, die Registereinheit 137 und die Ausführungseinheit
138 jeweils 24 Bit, und die Zeigervariable in der Parameter-Einstelleinheit
123 ist ebenfalls 24 Bit. Sie können jedoch auch in Abhängigkeit
von der Größe des Adressenbereiches 17 Bit bis 31 Bit sein; die Hardware
für die Bit, die die Adressenbitbreite überschreiten, wird umgangen und
Mehrkosten sowie Stromverbrauch können entsprechend eingespart werden.
Der Adressbus 131 in dem Computer 3, der Programmzähler
in der Abrufeinheit 139, die Registereinheit 137, die Ausführungseinheit
138, die Zeigervariable in der Parameter-Einstelleinheit 123 in
dem Compiler 2 sind jeweils 24 Bit, und die Datenvariable in der Parameter-Einstelleinheit
123 in dem Compiler 2 ist in dem vorstehenden Ausführungsbeispiel
16 Bit. Jedoch sind die Bitbreiten dieser Komponenten nicht auf die oben genannten
beschränkt. Gehen wir von der Annahme aus, dass 24 durch eine Adressen-Bitbreite
N ersetzt wird und dass 16 durch eine Daten-Bitbreite M ersetzt wird, wobei N größer
ist als M, dann kann das Datenverarbeitungssystem der hier vorliegenden Erfindung
einen 2N-Byte-Adressenbereich sichern, der größer ist als der
2M-Byte-Adressenbereich.
Die Datenvariable, deren Bitbreite von der Parameter-Einstelleinheit
123 eingestellt wird, ist nicht auf die Ganzzahl-Datenvariable begrenzt;
sie kann eine beliebige Datenvariable für die C-Programmiersprache sein.
In dem vorstehenden Ausführungsbeispiel wird die C-Sprache kompiliert,
um sie laufen zu lassen; es kann jedoch eine beliebige Programmsprache kompiliert
werden, indem der Compiler 2 entsprechend eingestellt wird.
(2) Überlaufkompensation
Die Erläuterung der Überlaufkompensation wird im Folgenden
beschrieben werden. Der besseren Übersichtlichkeit und Verständlichkeit
wegen wird die C-Sprache wie folgt als Beispiel verwendet.
Diese C-Programmsprache wird durch die Codeerzeugungseinheit
122 aus der Speichereinheit 1 ausgelesen, und die Syntax wird
mit der C-Sprachen-Grammatik analysiert. Dementsprechend erzeugt die Codeerzeugungseinheit
122 eine Zwischendatei in einer Zwischensprache (Schritte 20, 21 in
19). Die auf einer Quellenebene geschriebene Zwischendatei
lautet wie folgt:
Zwischenanweisung 1: (char a)
Zwischenanweisung 2: (unsigned char b)
Zwischenanweisung 3: (int c)
Zwischenanweisung 4: (unsigned int d)
Zwischenbefehl 1: (a = a + 1)
Zwischenbefehl 2: (b = b + a)
Zwischenbefehl 3: (c = c + b)
Zwischenbefehl 4: (d = d + c)
Wenn die Zwischendatei eingegeben wird, extrahiert die Codeerzeugungseinheit
122 die Datenvariablen, sowohl mit als auch ohne Erklärungen, in der
Zwischendatei, um ihre jeweiligen Typen zu prüfen. Erforderlichenfalls werden
die Variablen dem Speicher 130 zugewiesen, um die Symboltabelle wie in
20B gezeigt zu erzeugen (Schritt 21).
Die Variablen a, b, c, d, die explizit erklärt werden, werden
aus den Zwischenanweisungen 1 bis 4 extrahiert. Der Typ einer jeden Variable wird
auf der Grundlage der in der Symboltabelle (206) einzutragenden
Erklärung beurteilt und dabei zu dem Speicher 130 zugewiesen. Die
Variablen a, b, c, d werden zu Bereichen bei einem Byte beginnend mit der Adresse
1000 zugewiesen, ein Byte beginnend mit der Adresse 1001, zwei Byte beginnend mit
der Adresse 1002 beziehungsweise zwei Byte beginnend mit der Adresse 1004, wie in
206 gezeigt wird. Die Symboltabelle wird jedes Mal, wenn sich ihr
Inhalt ändert, dynamisch aktualisiert.
Danach erzeugt die Codeerzeugungseinheit 122 Maschinensprachenbefehle
für einen jeden Zwischenbefehl. Dieser Prozess wird für zwei Fälle
erläutert: mit und ohne Überlaufkompensation.
Keine Überlaufkompensation
Die Codeerzeugungseinheit 122 liest einen voranstehenden
Zwischenbefehl unter den unverarbeiteten Zwischenbefehlen aus (Schritt 23) und wählt
einen oder mehrere der Maschinensprachenbefehle aus, um den extrahierten Zwischenbefehl
auszuführen (Schritt 24).
Der eine Zwischenbefehl oder die mehreren Zwischenbefehle wird oder
werden wie folgt ausgewählt.
Der Zwischenbefehl 1 (a = a + 1) lautet wie folgt:
1) Lies ein Byte beginnend mit der Adresse 1000 aus, zu der die vorzeichenbehaftete
Zeichenvariable a zugewiesen ist.
2) Addiere einen Wert „1" zu den Auslesedaten.
3) Speichere das Additionsergebnis in die Adresse 1000.
Die Codeerzeugungseinheit 122 erzeugt die Maschinensprachenbefehle
entsprechend den oben genannten drei Befehlen. Die Maschinensprachenbefehle sind:
1) Der Befehl MOVB zum Auslesen eines Bytes beginnend mit der Adresse 1000,
um dasselbe in dem Datenregister (hierbei D0) zu speichern.
2) Der Befehl ADD zum Addieren eines Wertes „1" zu dem Registerinhalt.
3) Der Befehl MOVB zum Wiederherstellen des Additionsergebnisses in der Adresse
1000.
Weiterhin erzeugt die Codeerzeugungseinheit 122 die Einzelbefehle
1, 2, 3, indem die die Schleifen der Schritte 24 bis 28 drei Mal wiederholt.
Die Befehle 1 bis 12 sind der Objektcode, der zur Vereinfachung in
den mnemonischen Objektcodes (Assemblersprache) geschrieben sind. Diese sind Hexadezimalzahlen,
jedoch werden sie faktisch als Binärzahlen in dem Speicher 130 gespeichert.
Gehen wir von der Annahme aus, dass die Befehle 1 bis 12 31 Bytes zugewiesen werden,
von der Adresse 100000 bis zu der Adresse 10001e. Hierbei wird kein Überlaufkompensations-Befehl
erzeugt.
Der in dem Speicher 130 gespeicherte Objektcode wird von
dem Computer 3 wie folgt laufen gelassen.
Befehl 1
Die Ausführungseinheit 138 liest die Variable 1 oder
einen 8-Bit-Wert über die Bussteuereinheit 136 aus der Adresse 001000
in dem Speicher 130 aus, um dieselbe einer Vorzeichenvervielfachung auf
24 Bit zu unterziehen, welche in dem Register D0 in der Registereinheit
137 zu speichern sind.
Befehl 2
Die Ausführungseinheit 138 addiert einen Wert „1"
zu dem Inhalt des Registers D0 durch die ALU (arithmetisch-logische Einheit)
141, um das Additionsergebnis in dem Register D0 wiederherzustellen. Die
Ausführungseinheit 138 führt 24-Bit-Datenoperation durch.
Befehl 3
Die Ausführungseinheit 138 schreibt die niederwertigen
8 Bit des Registers D0 in die Adresse 001000 in dem Speicher 130.
Befehl 4
Die Ausführungseinheit 138 liest die Variable b oder
einen 8-Bit-Wert über die Bussteuereinheit 136 aus der Adresse 001001
in dem Speicher 130 aus, um dieselbe einer Nullauffüllung auf 24 Bit
zu unterziehen, um dieselbe in dem Register D1 in der Registereinheit
137 zu speichern.
Befehl 5
Die Ausführungseinheit 138 addiert den Inhalt des Registers
D1 durch die ALU (arithmetisch-logische Einheit) 141 zu dem Inhalt des
Registers D0 und stellt das Additionsergebnis in dem Register D1 wieder her. Das
Register D0 hält den Wert der Variablen a, der durch den Befehl 2
vor der Addition aktualisiert worden ist, und die Ausführungseinheit
138 führt die 24-Bit-Datenoperation aus.
Befehl 6
Die Ausführungseinheit 138 schreibt die niederwertigen
8 Bit des Registers D1 in die Adresse 001001 in dem Speicher 130.
Befehl 7
Die Ausführungseinheit 138 liest einen 16-Bit-Wert oder
die Variable c über die Bussteuereinheit 136 aus der Adresse 001002
in dem Speicher 130 aus, um denselben oder dieselbe einer Vorzeichenvervielfachung
auf 24 Bit zu unterziehen, die in dem Register D0 zu speichern sind.
Befehl 8
Die Ausführungseinheit 138 addiert den Inhalt des Registers
D0 durch die ALU (arithmetisch-logische Einheit) 141 zu dem Inhalt des
Registers D1, um das Ergebnis in dem Register D0 wiederherzustellen. Es ist zu beachten,
dass das Register D1 den Wert der Variablen b hält, der durch den Befehl 5
vor der Addition aktualisiert worden ist, und die Ausführungseinheit
138 führt eine 24-Bit-Datenoperation durch.
Befehl 9
Die Ausführungseinheit 138 schreibt die niederwertigen
16 Bit des Registers D0 in die Adresse 001002 in dem Speicher 130.
Befehl 10
Die Ausführungseinheit 138 liest einen 16-Bit-Wert oder
die Variable d über die Bussteuereinheit 136 aus der Adresse 001004
in dem Speicher 130 aus, um denselben oder dieselbe einer Nullauffüllung
auf 24 Bit zu unterziehen, die in dem Register D1 zu speichern sind.
Befehl 11
Die Ausführungseinheit 138 addiert den Inhalt des Registers
D1 durch die ALU (arithmetisch-logische Einheit) 141 zu dem Register des
Registers D0 ((so im englischen Ausgangstext – d. Übers.)), um das Ergebnis
in dem Register D1 wiederherzustellen. Es ist zu beachten, dass das Register D0
den Wert der Variablen c hält, der durch den Befehl 8 vor der Addition aktualisiert
worden ist, und die Ausführungseinheit 138 führt eine 24-Bit-Daten-Operation
aus.
Befehl 12
Die Ausführungseinheit 138 schreibt die niederwertigen
16 Bit des Registers D1 an der Adresse 001004 in dem Speicher 130.
Auf diese Weise wird das C-Sprachenprograrnm durch den Compiler
2 kompiliert, und der daraus entstehende Objektcode wird durch den Computer
3 laufen gelassen. Da in diesem Fall kein Überlauf kompensiert wird,
wird die Codegröße nicht erhöht und wird die Operationsgeschwindigkeit
nicht reduziert.
Überlaufkompensation
Die Operation ist im Wesentlichen die gleiche wie in dem obenstehenden
Fall, außer dass die Codeerzeugungseinheit 122 in dem Schritt 70 in
25 einen Überlauf kompensiert. Da der Überlauf
nur kompensiert wird, wenn ein arithmetischer Operationsbefehl in dem Schritt 27
in 19 erzeugt wird, unterscheidet sich die Operation
in dem Schritt 70 nach den folgenden vier Befehlen, die im Folgenden näher
beschrieben werden:
Befehl 2: ADD #1, D0
Befehl 5: ADD D0, D1
Befehl 8: ADD D1, D0
Befehl 11: ADD D0, D1
Überlaufkompensation für den Befehl 2
Nachdem der Befehl 2 erzeugt worden ist (Schritt 26), referenziert
die Codeerzeugungseinheit 122 die Symboltabelle; da der Befehl 2 eine arithmetische
Operationsanweisung (Schritt 27 in 19) ist und ein
optionaler Befehl für die Überlaufkompensation eingegeben worden ist (Schritt
70 in 25). An diesem Punkt zeigt die in
20B gezeigte Symboltabelle, dass das Register D0 der
Variablen a in der Registerspalte zugewiesen ist und dass das der Operation unterliegende
Register D0 die vorzeichenbehaftete Zeichenvariable aufweist (Schritt 71). Dementsprechend
beurteilt die Codeerzeugungseinheit 122, dass die Variable a die Zeichenvariable
ist (Schritt 72) und dass die Variable a die vorzeichenbehaftete Variable ist (Schritt
73). Somit erzeugt die Codeerzeugungseinheit 122 den Befehl 2'
der Niedrigstwortlänge zur Vorzeichenvervielfachung der 8-Bit-Daten in dem
Register D0 auf 24 Bit (Schritt 74)
Befehl 2': EXTXB D0
Überlaufkompensation für Befehl 5
Nach der Erzeugung des Befehles 5 (Schritt 26) referenziert die Codeerzeugungseinheit
122 die Symboltabelle; da der Befehl 5 ein arithmetischer Operationsbefehl
(Schritt 27 in 19) ist und ein optionaler Befehl zur
Kompensation von Überlauf eingegeben worden ist (Schritt 70 in 25).
An diesem Punkt zeigt die in 20 gezeigte Symboltabelle, dass das
Register D1 in der Registerspalte der Variablen b zugewiesen ist und dass das der
Operation unterliegende Register D1 die vorzeichenlose Zeichenvariable b ist (Schritt
71). Dementsprechend entscheidet, dass die Codeerzeugungseinheit 122, dass
die Variable b eine Zeichenvariable ist (Schritt 72) und dass sie eine vorzeichenlose
Variable ist (Schritt 73). Somit erzeugt die Codeerzeugungseinheit 122
den Befehl 5' der Niedrigstwortlänge, um die 8-Bitdaten in dem Register D1
einer Vorzeichenvervielfachung auf 24 Bit zu unterziehen (Schritt 75).
Befehl 5': EXTXBU D1
Überlaufkompensation für Befehl 8
Nach der Erzeugung des Befehles 8 (Schritt 26) referenziert
die Codeerzeugungseinheit 122 die Symboltabelle; da der Befehl 8 eine arithmetische
Operationsanweisung ist (Schritt 27 in 19) und ein
optionaler Befehl zur Kompensation von Überlauf eingegeben worden ist (Schritt
70 in 25). An diesem Punkt zeigt die
in 20 gezeigte Symboltabelle, dass das Register D0 in der Registerspalte
der Variablen c zugewiesen ist und dass das der Operation unterliegende Register
D0 die vorzeichenbehaftete Ganzzahl-Variable c ist (Schritt 71). Dementsprechend
entscheidet die Codeerzeugungseinheit 122, dass die Variable c eine Ganzzahl-Variable
ist (Schritt 72) und dass sie eine vorzeichenbehaftete Variable ist (Schritt 76).
Somit erzeugt die Codeerzeugungseinheit 122 den Befehl 8' der Niedrigstwortlänge,
um die 16-Bit-Daten in dem Register D0 einer Vorzeichenvervielfachung auf 24 Bit
zu unterziehen (Schritt 77).
Befehl 8: EXTX D0
Überlaufkompensation für Befehl 11
Nach der Erzeugung des Befehles 11 (Schritt 26) referenziert die Codeerzeugungseinheit
122 die Symboltabelle; da der Befehl 11 ein arithmetischer Operationsbefehl
ist (Schritt 27 in 19) und ein optionaler Befehl für
die Überlaufkompensation eingegeben worden ist (Schritt 70 in
25). An diesem Punkt zeigt die in 20
gezeigte Symboltabelle, dass das Register D1 in der Registerspalte der Variablen
d zugewiesen ist und dass das der Operation unterliegende Register D1 die vorzeichenlose
Ganzzahl-Variable d ist (Schritt 71). Dementsprechend entscheidet die Codeerzeugungseinheit
122, dass die Variable d eine Ganzzahl-Variable ist (Schritt 72) und dass
sie eine vorzeichenlose Variable ist (Schritt 76). Somit erzeugt die Codeerzeugungseinheit
122 den Befehl 11' der Niedrigstwortlänge, um die 16-Bit-Daten in
dem Register D1 einer Vorzeichenvervielfachung auf 24 Bit zu unterziehen (Schritt
78).
Befehl 11': EXTXU D1
Auf diese Weise erzeugt die Codeerzeugungseinheit 122 wie
folgt einen Objektcode:
Gehen wir von der Annahme aus, dass die Befehle 1 bis 12 35 Bytes
zugewiesen sind, von der Adresse 100000 bis zu der Adresse 100022 in dem Speicher
130. Die Befehle 2', 5', 8' und 11' sind die Kompensationsbefehle für
die vorzeichenbehaftete Zeichenvariable a, die vorzeichenlose Zeichenvariable b,
die vorzeichenbehaftete Ganzzahl-Variable c beziehungsweise die vorzeichenlose Ganzzahl-Variable
d; sie kompensieren Überlauf, der durch die Befehle 2, 5, 8 beziehungsweise
11 (Additionsbefehl) verursacht werden.
Der somit in dem Speicher 130 gespeicherte Objektcode wird
von dem Computer 3 im Wesentlichen auf die gleiche Weise laufen gelassen wie in
dem Fall der Überlaufkompensation, und nachstehend wird lediglich der Unterschied
erläutert werden.
Befehl 2'
Die Ausführungseinheit 138 führt Vorzeichenvervielfachung
an den niederwertigen 8 Bit in dem Register D0 durch das erste Erweiterungsmodul
144 durch, um das Ergebnis in dem Register D0 wiederherzustellen.
Befehl 5'
Die Ausführungseinheit 138 führt Nullauffüllung
an den niederwertigen 16 Bit in dem Register D0 durch das zweite
Erweiterungsmodul 145 durch, um das Ergebnis in dem Register D0 wiederherzustellen.
Befehl 8'
Die Ausführungseinheit 138 führt Vorzeichenvervielfachung
an den niederwertigen 16 Bit in dem Register D0 durch das zweite Erweiterungsmodul
145, um das Ergebnis in dem Register wiederherzustellen.
Befehl 11'
Die Ausführungseinheit 138 führt Nullauffüllung
an den niederwertigen 16 Bit in dem Register D1 durch das zweite Erweiterungsmodul
145 durch, um das Ergebnis in dem Register D1 wiederherzustellen.
Somit werden gegebenenfalls durch die Befehle 2, 5, 8 und 11 verursachte
Überläufe durch die oben genannte Operation unter den Befehlen 2', 5',
8' beziehungsweise 11' kompensiert.
Auf diese Weise wird das C-Sprachenprogramm durch den Compiler
2 kompiliert, und der daraus entstehende Objektcode wird von dem Computer
3 laufen gelassen. In diesem Fall werden die Befehle 8', 11' für die
Überlaufkompensation für die Ganzzahl-Variablen erzeugt. Jeder Befehl,
der die Befehle 2' beziehungsweise 5' für die Überlaufkompensation enthält,
ist jedoch von der Länge eines 1-Byte-Wortes, wodurch die Erhöhung der
Codegröße und die Verringerung der Operationsgeschwindigkeit minimiert
werden.
Wie bereits ausgeführt worden ist, muss der Benutzer, wenn er
ein Programm kompiliert, das keinen Überlauf hat, oder wenn er den Überlauf
umgeht, indem er einen Wertebereich für eine jede Variable überprüft,
lediglich einen optionalen Befehl für keine Überlaufkompensation in den
Compiler 2 eingeben, um zu verhindern, dass die Objektcodegröße
erhöht wird oder die Operationsgeschwindigkeit unabhängig von dem Variablentyp
verlangsamt wird.
Wenn der Benutzer den Überlauf nicht verhindern kann, da die
Bitbreite der Registereinheit 137 (24 Bit) größer ist als die
Ganzzahl-Bitbreite (16 Bit), oder wenn er den Überlauf nicht berücksichtigt,
das heißt, wenn er einen optionalen Befehl für Überlaufkompensation
in den Compiler 2 eingibt, erhöht sich die Objektcodegröße
weniger und verringert sich die Operationsgeschwindigkeit weniger im Vergleich zu
den herkömmlichen Compilern.
Die ALU (arithmetisch-logische Einheit) 141 kann ebenfalls
als das erste Erweiterungsmodul 144 und das zweite Erweiterungsmodul
145 dienen, anstelle der separaten Installation dieser beiden Komponenten.
Der Adressbus 131, die Registereinheit 137, die
ALU (arithmetisch-logische Einheit) 141, das erste und das zweite Erweiterungsmodul
144, 145 in dem Computer 3 sowie die in der Codeerzeugungseinheit
122 in dem Compiler 2 verwendete Zeigervariable sind in dem vorstehenden
Ausführungsbeispiel jeweils 24 Bit breit. Jedoch können sie in Abhängigkeit
von der Größe des Adressenbereiches ebenso 17 Bit oder 31 Bit breit sein;
die Hardware, die die Bitbreite der Adresse übersteigt, wird ebenfalls verwendet
werden, wodurch Kosten und Stromverbrauch eingespart werden.
Die Ausgänge von dem Adressbus 131, der Registereinheit
137, der ALU (arithmetisch-logischen Einheit) 141, dem ersten
und dem zweiten Erweiterungsmodul 144, 145 in dem Computer
3 sowie die in der Codeerzeugungseinheit 122 in dem Compiler
2 verwendete Zeigervariable sind nicht auf eine Breite von 24 Bit begrenzt;
ebenso ist die in der Codeerzeugungseinheit 122 in dem Compiler
2 verwendete Ganzzahl-Variable nicht auf eine Breite von 16 Bit begrenzt.
Gehen wir von der Annahme aus, dass 24 durch M ersetzt wird und dass
16 durch N ersetzt wird, wobei N größer ist als M, dann kann das Datenverarbeitungssystem
der hier vorliegenden Erfindung einen Adressenbereich von 2N-Byte sichern,
was einen Adressenbereich von 2M-Byte übersteigt.
Die Datenvariable, deren Bitbreite durch die Parameter-Einstelleinheit
123 eingestellt wird, ist nicht auf die Ganzzahl-Variable begrenzt; sie
kann eine beliebige für das C-Sprachenprogramm verfügbare Datenvariable
sein.
(3) Datenübertragung zu dem Speicher 130
Die Datenübertragungsoperation durch das wie oben beschrieben
ausgelegte Datenverarbeitungssystem wird unter Bezugnahme auf
den in den 18A, 186 gezeigten Übertragungsbefehl
erläutert werden.
Der in 18A gezeigte Übertragungsbefehl
befiehlt die Übertragung der 16-Bitdaten in dem Register D1 zu dem Speicher
130 an einer von dem Adressregister A2 bezeichneten Adresse.
1) Die Dekodiereinheit 140 dekodiert den Befehl in 18A
wie folgt:
Das Operationsfeld (OP) bedeutet einen Übertragungsbefehl MOVE zu dem Speicher
130 von dem Datenregister; das Quellenfeld (SRC) zeigt an, dass das Register
D1 das Senderegister ist, und das Zielfeld DEST zeigt an, dass der Empfangsspeicher
durch das Register A2 bezeichnet wird. Infolge der Dekodierung gibt die Dekodiereinheit
140 ein Aktivierungssignal an die Bussteuereinheit 136 aus, indem
der Quellentyp ST auf „0" geändert wird, die Quellenregisternummer ST
auf „001", der Zieltyp auf „1" und die Zielregisternummer auf „010".
Gleichzeitig gibt der Selektor 140b die Registerinformationen
171 aus, indem er dieselben auf „0" ändert.
(2) In der Registereinheit 137 werden die 16-Bitdaten aus dem mit ST
= „0" und SN = „001" bezeichneten Datenregister D1 ausgelesen, um
über das Ausgangspuffer-Gate 137f ausgegeben zu werden. Die Ausgabedaten
werden an der Bussteuereinheit 136 in dem Speicherpuffer 136c
gehalten. Danach sind die durch DT = „1" und DN = „010" bezeichneten
24-Bitdaten aus dem Adressregister A2 an den Ausgabepuffer 137c auszugeben.
Die Ausgabedaten werden über den Selektor 136f an den Adresspuffer
136e gesendet.
(3) Die Externzugriffsbreiten-Steuereinheit 136j empfängt die
Registerinformationen 171 und entscheidet, dass das zu übertragende
Register eines der Datenregister auf Basis ST = „0" ist. Dementsprechend
gibt die Externzugriffsbreiten-Steuereinheit 136j die Bitbreiteninformationen
172 aus, indem sie diese auf „0" setzt, was 16-Bit-Datenübertragung
zu der Ablaufsteuerung 136i spezifiziert.
(4) Die Ablaufsteuerung 136i empfängt das Aktivierungssignal und
da die Bitbreiteninformation „0" ausweist, überträgt sie danach
die 16-Bitdaten wie folgt zu dem Speicher 130.
Die Ablaufsteuerung 136i weist die Ausgabe einer in dem Adresspuffer
136e gehaltenen Adresse über das Puffergate 136h an den Adressbus
131 an, während sie selektiv das erste Byte (Bit 7-0) der in dem Speicherpuffer
136c gehaltenen Daten über den Selektor 136d an das niederwertige
Byte (Bit 7-0) des Datenbusses 132 ausgibt, sowie das zweite Byte (Bit
15-8) an das höherwertige Byte (Bit 15-8) des Datenbusses 132 an den
Speicher 130. Gleichzeitig gibt die Ablaufsteuerung 136i ein Steuersignal
zum Schreiben der 16-Bitdaten aus dem Speicherpuffer 136c in denselben
an den Speicher 130 aus.
Auf diese Weise wird der in 18A gezeigte
Übertragungsbefehl ausgeführt.
Ein in 186 gezeigter Übertragungsbefehl befiehlt
die Übertragung der 24-Bitdaten in dem Adressregister A1 zu dem Speicher
130 an der durch das Adressregister A2 bezeichneten Adresse.
(1) Die Dekodiereinheit 140 dekodiert den in 186 gezeigten
Befehl wie folgt:
Das Operationsfeld (OP) bedeutet einen Übertragungsbefehl MOVE aus dem Datenregister
zu dem Speicher 130. SCR zeigt an, dass das Register A1 das Senderegister
ist, und DEST zeigt an, dass der Empfangsspeicher von dem Register A2 bezeichnet
wird. Infolge der Dekodierung gibt die Dekodiereinheit 140 ein Aktivierungssignal
an die Bussteuereinheit 136 aus, indem der Quellentyp ST zu „1"
geändert wird, die Quellenregisternummer SN zu „001", der Zieltyp zu
„1" und die Zielregisternummer zu „010" geändert werden. Gleichzeitig
gibt der Selektor 140b die Registerinformationen 171 aus. Indem
er diese zu „1" ändert.
(2) In der Registereinheit 137 werden die 24-Bitdaten aus dem durch
ST = „1" und SN = „001" bezeichneten Adressregister A1 ausgelesen,
um über das Ausgabepuffer-Gate 137c ausgegeben zu werden. Die Ausgabedaten
werden an der Bussteuereinheit 136 in dem Speicherpuffer 136c
gehalten. Danach sind die 24-Bitdaten aus dem durch DT = „1" und DN = „010"
bezeichneten Adressregister A2 an den Ausgabepuffer 137c auszugeben. Die
Ausgabedaten werden über den Selektor 136f an den Adresspuffer
136e gesendet.
(3) Die Externzugriffsbreiten-Steuereinheit 136j empfängt die
Registerinformationen 171 und entscheidet, dass das zu übertragende
Registerthema eines der Adressregister aus Basis von ST = „1" ist. Dementsprechend
gibt die Externzugriffsbreiten-Steuereinheit 136j die Bitbreiteninformation
172 aus, indem sie diese auf „1" setzt, was 24 Bit zu der Ablaufsteuerung
136i spezifiziert.
(4) Die Ablaufsteuerung 136i empfängt das Aktivierungssignal und
da die Bitbreiteninformation „1" anzeigt, überträgt sie die 24-Bitdaten
durch 16 Bit und 8 Bit wie folgt an den Speicher 130.
Die Ablaufsteuerung 136i weist die Ausgabe einer in dem Adresspuffer
136e gehaltenen Adresse über das Puffergate 136h an den Adressbus
131 an, während sie selektiv das erste Byte (Bit 7-0) der in dem Speicherpuffer
136c gehaltenen Daten an das niederwertige Byte (Bit 7-0) des Datenbusses
132 über den Selektor 136d an den Speicher 130 ausgibt
sowie das zweite Byte (Bit 15-8) an das höherwertige Byte (Bit 15-8) des Datenbusses
132 an den Speicher 130. Gleichzeitig gibt die Ablaufsteuerung
136i ein Steuersignal zum Schreiben der 16-Bitdaten (Bit 15-0) aus dem
Speicherpuffer 136c in denselben an den Speicher 130 aus.
Nachdem die 16-Bitdaten in den Speicher 130 geschrieben worden
sind, wählt die Ablaufsteuerung 136i den Ausgang von dem Inkrementierer
136, der in dem Adressspeicher 136e zu halten ist, mittels des
Selektors 136f aus. Dementsprechend hält der Adresspuffer
136e eine um zwei inkrementierte Adresse.
Danach weist die Ablaufsteuerung 136i die Ausgabe einer in
dem Adresspuffer 136e gehaltenen Adresse über das Ausgabepuffer-Gate
136h an, während sie selektiv das dritte Byte (das höchstwertige
Byte; Bit 23-16) der in dem Speicherpuffer 136c gehaltenen Daten an die
niederwertigen 8 Bit (Bit 7-0) in dem Datenbus 132 über den Selektor
136d an den Speicher 130 ausgibt. Wenngleich das höherwertige
Byte (Bit 15-8) in dem Datenbus 132 unwirksam ist, wird es keine Probleme
geben, da die Daten pro Byte geschrieben werden. Die Ablaufsteuerung 136i
gibt danach ein Steuersignal zum Schreiben des dritten Bytes aus dem Selektor
136d in den Speicher 130 an den Speicher 130 aus.
Auf diese Weise wird der in 186 gezeigte Übertragungsbefehl
ausgeführt.
Wie bereits ausgeführt worden ist, überträgt das Adressregister
24-Bitdaten, wohingegen das Datenregister die 16-Bitdaten überträgt. Dadurch
begegnet der Befehl dem Größenfeld, indem die Befehlslänge verkürzt
wird. Somit kann die Codegröße reduziert werden, und die Dekodierfunktion
für das Größenfeld kann eliminiert werden.
Das Adressregister und das Datenregister sind nicht auf 24 Bit begrenzt;
die Externzugriffsbreite kann die Bitbreiten des Adressregisters und des Datenregisters
anders als mit 24 Bit beziehungsweise 16 Bit festlegen; sie können von einer
beliebigen Breite sein. Ebenso kann das Ziel durch andere Verfahren als indirekte
Adressregister-Verfahren (@A2) bezeichnet werden. Weiterhin können die Daten
zwischen dem Register und dem Speicher 130 in beiden Richtungen übertragen
werden; in dem Fall der 8- oder 16-Bitdatenübertragung von dem Speicher
130 zu einem der Register ist zu beachten, dass die 16-Bitdaten durch das
dritte Erweiterungsmodul 136k auf 24-Bitdaten erweitert werden.
Das ST zeigt den Registertyp an und die Bitbreiten-Informationen
172 sind 1-Bit-Signale; sie können jedoch auch 2-Bit-Signale oder
Mehr-Bit-Signale sein.
Die Bussteuereinheit 136 überträgt die 24-Bitdaten
in der Reihenfolge der niederwertigen 2 Bytes und des höchstwertigen 1 Byte.
Jedoch können die 24-Bitdaten in umgekehrter Reihenfolge übertragen werden.
In diesem Fall steuert die Ablaufsteuerung 136i den Selektor
136d, um Daten in der Reihenfolge höherwertig zu niederwertig auszuwählen,
und den Inkrementierer 136g, um um zwei zu dekrementieren.
Weiterhin kann ein 8-Bitdaten-Bus anstelle des 16-Bitdatenbusses
132 verwendet werden. In diesem Fall wird zwei Mal auf den Speicher
130 zugegriffen, und in dem Fall der 16- beziehungsweise der 24-Bitdatenübertragung
drei Mal.
(4) Datenübertragung und Operation einschließlich Immediate-Datenelement
Befehle, die Immediate-Datenelemente einschließen, sind zum Beispiel
„MOVI #H0010, D0" oder „ADDI #H0010, D0".
Die Abrufeinheit 139 aktiviert die Bussteuereinheit
136, um die in dem Speicher 130 gespeicherten Programmbefehle
sequentiell auszulesen. Die Auslesebefehle werden über die Abrufeinheit
139 an die Dekodiereinheit 140 ausgegeben.
Die Dekodiereinheit 140, die ein Mikroprogramm und eine festverdrahtete
Logik umfasst, verarbeitet die Immediate-Datenelemente wie in dem Fließschema
in 26 veranschaulicht. Insbesondere dekodiert die
Dekodiereinheit 140 den Auslesebefehl (Schritt 81). Infolgedessen werden
der Operationscode, der eine arithmetische Operation, eine logische Operation, eine
Register-zu-Register-Übertragung, eine Register-zu-Speicher-Übertragung
oder einen Abzweigungsbefehl bezeichnet, sowie die Daten, die Immediate-Datenelemente,
die Registernummer sowie ein Operand für die Speicheradresse dekodiert. Entsprechend
dem Dekodierergebnis entscheidet die Dekodiereinheit 140, ob der Befehl
weniger als 24-Bit-Immediate-Datenelemente bezeichnet (Schritt 82). Wenn das der
Fall ist, geht das Programm zu dem Schritt 83 über, im anderen Fall zu dem
Schritt 84.
Wenn weniger als 24-Bit-Immediate-Daten detektiert werden, wird geprüft,
ob das Zugriffsregister (das Zielregister) für den Befehl eines der Register
in der Datenregistergruppe 137d oder in der Adressregistergruppe
137a ist (Schritt 83).
Weiterhin gibt die Dekodiereinheit 140 die Steuersignale
an die ALU (arithmetisch-logische Einheit) 141, an das erste Erweiterungsmodul
144 und an das zweite Erweiterungsmodul 145 in Abhängigkeit
von dem Typ des Zielregisters aus (Schritt 84).
Der Prozessor operiert für einen jeden Befehl wie folgt:
(1) Übertrage die Daten zwischen den Registern in der Datenregistergruppe
137d und der Adressregistergruppe 137a oder operiere einen Befehl
unter Verwendung der in den genannten Registern gespeicherten Daten. (Zum Beispiel
„MOVE D0, D1" oder „ADD A0, A1 ").
In dem erstgenannten Fall werden die aus dem Quellenregister ausgelesenen
24-Bitdaten in dem bezeichneten Register gespeichert.
In dem letztgenannten Fall werden die aus den beiden bezeichneten
Registern ausgelesenen 24-Bitdaten in die ALU (arithmetisch-logische Einheit)
141 eingegeben und nach der bezeichneten Operation in dem bezeichneten
Register gespeichert.
(2) Speichere 16-Bit-Immediate-Daten in der Datenregistergruppe 137d
oder operiere 16-Bit-Immediate-Daten mit der Datenregistergruppe 137d (zum
Beispiel „MOVI #H0010, D0" oder „ADDI #H0010, D0").
In dem erstgenannten Fall dekodiert die Dekodiereinheit
140, dass der Befehl die 16-Bit-Immediate-Daten bezeichnet und dass das
Zielregister eines der Register in der Datenregistergruppe 137d ist. Somit
wird an den 16-Bit-Immediate-Daten Vorzeichenvervielfachung auf 24 Bit durch das
zweite Erweiterungsmodul 145 durchgeführt, welche in dem bezeichneten
Datenregister zu speichern sind.
Analog dazu werden in dem letztgenannten Fall die 16-Bit-Immediate-Daten
durch das zweite Erweiterungsmodul 145 einer Vorzeichenvervielfachung auf
24 Bit unterzogen, um in eines der Eingabe-Terminals der ALU (arithmetisch-logische
Einheit) eingegeben zu werden, um in dem bezeichneten Datenregister berechnet und
gespeichert zu werden.
(3) Speichere die 16-Bit-Immediate-Datem in der Adressregistergruppe
137a oder operiere die 16-Bit-Immediate-Daten mit der Adressregistergruppe
137a (zum Beispiel „MOVI #H0010, A0", „ADDI #H0010, A0").
In dem erstgenannten Fall dekodiert die Dekodiereinheit
140, dass der Befehl die 16-Bit-Immediate-Daten bezeichnet und dass das
Bezeichnungsregister eines der Register in der Adressregistergruppe 137a
ist. Somit werden die 16-Bit-Immediate-Daten Nullauffüllung auf 24 Bit durch
das zweite Erweiterungsmodul 145 unterzogen, um an das bezeichnete Adressregister
ausgegeben zu werden.
Analog dazu werden in dem letztgenannten Fall die 16-Bit-Immediate-Daten
einer Nullauffüllung auf 24 Bit unterzogen, um in eines der Eingabe-Terminals
der ALU (arithmetisch-logische Einheit) 141 eingegeben zu werden, um nach
der bezeichneten Operation weiter an die bezeichnete Adressregistergruppe
137a ausgegeben zu werden.
Nunmehr wird die Operation unter Beteiligung der 16-Bit-Immediate-Daten
erläutert werden. Das gleiche Programm, das nach dem Stand der Technik verwendet
wird, wird dabei verwendet werden.
Ein den in den 5, 8
gezeigten Programmen entsprechendes Programm wird in 27
gezeigt; jedoch ist hierbei die Adresslänge 24 Bit. Das Programm soll sechzehn
Datenelemente addieren, die aus den Adressen H8000 bis H8100 (H bedeutet hexadezimal
und eine jede Adresse ist H10 Adressen entfernt) gespeichert werden, und das Additionsergebnis
an der Adresse H100000 speichern.
Befehl 1: Lösche ein Datenregister D0.
Befehl 2: Setze das 16-Bit-Immediate-Datenelement H8000 auf ein Adressregister
A0.
Die Dekodiereinheit 140 dekodiert diesen Befehl durch Referenzieren
der 26 (Schritt 81) und entscheidet, dass die Befehle
16-Bit-Immediate-Datenelemente H8000 verwenden (Schritt 82). Weiterhin entscheidet
sie, dass der Befehl der Befehl zum Übertragen des Immediate-Datenelementes
in eines der Register in der Adressregistergruppe 137a ist (Schritt 83).
Somit gibt die Dekodiereinheit 140 das Steuersignal an das zweite Erweiterungsmodul
145 mittels der Dekodiereinheit 140 aus (Schritt 84). Dementsprechend
führt das zweite Erweiterungsmodul 145 Nullauffüllung an dem
16-Bit-Immediate-Datenelement H8000 auf 24-Bitdaten H008000 durch, die in dem Adressregister
A0 zu halten sind.
Befehl 3: Lies den Inhalt in eine von dem Adressregister A0 bezeichnete Adresse
aus, um denselben in ein Datenregister D1 zu speichern.
Befehl 4: Addiere den Inhalt des Datenregisters D1 zu dem des Registers D0.
Befehl 5: Addiere das Adressregister A0 und das Immediate-Datenelement 110010,
um das Ergebnis in dem Adressregister A0 zu speichern.
Dieser Befehl verwendet das 16-Bit-Immediate-Datenelement 110010 und
weist die Übertragung der Immediate-Datenelemente in dem Adressregister A0
an. Somit gibt die Dekodiereinheit 140 das Steuersignal mittels der Dekodiereinheit
140 an das zweite Erweiterungsmodul 145 aus. Dementsprechend führt
das zweite Erweiterungsmodul 145 Nullauffüllung des 16-Bit-Immediate-Datenelementes
110010 auf 24-Bitdaten 11000010 durch, die an eines der Eingabe-Terminals der ALU
(arithmetisch-logische Einheit) 141 auszugeben sind.
Weiterhin werden die in dem Adressregister A0 gespeicherten Daten
11008000 bei Empfang des Steuersignals von der Dekodiereinheit 140 ausgelesen,
um an das andere Eingabe-Terminal der ALU (arithmetisch-logische Einheit)
141 ausgegeben zu werden.
Somit addiert die ALU (arithmetisch-logische Einheit) 141
die Datenelemente 11008000 und H000010, die beide 24-Bit-Datenelemente sind, um
das Ergebnis in dem Adressregister A0 zu speichern.
Befehl 6: Vergleiche die Ausgabedaten mit dem Immediate-Datenelement 118100.
Dieser Befehl verwendet ein 16-Bit-Immediate-Datenelement 118100 und
weist den Vergleich mit den Daten in dem Adressregister A0 an. Somit gibt die Dekodiereinheit
140 das Steuersignal zuerst an das zweite Erweiterungsmodul 145
aus. Dementsprechend führt das zweite Erweiterungsmodul 145 Nullauffüllung
des 16-Bit-Immediate-Datenelementes 118100 auf 24-Bitdaten 11008100 gemäß
dem Steuersignal durch, zwecks Ausgabe an eines der Eingabe-Terminals der anderen
ALU (arithmetisch-logische Einheit) 141.
Weiterhin liest das Adressregister 105b bei Empfang des Steuersignals
von der Steuersignal-Erzeugungseinheit 103a das 24-Bit-Datenelement H008010
aus dem Adressregister A0 zwecks Ausgabe desselben an das andere Eingabeterminal
der ALU (arithmetisch-logische Einheit) 141 aus.
Die ALU (arithmetisch-logische Einheit) 141 vergleicht die
beiden Eingabe-24-Bit-Datenelemente.
Befehl 7: Wenn das Erstgenannte kleiner ist als das Letztere, kehre zu dem mit
A bezeichneten Befehl 3 zurück; im anderen Fall gehe zu dem Befehl (8) über.
Die Schleife der Befehle 3 bis 7 wird wiederholt, bis der Ausgangswert
des Adressregisters A0, H008000, durch H0000010 auf H008100 inkrementiert wird.
Somit geht die Ablauffolge zu dem Befehl 8 über, wenn das Ergebnis der sechzehn
Additionsoperationen in dem Datenregister D0 gespeichert worden ist.
Befehl 8: Speichere den Inhalt des Datenregisters D0 in die Adresse H 100000
in dem Speicher 130.
Wie bereits ausgeführt worden ist, verwenden die Befehle 2, 6
das 16-Bit-Immediate-Datenelement, während sie 24-Bit-Adressen bezeichnen,
ohne unerwartete Erweiterung zu verursachen. Wenn zum Beispiel das 16-Bit-Immediate-Datenelement
H8000-HFFFF bezeichnet wird, um 24-Bit-Adressen H0080000-HFFFF zu bezeichnen, werden
diese nicht auf 24-Bit HFF8000-HFFFFFF erweitert wie dies in dem herkömmlichen
Prozessor der Fall ist. Infolgedessen kann die Programmgröße im Vergleich
zu dem herkömmlichen Programm reduziert werden.
Weiterhin kann in dem System, in dem durch den gleichen Bus auf den
Befehl und auf die Daten zugegriffen wird, die Operationsgeschwindigkeit erhöht
werden, da der Konflikt in dem Buszugriff reduziert wird.
Es ist zu beachten, dass im Gegensatz zu dem vorstehenden Ausführungsbeispiel
ein Adressregister von N (16, 32 u.s.w.) Bit für M (4, 8, 16 u.s.w.) Bit-Immediatedaten
verwendet werden kann, solange das Erstgenannte größer ist als die Letztgenannten.
(5) Bedingte Abzweigung
In 13 aktiviert die Abrufeinheit
139 die Bussteuereinheit 136, um den Befehl aus dem Speicher
130 abzurufen.
Danach dekodiert die Dekodiereinheit 140 den Befehl und gibt
das Steuersignal an die ALU (arithmetisch-logische Einheit) 141, die Registereinheit
137 und die Bussteuereinheit 136 auf Basis der Art von Operation
und des Zielregisters für die Operationsdaten aus.
In dem Fall des Datenoperationsbefehls referenziert die ALU (arithmetisch-logische
Einheit) 141 die erste Kennzeichengruppe 151 oder die zweite Kennzeichengruppe
152, je nachdem, welche vorgegeben ist, um die Auslesedaten aus der Registereinheit
137 zu operieren. Das Operationsergebnis wird in der Registereinheit
137 gespeichert, und die vorgegebenen Kennzeichen werden in der ersten
und in der zweiten Kennzeichengruppe 151, 152 geändert.
In dem Fall des bedingten Abzweigungsbefehls gibt die Dekodiereinheit
140 Bezeichnungsinformationen entweder mit 16-Bit-Datenbreite oder mit
24-Bit-Datenbreite (Kennzeichengruppenbezeichnung) an den Selektor 153-156
der in 15 gezeigten Abzweigungs-Beurteilungseinheit
143 aus. Die Selektoren 153 bis 156 wählen entweder
die erste oder die zweite Kennzeichengruppe 151, 152 entsprechend
der Kennzeichengruppen-Bezeichnungsinformation aus. Die Bedingungs-Beurteilungseinheit
157 referenziert die Kennzeichengruppen von dem Selektor 153-156,
um zu entscheiden, ob die Abzweigungsbedingung genommen wird.
Auf diese Weise kann das Datenverarbeitungssystem die Kennzeichengruppe
unter Berücksichtigung der Datenoperationsbreite unter der bedingten Abzweigung
und nicht unter dem Datenoperationsbefehl selektiv bezeichnen. Dadurch kann die
Anzahl von Zuweisungen für den Operationscode erhöht werden. Zum Beispiel
bezeichnen die in 16B gezeigten Additions-/Subtraktions-/Vergleichs-Befehle
den Typ der Operation mit den ersten 8 Bit und ermöglichen somit 28
(= 256) Zuweisungen. Bei dem herkömmlichen Abzweigungsbefehl wird ein Bit hinzugefügt,
um die Bitbreite zusätzlich zu der 4-Bit-Abzweigungsbedingung zu bezeichnen,
was 23 (= 8) Zuweisungen ermöglicht. Somit stehen insgesamt 264
(256 + 8) Zuweisungen zur Verfügung.
Andererseits stehen in dem in 2 gezeigten
zweiten herkömmlichen Prozessor 2 (= 128) Zuweisungen und 24
(= 16) Zuweisungen für Addition u.s.w. beziehungsweise bedingte Abzweigungsbefehle
zur Verfügung, was insgesamt 144 Zuweisungen ergibt. Das bedeutet, dass 120
Zuweisungen erhöht werden. Mit anderen Worten gilt: wenn die gleiche Befehlsmenge
zugewiesen wird, kann die Anzahl von Befehlen auf die Hälfte reduziert werden,
während gleichzeitig die Struktur der Dekodiereinheit 140, die die
Bitbreiten-Bezeichnung dekodiert, vereinfacht wird, da die Bitbreitenbezeichnung
in dem Operationscode in den Additions-/Subtraktions-Vergleichs-Befehlen weggelassen
werden kann.
Wenn weiterhin die Bitbreite (N Bit) der ALU (arithmetisch-logische
Einheit) 141 nicht die zweite Potent ist (2P) und die Kennzeichen
entsprechend dem Ergebnis der Zweiten-Potenz-Bit-Datenoperation (weniger als N)
geändert werden, kann ein Benutzer eine der Kennzeichengruppen für eine
Datenoperation nutzen, deren Bitbreite die zweite Potenz und größer als
N ist. Zum Beispiel kann der Benutzer den 24-Bit-Rechner nutzen, der die entsprechend
den Ergebnissen der 16-Bitdatenoperationen geänderte Kennzeichengruppe verwendet,
um die 32-Bitdatenoperation durchzuführen; die Datenbreiten der ALU (arithmetisch-logische
Einheit) 141 können unabhängig von der Daten-Bitbreite ermittelt
werden.
Da weiterhin die beiden Kennzeichengruppen gleichzeitig geändert
werden, beseitigt die Verwendung der Kennzeichengruppe der betreffenden Bitbreite
den Überhang, der in dem fünften herkömmlichen Prozessor beschrieben
wird, bei der Ausführung der bedingten Abzweigung.
Es ist zu beachten, dass die Kennzeichengruppe an die Daten beliebiger
Bitbreite angepasst werden kann.
Ein neuer Operationscode kann erzeugt werden, um die Kennzeichengruppe
vor dem bedingten Abzweigungsbefehl zu bezeichnen anstelle die Bandbreite durch
den bedingten Abzweigungsbefehl zu bezeichnen.
Weiterhin kann der Rechner 24 Bit breit sein oder eine beliebige andere
Bitbreite aufweisen.
Wenngleich die hier vorliegende Erfindung umfassend anhand eines Beispiels
und unter Bezugnahme auf die anhängenden Zeichnungen beschrieben worden ist,
ist zu beachten, dass für den Durchschnittsfachmann verschiedene Änderungen
und Modifizierungen erkennbar sein werden. Daher sollen die genannten Änderungen
und Modifizierungen, insofern sie nicht von dem Geltungsbereich der vorliegenden
Erfindung gemäß Definition in den anhängenden Patentansprüchen
abweichen, als in der Erfindung beinhaltet gelten.
Anspruch[de]
Programmumwandlungseinheit zum Erzeugen eines Maschinensprachenbefehls
aus einem Quellenprogramm für einen Prozessor, der eine N-Bit-Adresse verwaltet,
während N-Bit-Daten verarbeitet werden, wobei N und M ganze Zahlen größer
als Null sind, N größer als M ist und die Programmumwandlungseinheit umfasst:
eine Parameter-Halteeinheit (123), die eine Daten-Breite (M) und eine Zeiger-Breite
(N) enthält, die von einem Benutzer bestimmt werden, wobei die Daten-Breite
die Anzahl von Bits von Daten darstellt, die in dem Quellenprogramm verwendet werden,
während die Zeiger-Breite die Anzahl von Bits einer Adresse darstellt, die
mit dem erzeugten Maschinensprachenbefehl zu verwenden ist; und
eine Erzeugungseinrichtung, die einen Befehl zum Verwalten der Daten-Breite erzeugt,
wenn eine Variable, die durch den Befehl verarbeitet wird, die Daten darstellt,
und die einen Befehl zum Verwalten der Zeiger-Breite erzeugt, wenn eine Variable,
die durch den Befehl verarbeitet wird, die Adresse darstellt.Programmumwandlungseinheit nach Anspruch 1, wobei M 16 beträgt
und N eine ganze Zahl in einem Bereich von 17 bis einschließlich 31 ist.Programmumwandlungseinheit nach Anspruch 1, wobei die Erzeugungseinrichtung
(2) enthält:
eine Beurteilungseinrichtung (143), die einen Typ des Maschinensprachenbefehls
beurteilt, wobei der Maschinensprachenbefehl 1.) einen Befehl zum Zugreifen auf
einen Speicher, 2.) einen Befehl zum Verwenden eines Registers und 3.) einen Befehl
zum Verwenden eines Immediate-Datenelementes enthält;
eine Speicher-Verwaltungseinrichtung (124), die im Fall des Befehls 1)
eine Anweisung ausgibt, die Daten-Breite als eine effektive Speicherzugriffs-Breite
zu verwalten, wenn eine Variable, auf die zuzugreifen ist, die Daten darstellt,
und die Zeiger-Breite als eine effektive Speicherzugriffs-Breite zu verwalten, wenn
die Variable die Adresse darstellt;
eine Register-Verwaltungseinrichtung (125), die im Fall des Befehls 2)
eine Anweisung ausgibt, die Daten-Breite als eine effektive Bit-Breite zu verwalten,
wenn eine Variable, die aus dem Register zu lesen bzw. in dieses zu schreiben ist,
die Daten darstellt, und die Zeiger-Breite als die effektive Bit-Breite zu verwalten,
wenn die Variable die Adresse darstellt;
eine Immediate-Verwaltungseinrichtung (126), die im Fall des Befehls 3)
eine Anweisung ausgibt, die Daten-Breite als die effektive Bit-Breite zu verwalten,
wenn das Immediate-Datenelement die Daten darstellt, und die Zeiger-Breite als die
effektive Bit-Breite zu verwalten, wenn das Immediate-Datenelement die Adresse darstellt;
und
eine Codeerzeugungseinrichtung (122), die den Maschinensprachenbefehl gemäß
den Anweisungen von der Speicher-Verwaltungseinrichtung (124), der Register-Verwaltungseinrichtung
(125) und der Immediate-Verwaltungseinrichtung (126) erzeugt.Programmumwandlungseinheit nach Anspruch 13, wobei M 16 beträgt
und N eine ganze Zahl in einem Bereich von 17 bis einschließlich 31 ist.Programmumwandlungseinheit nach Anspruch 4, wobei
N 24 beträgt; und
die Codeerzeugungseinrichtung (122) einen Befehl für eine 24-Bit-Datenoperation
erzeugt, wenn der Zeiger größer ist als 16 Bit und kleiner als 24 Bit,
und einen Befehl für eine 16-Bit-Datenoperation erzeugt, wenn die Zeiger-Breite
16 Bit oder kleiner ist.Programmumwandlungseinheit nach Anspruch 1, die des Weiteren umfasst:
eine Syntax-Analysiereinrichtung (120), die eine Syntax des Quellenprogramms
(1) analysiert, um das Quellenprogramm (1) in eine Zwischensprache
umzuwandeln, die Zwischenbefehle umfasst, und anschließend zu beurteilen, ob
jede Variable, die in den Zwischenbefehlen enthalten ist, Daten darstellt, die als
eine Adresse verwendet werden; und
eine Tabellenerzeugungseinrichtung, die eine Tabelle für jede Variable in den
Zwischenbefehlen erzeugt, wobei die Tabelle einen Namen zusammen mit einem Typ jeder
Variable hält und der Typ die Daten oder die Adresse darstellt.Programmumwandlungseinheit nach Anspruch 6, wobei M 16 beträgt
und N eine ganze Zahl in einem Bereich von 17 bis einschließlich 31 ist.Programmumwandlungseinheit nach Anspruch 6, wobei die Erzeugungseinrichtung
enthält:
eine Beurteilungseinrichtung (143), die einen Typ des Maschinensprachenbefehls
beurteilt, wobei der Maschinensprachenbefehl 1) einen Befehl zum
Zugreifen auf einen Speicher, 2) einen Befehl zum Verwenden eines Registers und
3) einen Befehl zum Verwenden eines Immediate-Datenelementes enthält;
eine Speicher-Verwaltungseinrichtung (124), die im Fall des Befehls 1)
eine Anweisung ausgibt, eine entsprechende Bit-Breite, die in der Parameter-Halteeinrichtung
gehalten wird, als eine effektive Speicherzugriffsbreite in Abhängigkeit von
dem Typ eine Variable, auf die die zuzugreifen ist, wie er in der Tabelle gezeigt
wird, zu verwalten;
eine Register-Verwaltungseinrichtung (125), die im Fall des Befehls 2)
eine Anweisung ausgibt, eine entsprechende Bit-Breite, die in der Parameter-Halteeinrichtung
gehalten wird, als eine effektive Bit-Breite in Abhängigkeit von dem Typ einer
Variable, die aus dem Register zu lesen bzw. in dieses zu schreiben ist, wie er
in der Tabelle gezeigt wird, zu verwalten;
eine Immediate-Verwaltungseinrichtung (126), die im Fall des Befehls 3)
eine Anweisung ausgibt, eine entsprechende Bit-Breite, die in der Parameter-Halteeinrichtung
gehalten wird, für das Immediate-Datenelement als eine effektive Bit-Breite
in Abhängigkeit von dem Typ des Immediate-Datenelementes, wie er in der Tabelle
gezeigt wird, zu verwalten; und
eine Codeerzeugungseinrichtung (122), die den Maschinensprachenbefehl gemäß
den Anweisungen von der Speicher-Verwaltungseinrichtung (124), der Register-Verwaltungseinrichtung
(125) und der Immediate-Verwaltungseinrichtung (126) erzeugt.Programmumwandlungseinheit nach Anspruch 8, wobei M 16 beträgt
und N eine ganze Zahl in einem Bereich von 17 bis einschließlich 31 ist.Programmumwandlungseinheit nach Anspruch 9, wobei
N 24 beträgt; und
die Codeerzeugungseinrichtung (122) einen Befehl für eine 24-Bit-Datenoperation
erzeugt, wenn die Zeiger-Breite größer ist als 16 Bit und kleiner als
24 Bit, und einen Befehl für einen 16-Bit-Datenoperation erzeugt, wenn die
Zeiger-Breite 16 Bit oder kleiner ist.Programmumwandlungseinheit nach Anspruch 6, wobei die Erzeugungseinrichtung
enthält:
eine Beurteilungseinrichtung (143), die einen Typ des Maschinensprachenbefehls
beurteilt, wobei der Maschinensprachenbefehl 1) einen Befehl zum Zugreifen auf einen
Speicher, 2) einen Befehl zum Verwenden eines Registers und 3) einen Befehl zum
Verwenden eines Immediate-Datenelementes enthält;
eine Speicher-Verwaltungseinrichtung (124), die im Fall des Befehls 1)
eine Anweisung ausgibt, eine entsprechende Bit-Breite, die in der Parameter-Halteeinrichtung
gehalten wird, als eine effektive Speicherzugriffs-Breite in Abhängigkeit von
dem Typ einer Variablen, auf die zuzugreifen ist, wie er in der Tabelle gezeigt
wird, zu verwalten;
eine Register-Verwaltungseinrichtung (125), die im Fall des Befehls 2)
eine Anweisung ausgibt, eine entsprechende Bit-Breite, die in der Parameter-Halteeinrichtung
gehalten wird, als eine effektive Bit-Breite in Abhängigkeit von dem Typ einer
Variable, die aus dem Register zu lesen bzw. in dieses zu schreiben ist, wie er
in der Tabelle gezeigt wird, zu verwalten;
eine Immediate-Verwaltungseinrichtung (126), die im Fall des Befehls 3)
eine Anweisung ausgibt, eine entsprechende Bit-Breite, die in der Parameter-Halteeinrichtung
(123) gehalten wird, für das Immediate-Datenelement als eine effektive
Bit-Breite in Abhängigkeit von dem Typ des Immediate-Datenelementes, wie er
in der Tabelle gezeigt wird, zu verwalten; und
eine Codeerzeugungseinrichtung (122), die den Maschinensprachenbefehl gemäß
den Anweisungen von der Speicher-Verwaltungseinrichtung (124), der Register-Verwaltungseinrichtung
(125) und der Immediate-Verwaltungseinrichtung (126) erzeugt.Programmumwandlungseinheit nach Anspruch 11, wobei die Codeerzeugungseinrichtung
(122) einen Befehl für eine 24-Bit-Datenoperation erzeugt, wenn die
Zeiger-Breite größer ist als 16 Bit und kleiner als 24 Bit, und einen
Befehl für eine 16-Bit-Datenoperation erzeugt, wenn die Zeiger-Breite 16 Bit
oder kleiner ist.Programmumwandlungseinheit nach Anspruch 1, die des Weiteren umfasst:
eine Options-Anweisungseinrichtung (121), die eine Benutzer-Anweisung für
eine Überlauf-Kompensation hält, wobei ein Überlauf möglicherweise
durch eine arithmetische Operation verursacht wird; und
eine Kompensationsbefehl-Erzeugungseinrichtung (121, 122), die
einen Kompensationsbefehl zum Kompensieren eines Überlaufs gemäß
einem Typ einer Variable erzeugt, die in der arithmetischen Operation verwendet
wird, wobei der Typ beurteilt wird, wenn die Options-Anweisungseinrichtung (121)
die Benutzer-Anweisung zum Ausführen der Überlauf-Kompensation halt, und
der Kompensationsbefehl erzeugt wird, wenn eine effektive Bit-Breite einer Variable,
die durch einen Operanden bestimmt wird, kürzer ist als ein Register von N
Bit Breite, und der Befehl einer arithmetischen Operation möglicherweise einen
Überlauf verursacht, der die effektive Bitbreite übersteigt.Programmumwandlungseinheit nach Anspruch 13, wobei M 16 beträgt,
und M eine ganze Zahl in einem Bereich von 16 bis einschließlich 31 ist.Programmumwandlungseinheit nach Anspruch 13, wobei M 32 beträgt
und M eine ganze Zahl in einem Bereich von 33 bis einschließlich 63 ist.Programmumwandlungseinheit nach Anspruch 13, wobei die Kompensationsbefehl-Erzeugungseinrichtung
(121, 122) enthält:
eine Befehls-Beurteilungseinrichtung, die einen Befehl einer arithmetischen Operation
beurteilt, der möglicherweise einen Überlauf für alle Maschinensprachenbefehle
verursacht, wenn die Options-Befehlseinrichtung (121) die Benutzer-Anweisung
zum Ausführen der Überlauf-Kompensation hält;
eine Variablen-Beurteilungseinrichtung, die in Bezug auf eine Variable in dem Befehl
einer arithmetischen Operation, der durch die Befehls-Beurteilungseinrichtung beurteilt
wird, eine effektive Bit-Breite beurteilt und beurteilt, ob die Variable vorzeichenbehaftet
ist oder vorzeichenlos ist, indem sie auf die Tabelle Bezug nimmt;
eine Vorzeichenvervielfachungsbefehl-Erzeugungseinrichtung, die im Fall einer vorzeichenbehafteten
Variable einen Kompensationsbefehl erzeugt, wobei ein logischer Wert eines Vorzeichen-Bits
durch den Vorzeichenvervielfachungs-Kompensationsbefehl in alle Bits über der
effektiven Bit-Breite in einem Register gefüllt wird, das die vorzeichenbehaftete
Variable speichern soll; und
eine Nullauffüllungsbefehl-Erzeugungseinrichtung, die im Fall einer vorzeichenlosen
Variable einen Nullauffüllungs-Kompensationsbefehl erzeugt, wobei ein logischer
Wert "0" durch den Nullauffüllungs-Kompensationsbefehl in alle Bits über
der effektiven Bit-Breite in einem Register gefüllt wird, das die vorzeichenlose
Variable speichern soll.Programmumwandlungseinheit nach Anspruch 16, wobei die Erzeugungseinrichtung
(2) enthält:
eine Beurteilungseinrichtung (143), die einen Typ des Maschinensprachenbefehls
beurteilt, wobei der Maschinensprachenbefehl 1.) einen Befehl zum Zugreifen auf
einen Speicher, 2.) einen Befehl zum Verwenden eines Registers und 3.) einen Befehl
zum Verwenden eines Immediate-Datenelementes enthält;
eine Speicher-Verwaltungseinrichtung (124), die im Fall des Befehls 1)
eine Anweisung ausgibt, die Daten als eine effektive Speicherzugriffs-Breite zu
verwalten, wenn eine Variable, auf die zuzugreifen ist, die Daten darstellt, und
die Zeiger-Breite als eine effektive Speicherzugriffs-Breite zu verwalten, wenn
die Variable die Adresse darstellt;
eine Register-Verwaltungseinrichtung (125), die im Fall des Befehls 2)
eine Anweisung ausgibt, die Daten-Breite als eine effektive Bit-Breite zu verwalten,
wenn eine Variable, die aus dem Register zu lesen bzw. in dieses zu schreiben ist,
die Daten darstellt, und die Zeiger-Breite als die effektive Bit-Breite zu verwalten,
wenn die Variable die Adresse darstellt,
eine Immediate-Verwaltungseinrichtung (126), die im Fall des Befehls 3)
eine Anweisung ausgibt, die Daten-Breite als die effektive Bit-Breite zu verwalten,
wenn das Immediate-Datenelement die Daten darstellt, und die Zeiger-Breite als die
effektive Bit-Breite zu verwalten, wenn das Immediate-Datenelement die Adresse darstellt;
und
eine Codeerzeugungseinrichtung (122), die den Maschinensprachenbefehl gemäß
den Anweisungen von der Speicher-Verwaltungseinrichtung (124), der Register-Verwaltungseinrichtung
(125) und der Immediate-Verwaltungseinrichtung (126) erzeugt.Programmumwandlungseinheit nach Anspruch 17, wobei M 16 beträgt
und N eine ganze Zahl in einem Bereich von 17 bis einschließlich 31 ist.Programmverwaltungseinheit nach Anspruch 17, wobei M 32 beträgt
und N eine ganze Zahl in einem Bereich von 33 bis einschließlich 63 ist.Programmumwandlungseinheit nach Anspruch 6, die des Weiteren umfasst:
eine Options-Anweisungseinrichtung (121), die eine Benutzer-Anweisung für
eine Überlauf-Kompensation halt, wobei ein Überlauf möglicherweise
durch eine arithmetische Operation verursacht wird, und
eine Kompensationsbefehl-Erzeugungseinrichtung (121, 122), die
einen Kompensationsbefehl zum Kompensieren eines Überlaufs gemäß
einem Typ einer Variable erzeugt, die in der arithmetischen Operation verwendet
wird, wobei der Typ beurteilt wird, wenn die Options-Anweisungseinrichtung (121)
die Benutzer-Anweisung zum Ausführen der Überlaufkompensation hält,
und der Kompensationsbefehl erzeugt wird, wenn eine effektive Bit-Breite einer Variable,
die durch einen Operanden bestimmt wird, kürzer ist als ein Register von N
Bit Breite, und der Befehl einer arithmetischen Operation möglicherweise einen
Überlauf verursacht, der die effektive Bit-Breite übersteigt.Programmverwaltungseinheit nach Anspruch 20, wobei M 16 beträgt
und N eine ganze Zahl in einem Bereich von 17 bis einschließlich 31 ist.Programmumwandlungseinheit nach Anspruch 20, wobei M 32 beträgt
und N eine ganze Zahl in einem Bereich von 33 bis einschließlich 63 ist.Programmumwandlungseinheit nach Anspruch 20, wobei die Kompensationsbefehl-Erzeugungseinrichtung
(121, 122) enthält:
eine Befehls-Beurteilungseinrichtung, die einen Befehl einer arithmetischen Operation
beurteilt, der möglicherweise einen Überlauf für alle Maschinensprachenbefehle
verursacht, wenn die Options-Befehlseinrichtung die Benutzer-Anweisung zum Ausführen
der Überlauf-Kompensation hält;
eine Variablen-Beurteilungseinrichtung, die in Bezug auf eine Variable in dem Befehl
einer arithmetische Operation, der durch die Befehls-Beurteilungseinrichtung beurteilt
wird, eine effektive Bit-Breite beurteilt und beurteilt, ob die Variable ein Vorzeichen
hat oder kein Vorzeichen hat, indem sie auf die Tabelle Bezug nimmt;
eine Vorzeichenvervielfachungsbefehl-Erzeugungseinrichtung, die im Fall einer vorzeichenbehafteten
Variable einen Kompensationsbefehl erzeugt, wobei ein logischer Wert eines Vorzeichen-Bits
durch den Vorzeichenvervielfachungs-Kompensationsbefehl in alle Bits über der
effektiven Bit-Breite in einem Register gefüllt wird, das die vorzeichenbehaftete
Variable speichern soll;
eine Nullauffüllungsbefehl-Erzeugungseinrichtung, die im Fall einer vorzeichenlosen
Variable einen Nullauffüllungs-Kompensationsbefehl erzeugt, wobei ein logischer
Wert "0" durch den Nullauffüllungs-Kompensationsbefehl in alle Bits über
der effektiven Bit-Breite in einem Register gefüllt wird, das die vorzeichenlose
Variable speichern soll.Programmumwandlungseinheit nach Anspruch 23, wobei die Erzeugungseinrichtung
(2) enthält:
eine Beurteilungseinrichtung (143), die einen Typ des Maschinensprachenbefehls
beurteilt, wobei der Maschinensprachenbefehl 1) einen Befehl zum Zugreifen auf einen
Speicher, 2) einen Befehl zum Verwenden eines Registers und 3) einen Befehl zum
Verwenden eines Immediate-Datenelementes enthält;
eine Speicher-Verwaltungseinrichtung (124), die im Fall des Befehls 1)
eine Anweisung ausgibt, eine entsprechende Bit-Breite, die in der Parameter-Halteeinrichtung
(123) gehalten wird, als eine effektive Speicherzugriffs-Breite in Abhängigkeit
von dem Typ einer Variable, auf die zuzugreifen ist, wie er in der Tabelle gezeigt
wird, zu verwalten;
eine Register-Verwaltungseinrichtung (125), die im Fall des Befehls 2)
eine Anweisung ausgibt, eine entsprechende Bit-Breite, die in der Parameter-Halteeinrichtung
(123) gehalten wird, als eine effektive Bit-Breite in Abhängigkeit
von dem Typ einer Variable, die aus dem Register zu lesen bzw. in dieses zu schreiben
ist, wie er in der Tabelle gezeigt wird, zu verwalten;
eine Immediate-Verwaltungseinrichtung (126), die im Fall des Befehls 3)
eine Anweisung ausgibt, eine entsprechende Bit-Breite, die in der Parameter-Halteeinrichtung
(123) gehalten wird, für das Immediate-Datenelement als eine effektive
Bit-Breite in Abhängigkeit von dem Typ des Immediate-Datenelementes, wie er
in der Tabelle gezeigt wird, zu verwalten; und
eine Codeerzeugungseinrichtung (122), die den Maschinensprachenbefehl gemäß
den Anweisungen von der Speicher-Verwaltungseinrichtung (124), der Register-Verwaltungseinrichtung
(125) und der Immediate-Verwaltungseinrichtung (126) erzeugt.Programmumwandlungseinheit nach Anspruch 21, wobei M 16 beträgt
und N eine ganze Zahl in einem Bereich von 17 bis einschließlich 31 ist.Programmumwandlungseinheit nach Anspruch 21, wobei M 32 beträgt
und N eine ganze Zahl in einem Bereich von 33 bis einschließlich 63 ist.