-
HINTERGRUND DER ERFINDUNG
-
(1) Gebiet der Erfindung
-
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 Segment register, 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 Datenvariable | Bereich
(dezimal) |
Vorzeichenbehaftetes
Zeichen | -128
bis (einschl.) +127 |
Vorzeichenloses
Zeichen | 0
bis (einschl.) +255 |
Vorzeichenbehaftete
Kurzganzzahl | -32768
bis (einschl.) +32767 |
Vorzeichenlose
Kurzganzzahl | 0
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 | Kompensationsbefehl |
Vorzeichenbehaftetes
Zeichen | Linksverschiebung
um 24 Bit und |
| arithmetische
Rechtsverschiebung um |
| 24
Bit |
Vorzeichenloses
Zeichen | Linksverschiebung
um 24 Bit und |
| logische
Rechtsverschiebung um 24 Bit |
Vorzeichenbehaftete
Kurzganzzahl | Linksverschiebung
um 16 Bit und |
| arithmetische
Rechtsverschiebung um |
| 16
Bit |
Vorzeichenlose Kurzganzzahl | Linksverschiebung
um 16 Bit und |
| logische
Rechtsverschiebung um 16 |
| Bit |
-
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
Ma schinensprachenprogramm 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 Bit |
EXTXU
Dn; | nullaufgefüllte 16
Bit bis 24 Bit |
EXTXB
Dn; | vorzeichenvervielfachte
8 Bit bis 24 Bit |
EXTXBU
Dn; | nullaufgefüllte 8 Bit
bis 24 Bit |
ERWEITERUNGSBEFEHL
FÜR ÜBERTRAGUNGSDATEN
MOVI
#imm16, Dn | ;
vorzeichenvervielfachte 16-Bit-Immediate-Daten |
| auf
24 Bit (#imml6→Dn) |
MOVI
#imm8, Dn | ;
vorzeichenvervielfachte 8-Bit-Immediate-Daten |
| auf
24 Bit (#imm8→Dn) |
MOVI
#imm16, An | ;
nullaufgefüllte
16-Bit-Immediate-Daten |
| auf
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
Benach richtigung 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 zu gewiesen 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
Codeer zeugungseinheit 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):
-
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.
-
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.
-
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.
-
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.
Befehl
1: | H100000 | MOV | #H001000,
A0 |
Befehl
2: | H100005 | MOV | @A0,
Al |
Befehl
3: | H100007 | MOV | @A1,
D0 |
Befehl
4: | H100008 | MOV | @(04,
A0), D1 |
Befehl
5: | H10000a | ADD | D0,
D1 |
Befehl
6: | H10000b | ADD | #H0001,
D1 |
Befehl
7: | H10000f | MOV | D1,
@(06, A0) |
-
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.
Befehl
1: | Adresse
100000 | MOVB
@1000, D0 |
Befehl
2: | Adresse
100004 | ADD
#1, D0 |
Befehl
3: | Adresse
100006 | MOVB
D0, @1000 |
-
Analog
dazu erzeugt die Codeerzeugungseinheit
122 die Befehle
4 bis 6 wie folgt aus dem Zwischenbefehl 2 (b = b + a).
Befehl
4: | Adresse
100009 | MOVBU
@1001, D1 |
Befehl
5: | Adresse
10000c | ADD
D0, D1 |
Befehl
6: | Adresse
10000d | MOVB
D1, @1001 |
-
Die
Codeerzeugungseinheit
122 erzeugt die Befehle 7 bis 9 wie
folgt aus dem Zwischenbefehl 3 (c = c + b).
Befehl
7: | Adresse
100010 | MOV
@1002, D0 |
Befehl
8: | Adresse
100013 | ADD
D1, D0 |
Befehl
9: | Adresse
100014 | MOV
D0, @1002 |
-
Die
Codeerzeugungseinheit
122 erzeugt die Befehle 10 bis 12
wie folgt aus dem Zwischenbefehl 4 (d = d + c).
Befehl
10: | Adresse
100017 | MOV
@1004, D1 |
Befehl
11: | Adresse
100001b | ADD
D1, D0 |
Befehl
12: | Adresse
10001 | MOV
D1, @1004 |
-
Die
Befehle 1 bis 12 sind der Objektcode, der zur Vereinfachung in den
mnemonischen Objektcodes (Assemblersprache) geschrieben sind. Diese
sind Hexadezimal zahlen, 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)
-
Ü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 Codeerzeu gungseinheit 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).
-
Ü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).
-
Ü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 Codeerzeugungsein heit 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).
-
Auf
diese Weise erzeugt die Codeerzeugungseinheit
122 wie folgt
einen Objektcode:
Befehl
1: | address
100000 | MOVB | @1000,
D0 |
Befehl
2: | address
100004 | ADD | #1,
D0 |
Befehl
2': | address
100006 | EXTXB | D0 |
Befehl
3: | address
100007 | MOVB | D0,
@1000 |
Befehl
4: | address
10000a | MOVBU | @1001,
D1 |
Befehl
5: | address
10000d | ADD | D0,
D1 |
Befehl
5': | address
10000e | EXTXBU | D1 |
Befehl
6: | address
10000f | MOVB | D1,
@1001 |
Befehl
7: | address
100012 | MOV | @1002,
D0 |
Befehl
8: | address
100015 | ADD | @D1,
D0 |
Befehl
8': | address
100016 | EXTX | D0 |
Befehl
9: | address
100017 | MOV | D0,
@1002 |
Befehl
10: | address
10001a | MOVU | @1004,
D1 |
Befehl
11: | address
10001e | ADD | D0,
D1 |
Befehl
11': | address
10001f | EXTXU | D1 |
Befehl
12: | address
100020 | MOV | D1,
@1004 |
-
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.