DE2903349C2 - Prozessor und Verfahren zur Datenverarbeitung - Google Patents

Prozessor und Verfahren zur Datenverarbeitung

Info

Publication number
DE2903349C2
DE2903349C2 DE2903349A DE2903349A DE2903349C2 DE 2903349 C2 DE2903349 C2 DE 2903349C2 DE 2903349 A DE2903349 A DE 2903349A DE 2903349 A DE2903349 A DE 2903349A DE 2903349 C2 DE2903349 C2 DE 2903349C2
Authority
DE
Germany
Prior art keywords
register
bit
command
instruction
microcode
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE2903349A
Other languages
English (en)
Other versions
DE2903349A1 (de
Inventor
William B Pohlmann
Bruce W Ravenel
James F Mckevitt
Stephen F Morse
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE2903349A1 publication Critical patent/DE2903349A1/de
Application granted granted Critical
Publication of DE2903349C2 publication Critical patent/DE2903349C2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/342Extension of operand address space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0615Address space extension
    • G06F12/0623Address space extension for memory modules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30069Instruction skipping instructions, e.g. SKIP
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3871Asynchronous instruction pipeline, e.g. using handshake signals between stages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Description

Die Erfindung bezieht sich auf einen Prozessor nach dem Oberbegriff des Anspruchs 1 bzw. ein Verfahren zur Datenverarbeitung nach dem Oberbegriff des Anspruchs 2.
Digitalrechner gewinnen in der modernen Technik zunehmend an Bedeutung und erhalten neue Anwendungsgebiete bei praktisch jeder wesentlichen technologischen Verbesserung. Die Entwicklung von Minicomputern hat es ermöglicht, daß Digitalrechner als permanenter Bestandteil verschiedener Prozeßsteuersysteme vorgesehen werden. Die Größe und Kosten von Minicomputern hat jedoch deren Einsatzmöglichkeit in besonderen Anwendungsfällen beschränkt. Die Kapazität und Leistungsfähigkeit solcher besonderer Mikroprozessoren gehen teilweise auf eine feste oder begrenzte Wortlänge zurück, von der der Betrieb des Mikroprozessors abhängig ist.
Bekannt sind Datenverarbeitungseinrichtungen, die bei der Ausführung arithmetischer Operationen in der Lage sind, entweder Operanden mit der Länge eines Bytes miteinander zu verknüpfen oder Operanden mit der Länge eines Vielfachen eines Bytes (z. B. mit der Länge eines Wortes) zu verarbeiten. Diese Datenverarbeitungseinrichtungen können unter anderem arithmetische Operationen an Operanden ausführen, die vom Operationsbefehl unmittelbar transportiert werden (sogenannte Direktoperanden). Bei der Ausführung der Operation wird ein Bit verwendet, das anzeigt, ob die Operation und zugleich sämtliche Operanden die Länge eines Bytes oder eines Wortes haben. Hat die Operation die Länge eines Bytes, so haben beide Operanden der arithmetischen Operation, also auch der Direktoperand, die Länge eines Bytes. Wenn dagegen die Operation Wort-Länge hat, so haben beide Operanden einschließlich des Direktoperanden ebenfalls Wort-Länge.
Aus der Firmenschrift der Texas Instruments, Inc. "SPB 9900 I²L 16-Bit Microprocessor Data Manual", Oktober 1976, S. III-20, ist eine Adressberechnung bekannt, bei der zu einer Basisadresse eine Verschiebung geringerer Bitlänge hinzuaddiert wird. Dazu wird zuvor die Verschiebung durch "Auffüllen" der höher bewerteten Bitpositionen mit dem Vorzeichenbit erweitert.
Der Erfindung liegt die Aufgabe zugrunde, eine Datenverarbeitungseinrichtung bzw. ein Verfahren zur Datenverarbeitung zu schaffen, bei denen bei einer arithmetischen Operation der eine Operand Wort-Länge und der Direkt-Operand die Länge eines Bytes oder eines Wortes haben kann, ohne daß bei der Ausführung des Direktoperanden-Befehls zusätzliche Hardware erforderlich ist.
Diese Aufgabe wird erfindungsgemäß durch einen Prozessor nach Anspruch 1 bzw. ein Verfahren nach Anspruch 2 gelöst. Ein wesentlicher Grundgedanke bei dieser Lösung ist die Verwendung eines zusätzlichen 1-Bits, das anzeigt, ob der Direktoperand Byte- oder Wort-Länge hat. Ein weiterer Grundgedanke ist die automatische Verlängerung des kürzeren Operanden durch Kopieren von Vorzeichen-Bits in alle Bitpositionen höherer Ordnung.
Im folgenden wird die Erfindung anhand eines in der Zeichnung dargestellten Ausführungsbeispiels näher erläutert. In der Zeichnung zeigt:
Fig. 1a und 1b vereinfachte Blockschaltbilder der internen Organisation eines Mikroprozessors nach einem Ausführungsbeispiel der Erfindung;
Fig. 2 eine äquivalente Logikschaltung für eine besondere Art der ALU-Schaltung, die in ASCII-Befehlen verwendet wird; und
Fig. 3 ein schematisches Zustandsdiagramm der Laderschaltung der unteren Steuereinheit.
Die Fig. 1a und 1b zeigen vereinfachte schematische Blockschaltbilder eines Zentralprozessors 10, der erfindungsgemäß organisiert ist. Der Zentralprozessor, im folgenden CPU 10 genannt, zeichnet sich dadurch aus, daß er eine obere Steuereinheit 12, schematisch in Fig. 1a gezeigt, und eine untere Steuereinheit 14, schematisch in Fig. 1b gezeigt, aufweist. Wie aus den Fig. 1a und 1b zu sehen ist, ist die obere Steuereinheit 12 mit der unteren Steuereinheit 14 vor allem über einen ALU-Bus 16, einen S-Bus 18 (Quellen-Bus), einen Ziel- bzw. D-Bus 20 und einen Q-Bus 22 (Warteschlangen-Bus) verbunden. Ferner gibt es mehrere Steuerleitungen oder -Busse, welche die obere Einheit 12 mit der unteren Einheit 14 in einer im folgenden noch genauer beschriebenen Weise verbinden.
Die obere Steuereinheit 12 ist der einzige Teil der CPU 10, der direkt in den Informationsaustausch mit der externen Speichereinheit einbezogen ist. Bekanntlich werden alle Zentraleinheiten bzw. CPU's in Kombination mit einem oder mehreren Speichersystemen verwendet, wobei in dem beschriebenen Ausführungsbeispiel unterstellt wird, daß diese Speichersysteme durch einen Ein-Megabyte-Halbleiterspeicher gebildet werden. Andere Arten von Speichern oder bekannten Eingabe/Ausgabe-Einrichtungen können direkt oder indirekt mit dem externen Adreß- und Daten-Bus gekoppelt werden, der wiederum mit den Adreß- und Daten-Bus- Eingabe/Ausgabe-Pins 24 der CPU 10 verbunden ist.
Sechszehn Adreß- und Daten-Bus-Pins 24 sind mit einem Verriegelungs- und Eingabe/Ausgabe-Puffer 26 bekannter Ausführung verbunden. Eine Binärinformation ist über eine einfache Kreuzschaltung 30 mit einem C-Bus 28 verbunden. Die sechzehn Pins sind in zwei Bytes von jeweils acht Bits organisiert und bilden ein einzelnes Sechzehn-Bit-Wort. Die Schaltung 30 verbindet die beiden ein Sechzehn-Bit-Wort bildenden Bytes mit dem C-Bus 28 entweder in normaler oder umgekehrter Reihenfolge. Die Erläuterung der Verwendung und Ausbildung der Kreuzschaltung 30 folgt weiter unten.
Die obere Steuereinheit 12 enthält eine obere Registerdatei 32 mit vier 16-Bit-Verschieberegistern 34, 36, 38, 40, die im folgenden auch als Register RC, RD, RS und RA bezeichnet werden. Die obere Registerdatei 32 weist auch einen 16-Bit-Programmzähler 42, bezeichnet als Register PC, ein indirektes 16-Bit-Register 44, bezeichnet als Register IND und ein 16-Bit-Operanden-Register 46, bezeichnet als Register OPR auf. Zusätzlich enthält die Registerdatei 32 einen Warteschlangen-Befehlspuffer 48, der bei dem beschriebenen Ausführungsbeispiel als sechspaariges 8-Bit-Register mit der Bezeichnung Register Q0 bis Q5 ausgebildet ist. Die Registerdatei ist über den C-Bus 28 und den B-Bus 50 mit Zwischenregistern 52 bzw. 54 verbunden. Der C-Bus 28 ist über einen Multiplexer 56, der eingangsseitig auch mit den Ausgängen eines Festwertspeichers oder ROM 58 gekoppelt ist, mit dem Zwischenregister 52 verbunden. Die Ausgänge der Zwischenregister 52 und 54 sind mit einem Addierer 60 verbunden, dessen Ausgang mit einem Zwischenregister 62 verbunden ist. Der Ausgang des Zwischenregisters 62 ist in ähnlicher Weise mit dem C-Bus 28 verbunden und steht dadurch mit dem externen Adreß- und Daten-Bus in Verbindung. Vier Leitungen des C-Bus 28 sind abgetrennt und bilden die ersten vier Bits der 20-Bit-Adresse. Eine Leitung ist mit dem Adressenanschluß 66 der nullten Ordnung oder A0 verbunden, während die restlichen drei Leitungen über ein Zwischenregister 64 mit einer Adressenverriegelungs- und Pufferschaltung 68 gekoppelt sind, deren Ausgangssignal die drei Adressenbits A1 bis A3 bilden.
Die obere Registerdatei 32 ist ferner mit dem Alu-Bus 16, dem S-Bus 18, dem D-Bus 20 und dem Q-Bus 22 gekoppelt und steht über diese Busse mit der unteren Steuereinheit 14 in einer weiter unten beschriebenen Weise in Verbindung.
Die obere Steuereinheit 12 weist ferner einen T-Zustands-Generator 70, eine Zyklus-Entscheidungs-Logikschaltung 72 und eine Warteschlangen- oder Q-Steuerschaltung 74 auf. Jede dieser Schaltungen ist in einer Anordnung vorbenutzt, die unter dem Zeichen Intel 8086 vertrieben wird. Die obere Steuereinheit 12 weist außerdem eine externe Schnittstellenschaltung 76 auf.
Eine Zyklus-Entscheidungs-Logikschaltung 72 liefert die geeigneten Befehle zu Verschieberegistern 32-40 zum Ausführen der Speicher-Lese- und -Schreibzyklen unter geeigneter Zeitgabe. Auf die Verschieberegister 32-40 wird über bestimmte, in Fig. 1A nicht gezeigte Steuerleitungen zugegriffen, um sie zusätzlich nach Maßgabe von Befehlen als gewöhnliche digitale Informationsregister zu behandeln. Eine Warteschlangen-Steuerschaltung 74 hält eine Zählung von Bytes in der Befehlswarteschlange und deren Reihenfolge aufrecht. Diese Information wird der Logikschaltung 72 eingegeben, um die geeigneten Rechenoperationen mit Bezug auf den Programmzähler 42, das Operanden-Register 46 und das indirekte Register 44 bei den weiter unten beschriebenen Speicher-Lese- und -Schreiboperationen, den Unterbrechungsoperationen und deren nachfolgenden Adreß- und Programmzählerkorrekturen durchzuführen. Der Festwertspeicher 58 liefert selektiv eine Reihe von ganzzahligen Werten, z. B. +6 bis -6, an den Addierer 60, die bei den Verschiebeadreßkorrekturen und den Programmzählerkorrekturen verwendet werden. Eine T-Zustands-Zeitgabeschaltung 70 liefert eine Vielzahl von flipflop-getriggerten T-Zuständen und führt damit die obere Steuereinheit 12 durch die Abruf-, Lese- und Schreibbefehlszyklen sowie durch andere Zyklen, wie Unterbrechungszyklen, wie sie typischerweise bei einem Allzweck-Mikroprozessor erforderlich sind. Die Warteschlangen-Steuerschaltung 74, die Zyklusentscheidungslogikschaltung und der T-Zustands-Taktgenerator 70 verwendet eine beliebige Logik, die in bekannter Weise zur Ausführung der oben angegebenen Funktionen organisiert ist.
Die untere Steuereinheit 14 weist in ähnlicher Weise eine untere oder Hauptregisterdatei 78 auf, die über eine Kreuzschaltung 80 ähnlich der Kreuzschaltung 30 mit dem ALU-Bus 16 gekoppelt ist. Die Hauptregisterdatei 78 ist in geeigneter Weise mit dem S-Bus 18 und dem D-Bus 20 verbunden. In dem beschriebenen Ausführungsbeispiel weist die Hauptregisterdatei 78 acht paarige 8-Bit-Register 82-96 auf, die im folgenden auch mit X, B, D, H, A, C, E bzw. L bezeichnet werden. In ähnlicher Weise weist die Hauptregisterdatei 78 ein 16-Bit-Stapelzeiger-Register 98, das auch als Register SP bezeichnet wird, ein 16-Bit-Speicherzeiger-Register 100, auch Register MP genannt, und zwei 16-Bit-Indexregister 103 und 105 auf, welche im folgenden auch als Register IJ bzw. IK bezeichnet werden.
Der Q-Bus 22 aus der oberen Steuereinheit 12 ist mit mehreren Registern oder Dekodierern in der unteren Steuereinheit 14 verbunden. Alle 8 Bit-Leitungen des Q-Bus 22 sind mit einem als Register IR bezeichneten Befehlsdekodierer 102 verbunden. In ähnlicher Weise liegen die drei am niedrigsten bewerteten Bits an einem M-Register 104, dessen Ausgang mit dem S-Bus 18 und dem D-Bus 20 verbunden ist. Die Bits 3-5, die in der Bewertung viert- bis sechsthöchsten Bits, werden an ein N-Register 106 angelegt, dessen Ausgang ebenfalls mit dem S-Bus 18 und dem D-Bus 20 gekoppelt ist. Die Bits 3-5 werden außerdem in ein X-Register 108 eingegeben, dessen Ausgang mit einem ALU-Befehlscode-Register 110 gekoppelt ist. Schließlich werden alle 8 Bits des Q-Bus 22 an das Hauptfeldregister oder AR-Register 112 angelegt. Das Ausgangssignal des AR-Registers 112 wird an die erste Dekodierstufe des ROM-Hauptfeldes 114 angelegt, das den größten Teil des Mikrokode-Programms enthält. In ähnlicher Weise wird das Ausgangssignal des Befehlsregisters 102 an einen Gruppendekodier-ROM 116 angelegt. Das Mikrokode-Ausgangssignal aus Stufe 2 des ROM 114 wird über eine 4 : 1 Multiplexer- und Verriegelungsschaltung 118 ausgekoppelt. Fünf Bits des Ausgangssignals der Verriegelungsschaltung werden an einen 2 : 1 Multiplexer 120 angelegt, dessen Ausgangssignal in ähnlicher Weise an den Eingang eines Übersetzungs-ROM 120 angelegt wird. Das AR-Register 112 ist in paarweiser Anordnung mit einem Zähl- und Inkrementierregister bzw. CR-Register 124 gekoppelt. Der Ausgang des Übersetzungs-ROM 122 ist mit dem AR-Register 112 und dem CR-Register 124 gekoppelt, welche in ähnlicher, bidirektionaler Weise mit einem entsprechenden Unterprogramm- oder SR-Register 126 bzw. einem Unterprogramm- Inkrementregister 128 gekoppelt sind. Die Operationen des Gruppendekodier-ROM 116, des Übersetzungs-ROM 112 und des Haupt-ROM 114 werden von einer Ladeschaltung 130 über bestimmte, in der Zeichnung nicht dargestellte Befehlsleitungen koordiniert. Die genaue Operationsweise der unteren Steuereinheit 14 wird weiter unten beschrieben.
Der Ausgang der Multiplexer- und Verriegelungsschaltung 118 ist mit dem S-Bus 18 und dem D-Bus 20 sowie dem ALU-Befehlscode-Register 110 gekoppelt. Der Inhalt des ALU-Befehlscode-Registers 110 wird von einem ALU-ROM 132 umgesetzt, der ALU-Steuersignale an eine 16-Bit-ALU 134 anlegt, welche die arithmetischen und logischen Operationen für die Zentraleinheit bzw. den Zentralprozessor 10 liefert. Die ALU 134 ist ausgangsseitig mit dem ALU-Bus 16 und dem Programmstatuswort- oder PSW-Register 136 gekoppelt, das zur Prüfung und Verarbeitung des Zustandes mehrerer Kennzeichen dient. Das PSW 136 weist herkömmliche Kennzeichnungs-Bits, z. B. Übertrag, Hilfsübertrag, Null, Vorzeichen, Parität, Überlauf, Richtung, Unterbrechungsfreigabe und nichtprogrammierter bedingter Sprung auf. Das Eingangssignal zur ALU 134 wird über drei Zwischenregister 138 bis 142 geliefert. Das Eingangssignal zu jedem der Register 138-142 wird aus dem ALU-Bus 16 abgeleitet. Sowohl die untere Registerdatei 78 als auch die Zwischenregister 138-142 sind mit dem S-Bus 18 und dem S-Bus 20 gekoppelt, wodurch diese Register selektiv zugreifbar sind. Die untere Steuereinheit 14 enthält auch eine bestimmte Logik, welche die Operation und Koordination der Gesamtfunktion der CPU 10 erleichtert. So ist beispielsweise der Ausgang der Multiplexer- und Verriegelungsschaltung 118 mit einer ROM-OUT-Steuerschaltung 144 gekoppelt, deren Ausgänge zumindest teilweise mit einer Präfix-Steuerschaltung 146 gekoppelt sind.
Die ROM-OUT-Steuerschaltung 144 enthält eine herkömmliche Logikschaltung, welche ein internes Befehlssignal RUN-NEXT-INSTRUCTION, RNI, erzeugt, wie weiter unten erläutert wird. Außerdem erzeugt die ROM-OUT-Steuerschaltung in der weiter unten beschriebenen Weise den Vorletzter-Takt-Befehl, NXT. Die Datenübertragung zwischen der unteren Steuereinheit 14 und der oberen Steuereinheit 12 ist grundsätzlich über den Ausgangsbus, der die ROM-OUT-Steuerschaltung 144 mit der Zyklus-Entscheidungslogikschaltung 72 verbindet. Die Datenübertragung zwischen der oberen und unteren Steuereinheit bezieht sich allgemein auf die Speicher-Lese- und Schreiboperationen, die Verschieberegister-Rechen- und Verarbeitungsoperationen, die Korrekturoperationen bezüglich der Verschiebung in den Registern und des Programmzählers, die Unterbrechungsbestätigungsoperationen, die Eingabe- und Ausgabeoperationen und das Löschen der Warteschlange 48 sowie die Sperrung der gesamten Mikroprozessoroperation während eines HALT-Modus. Ein großer Teil der ROM-OUT-Steuerschaltung 144 ist mit einer Programmzustandssprungschaltung 145 gekoppelt, welche die Logik zur Prüfung der Bedingungen in Mikrokodesprüngen zur Verfügung stellt.
Die Präfix-Steuerschaltung 146 liefert in herkömmlicher Weise die erforderliche Logik für verschiedene Präfix-Bytes. Außerdem bildet die Präfix-Steuerschaltung 146 die Logik für eine Basis-Präfixanweisung, wie sie bei der Erfindung verwendet wird. Die Schaltung weist drei mit BPE, BPL und BPH bezeichnete Flipflops auf. Das erste Flipflop BPE wird in Abhängigkeit von einem bestimmten Befehl freigegeben, der in Abhängigkeit vom Laden eines Basis-Präfix in das Befehlsregister 102 vom Gruppendekodier-ROM 116 erzeugt wird. Das Basis-Präfix zeigt an, daß ein ausgewähltes Verschiebregister als Stapelverschieberegister über die Dauer des nachfolgenden Befehls anstelle des normalerweise verwendeten Registers benutzt werden soll, wenn eine Stapeladresse über den Speicherzeiger MP, hergestellt wird, d. h. ein anderer als ein Einkeller- oder Auskeller-Befehl (push or pop instruction). Das beim Basis-Präfix auszuwählende Verschieberegister wird durch den Zustand der Flipflops BPL und BPH bestimmt. Diese Flipflops enthalten ein 2-Bit-Feld aus einem Verschieberegisterbefehl, der den Inhalt eines besonderen Verschieberegisters lädt, speichert oder auskellert. Das Basis-Präfix ermöglicht eine Umschaltung von einem Verschieberegister, das normalerweise von der Programmkonvention zur Verwendung durch einen zu einem Verschieberegister zugreifenden Befehl bezeichnet ist, auf ein im Basis-Präfix-Byte bezeichnetes Verschieberegister. Die Flipflops BPL und BPH in der Präfix-Steuerschaltung 146 sind direkt mit demjenigen Bit-Feld gekoppelt, das dem im Basis-Präfix bezeichneten Verschieberegister entspricht, und werden geladen, wenn das Flipflop BPE freigegeben ist. Beim nächstfolgenden Befehl wird BPE zusammen mit BPL und BPH gesperrt, und diese Flipflops bleiben solange gesperrt, bis das Flipflop BPE infolge Eintreffens eines Basis-Präfix-Bytes wieder freigegeben wird.
Eine geeignete Unterbrechungssteuerschaltung 148 kann ebenfalls vorgesehen sein, um Unterbrechungsanforderungen zur Verfügung zu stellen und den Zustand der Befehlsausführung zu prüfen, wobei festgestellt wird, wann die CPU 10 eine Unterbrechungsanforderung bestätigt. Die Unterbrechungssteuerschaltung enthält zusammen mit einer anderen, weiter unten beschriebenen Schaltung die Hauptfunktionsblöcke der unteren Steuereinheit 14, deren interne Operation und Kooperation mit der oberen Steuereinheit 12 im folgenden beschrieben werden wird.
Es wird ein 6-Byte-First-in-first-out-Warteschlangen- Befehlspuffer 48 verwendet. Die CPU 10 ist ein Zwei-Stufen-Abruf- Voraussystem. Da kein Vorteil darin besteht, daß die obere Steuereinheit 12 Bytes schneller abruft, als die untere Steuereinheit 14 sie ausführen kann, und da auch kein Nutzen darin besteht, daß die untere Steuereinheit 14 Bytes schneller ausführt als die obere Steuereinheit 12 sie abrufen kann, ist die Warteschlange nur so groß, daß genügend Bytes gespeichert werden, damit die Warteschlange während der langsamen Befehle genügend Bytes abfragen kann, um während der langsamen Befehle einen Durchlauf der schnellen Befehle bei voller Geschwindigkeit zu ermöglichen. Das einzige andere Erfordernis besteht darin, daß wenigstens zwei Bytes der Warteschlange leer sein müssen, bevor ein neuer Befehl abgefragt wird, da 2-Byte-Befehle zulässig sind. Unter Berücksichtigung dieser Faktoren zusammen mit der Ausführungszeit für den gesetzten Befehl ergibt sich eine optimale Warteschlangelänge von sechs. Selbstverständlich können andere Warteschlangenlängen je nach der Art der Befehle und der Ausführungsgeschwindigkeiten der CPU optimal sein.
Die obere Steuereinheit 12 und die untere Steuereinheit 14 sind in ihrer Operation relativ zueinander im wesentlichen unsynchronisiert, obwohl sie beide vom Taktgeber 150 getaktet werden. Die Funktion der oberen Steuereinheit 12 besteht in der Ausführung aller externen Zyklen zur Aufrechterhaltung eines Programmzählers PC 42 und der Verschieberegister 34-40 mit der geeigneten Verschiebung für alle Adressen sowie zur Aufrechterhaltung des 6-Byte-Befehlsstroms der Warteschlange 48. Die untere Steuereinheit 14 führt alle Befehls-, Rücksetz- und Unterbrechungsfolgen aus, liefert Daten und die 16-Bit-Basisadressen zur oberen Steuereinheit 12 und hält die Hauptregisterdatei 78 und das PSW 136 aufrecht. Die Schnittstellenfunktion nach außen ist beinahe ausschließlich Sache der oberen Steuereinheit 12 mit Ausnahme gewisser Unterbrechungsfunktionen, die direkt in der unteren Steuereinheit 14 verarbeitet werden.
Der Mikroprozessor, obwohl im Kern eine 8- oder 16-Bit-Maschine, arbeitet in einem erweiterten Speicherraum, der bei dem beschriebenen Ausführungsbeispiel über eine 20-Bit-Adresse zugegriffen wird. Der Addierer 60, der ein besonderer Addierer ist, führt die Funktion des Addierens der Verschiebungszahl zur Basisadresse und der Erhöhung oder Verringerung der Adressen aus, letztere wenn erforderlich durch eine versetzte 16-Bit-Adresse. Der Addierer dient auch zur Herbeiführung einer Nach-Abruf-Korrektur für eine vorgegebene Adresse und zum Anlegen von Korrekturen an PC 42, was weiter unten genauer beschrieben werden wird.
PC 42 ist nicht ein realer oder echter Programmzähler, da er oder irgendein anderes Register in der CPU 10 nicht den tatsächlichen Ausführungspunkt zu jeder Zeit hält. PC 42 verweist tatsächlich auf das nächste Byte, das in die Warteschlange 48 eingegeben werden soll. Der Realprogramm- bzw. Arbeitsprogrammzähler wird vom Befehl berechnet, wenn ein relativer Sprung oder Aufruf erforderlich wird, durch Subtraktion der Anzahl von zugegriffenen Befehlen, die unbenutzt in der Warteschlange 48 bleiben, vom Befehlszähler 42. Zu beachten ist jedoch, daß bei anderen Ausführungsbeispielen ein echter Programmzähler in der CPU-Organisation gegebenenfalls vorgesehen sein kann.
Der benutzte Speicherraum organisiert digitale Informationen in Bytes. Zwei beliebige aufeinanderfolgende Bytes können gepaart werden, um ein 16-Bit-Wort zu bilden, ohne daß die Notwendigkeit besteht, daß die Bytes an geraden Adressengrenzen gespeichert werden. Die verwendete Konvention besteht darin, daß die am höchsten bewerteten acht Bits des Worts im Byte mit der höheren numerischen Speicheradresse gespeichert werden.
Die Verschieberegister 34-40 dienen zur Gewinnung einer Adresse in einem erweiterten Speicherraum. Vier niederwertige Bits werden an die 16 Bits eines der Verschieberegister angehängt, wodurch die 20-Bit-Basisadresse einer Seite geschaffen wird. Das RC-Register 34 dient als Befehlscode-Verschieberegister; das RD-Adreßregister 36 dient als Datenadreßregister; das RS-Verschieberegister 38 dient als Stapeladreßregister; und das RA-Adreßregister 40 dient als Austauschverschieberegister. Auf die Register kann in der beschriebenen Weise mit dem Basis-Präfix-Befehl und von Blockbewegungsbefehlen zugegriffen werden. Eine 20-Bit-Speicheradresse, die einer 16-Bit-Datenstapel- oder Befehlscode-Adresse entspricht, wird durch Addition einer 16-Bit-Basisadresse zum geeigneten Verschieberegister gewonnen. So wird beispielsweise die Speicherkodeadresse durch Addition der sechzehn Bits des Programmzählers PC 42 mit dem RC-Register 34 gewonnen. Generell sind daher Adreßleitungen A0-A3 direkt von der Registerdatei 32 über den C-Bus 28 abgezweigt, um die am niedrigsten bewerteten vier Bits des ausgewählten Registers, dessen Inhalt mit dem Inhalt des Verschieberegisters addiert wird, direkt zu den Adreß/Daten-Anschlüssen A0-A3 zu koppeln. Die höherwertigen zwölf Bits aus dem gewählten Register werden sodann zu den sechzehn Bits des gewählten Verschieberegisters im Addierer 60 addiert und über die Kreuzschaltung 30 zum Verriegelungs- und Eingabepuffer 26 übertragen. Daher ist der Speicherraum in Seiten von jeweils sechzehn Worten unterteilt, wobei jedes Wort eine Länge von sechzehn Bits hat. Daten werden sodann aus dem Speicher zugegriffen und über den C-Bus 28 zum geeigneten Register der oberen Datei 32, nämlich zu einem der Q-Register 48 übertragen.
Entsprechend einem Befehlssignal, das von der weiter unten genauer beschriebenen Ladeschaltung 130 erzeugt wird, wird eines der Bytes von der Warteschlange 48 zugegriffen und an den Q-Bus 22 angelegt, während die Q-Steuerschaltung 74 die geeignete Abfragegeschwindigkeit und Steuerung der Funktionen der oberen Steuereinheit 12 aufrechterhält. Die drei am geringsten bewerteten Bits des abgerufenen Bytes werden in ein M-Register 104 eingesetzt, dessen Grundfunktion darin besteht, den Quell-Bus-Kode des Hauptoperanden des Befehls zu halten. Das Register 104 setzt das Registerfeld des ersten Bytes in den geeigneten S- und D-Bus-Kode um. In ähnlicher Weise werden die Bits 3-5 in das N-Register 106 geladen, dessen Hauptfunktion darin besteht, den Ziel-Bus-Kode des zweiten Operanden des Befehls zu halten. Das X-Register 108 lädt Bits 3-6 des Byte und nimmt an, daß der Opcode des Befehls ein ALU-Befehlscode ist. Das gesamte Byte wird in das AR-Register 112 geladen. Da einige der Befehle keine ALU-Befehlscodes enthalten und einige Befehle 2-Byte-Befehle sind, sind die Annahmen bezüglich der Bewertung der in Register 104, 106, 108 und 112 geladenen Information manchmal unrichtig. Eine unrichtige Annahme bzw. Rechnung wird später korrigiert, nachdem das in das Befehlsregister 102 geladene Byte vom Gruppendekodier-ROM 116 geeignet dekodiert worden ist. Das Korrekturschema und der Korrekturvorgang werden weiter unten genauer beschrieben.
Die Mikrokodesteuerung besteht hauptsächlich aus einer Haupt-PLA oder einem ROM 114, unterstützt von zwei anderen, nämlich dem Übersetzungs-ROM 122 zum Dekodieren von Mikrokode- Sprungadressen voller Länge und einem Gruppendekodier-ROM 116 zum Dekodieren der Maschinensprachen-Befehlscodes zum Zwecke einer höherstufigen Organisation. Trotzdem werden viele Steuerfunktionen nicht von den ROM's sondern von einer Logik ausgeführt, z. B. die Präfix-Befehle gemäß nachfolgender Beschreibung, Ein-Takt-Nicht-ALU-Befehle, das Befehlscode-Dekodieren, das Richtungs-Bit, das P-Bit, verschiedene Idiosynkrasien (Eigenarten) bei der Flag-Verarbeitung und gewisse Unterschiede zwischen 8- oder 16-Bit-Datenoperationen.
Der in das Register AR eingesetzte Befehlscode wird in eine ROM-Startadresse durch Behandeln der ersten Stufe des ROM 114 als eine PLA übersetzt, wobei der Befehlscode selbst direkt als ROM-Adresse für diese Befehlsmikrocodefolge verwendet wird. Jeder Befehlscode wird im ROM 114 mit einem Raum bzw. Platz für die diesem Befehlscode zugeordnete Mikrokodefolge versehen. Die Befehlscode-Adresse selbst kann wegen der Gefahr des Überlaufs in den Befehlsopcoderaum eines benachbarten Befehlscodes nicht erhöht werden. Daher wird ein 4-Bit-Inkrementierregister 124 addiert und anfänglich auf 0 gesetzt, wenn der Befehlscode in das Register AR 112 geladen wird. Ein neuntes Bit wird zum Register 112 addiert, um mehr Programmraum zu schaffen. Das zusätzliche Bit ARX wird ebenfalls anfangs zurückgesetzt. Ein CR-Register 124 wird sodann über die erlaubten sechzehn getrennten Mikrocodezustände bei jedem Befehl erhöht, während AR fest bleibt und nur durch einen langen Sprung oder einen Rücksprung geändert werden kann. Ein Mikrokode-Unterprogramm wird vom Register 126 zur Verfügung gestellt und in Verbindung mit dem ROM 122 verwendet, der eine 13-Bit lange Sprungadresse von einem durch den ROM 114 über Multiplexer 120 angelegtes 5-Bit-Mikrokode-Identifizierungskennzeichen verschlüsselt.
Das ROM-Mikrokodeprogramm steuert den eigenen Zyklus nicht. Wenn das Mikrokode-Unterprogramm für einen Befehl ausgeführt worden ist, so schaltet der ROM 114 die untere Steuereinheit 14 zurück zur Hauptzeitgabeschaltung, dem Lader 130, dessen Funktion darin besteht, den nächsten Befehl von dem Q-Bus 22 in die geeigneten Register der unteren Steuereinheit zu laden. Wenn die gesamte neue Befehlscode- und Feldinformation in die untere Steuereinheit 14 geladen worden ist und die ROM-Startadresse für den ROM 114 geeignet ausgelöst ist, so gibt der Lader 130 ROM 114 frei und schließt die Steuerung der unteren Steuereinheit 14 an.
Die untere Steuereinheit wechselt daher zwischen einem Vier-Zustands-Hauptzähler, der Ladeschaltung 130, und dem Mikrokode- Haupt-ROM 114. Die Funktion der Ladeschaltung besteht darin, Befehlsbytes mit Befehlscode- und Registerfeldern von der Befehlswarteschlange 48 über den Q-Bus 22 und in die geeigneten Register IR 104, M 104, N 106, X 108 und AR 112 der unteren Steuereinheit zu bewegen. Sobald ROM 114 geeignet ausgelöst ist, läßt die Ladeschaltung 130 den ROM 114 ablaufen durch Heben eines ROM-Freigabesignals ROME auf eine binäre Eins. Der Hauptmikrokode ROM 114 hat keine zulässigen "Aus"-Zustände. Die Ausführung wird durch Rücksetzen von ROME auf Null gestoppt, wodurch die ROM-Ausgangssignale ausgeblendet werden. Das Inkrementregister CR 124 setzt die Zähloperation unabhängig vom Zustand von ROME fort. Wenn ROM 114 arbeitet, muß er das Ende einer Befehlsausführungsfolge abtasten und ein bestimmtes Steuersignal "Abarbeiten des nächsten Befehls" RNI zur Ladeschaltung 130 geben, wodurch angezeigt wird, daß die laufende Folge der Mikrokodebefehle vorbei ist und daß ein neuer Befehl geladen werden soll.
Eine Befehlskodierüberlappung wird von einem anderen bestimmten Steuersignal NXT aufrechterhalten. Wenn ROM 114 das spezielle Vorletzter-Takt-Signal der Mikrokodefolge identifizieren kann, sendet er das Signal NXT zum Lader 130. Dadurch findet eine Überlappung des neuen Befehls mit der Ausführung des letzten Befehls statt, wodurch sich eine Erhöhung des Durchsatzes ergibt. Unter diesen Bedingungen arbeiten die Ladeschaltung 130 und der ROM 114 ohne eine Unterbrechung der ROM-Operation gleichzeitig. Der erste Ausführungstakt des neuen Befehls wird direkt gefolgt von dem letzten Ausführungstakt des vorhergehenden Befehls.
Die Ladeschaltung 130 erzeugt zwei Erkennungszeitgabesignale für jede Folge in der unteren Steuereinheit 14. Diese Signale sind ein erstes Taktsignal FC, das den ersten Schritt eines Ladevorgangs anzeigt, und ein zweites Taktsignal SC, gefolgt von FC bei dem nächsten oder einem späteren Takt, wodurch der zweite Schritt des Ladevorgangs angezeigt wird. Das erste Byte eines Befehlscodes wird bei FC über den Q-Bus 22 getaktet. Ist ein zweites Byte vorhanden, so wird dieses bei SC übertragen. Die Bedeutung von SC ist mehr als das einfache Laden des zweiten Bytes, da das Ausgangssignal des Gruppendekodier-ROM 116 für den gerade geladenen oder eingegebenen Befehl nur während und nach dem Zeitgabesignal SC Gültigkeit hat. Daher erscheint das Zeitgabesignal SC unabhängig davon, wieviele Bytes tatsächlich über den Q-Bus 22 laufen. Das Zustandsdiagramm der Ladeschaltung 130 ist in Fig. 3 schematisch gezeigt und vereinfacht in den folgenden Gleichungen darstellbar:
2 BR ist ein entschlüsseltes Befehlssignal, das vom Gruppendekodier-ROM 116 erzeugt wird und anzeigt, daß der verfügbare Befehl wenigstens zwei Bytes hat und zur Dekodierung die Verwendung von ROM 114 erforderlich macht. MT ist ein von der Q-Steuerschaltung 74 erzeugtes Signal, das anzeigt, daß die Warteschlange 48 leer ist und mehr Bytes abgerufen werden müssen.
Aus Fig. 3 ist zu erkennen, daß die Arbeitsweise der Ladeschaltung 130 auf zwei in herkömmlicher Weise angeordneten Flipflops beruht. Im Nullzustand 152 sind die Flipflops auf (00) gesetzt, die untere Steuereinheit 14 ist nicht in der Ausführungsphase und das erste Byte des neuen Befehls wurde noch nicht festgestellt. Das Zeitgabesignal FC tritt beim Übergang aus dem Nullzustand 152 auf. In der durch (01) definierten ersten Zustandsstufe 154 der Lader-Flipflops wird kein Befehl ausgeführt, das Zeitgabesignal FC für den neuen Befehl ist eingelaufen, während das Zeitgabesignal SC noch nicht entwickelt wurde. SC wird beim Verlassen des ersten Zustandes 154 erzeugt. Wenn das interne Steuersignal, das Ein-Byte-Logiksignal 1 BL vom Gruppendekodier-ROM 116 erzeugt wird, kehrt die Ladeschaltung 130 wieder zum Nullzustand 152 zurück. Das Steuersignal 1BL zeigt an, daß der laufende Befehl als Ein-Byte-Logikbefehl festgestellt wurde, mit anderen Worten, ein Ein-Byte-Befehl, der nicht durch die Verwendung von ROM 114 sondern von einer beliebig wählbaren Logik dekodiert worden ist. Bei Erzeugung des Zeitgabesignals SC und Nichterscheinen von 1BL bewegt sich die Ladeschaltung 130 in den durch den Flipflop-Zustand (10) definierten zweiten Zustand 156. Der zweite Zustand ist der Ablauf- oder Ausführungszustand, in welchem die Zeitgabesignale SC und FC auftreten und die Ladeschaltung 130 auf die Befehlssignale NXT oder RNI von ROM 114 wartet, um anzuzeigen, daß ein neuer Befehl ausgeführt werden soll oder der vorletzte Taktimpuls der Mikrokodefolge ausgeführt worden ist.
Aus der oben angegebenen Logikgleichung ergibt sich folgendes: Wenn im zweiten Zustand entweder die internen Befehlssignale in NXT oder RNI vom ROM 114 erzeugt werden, so wird die Ladeschaltung 130 entweder in den ersten Zustand zurückkehren, dies im Falle der Gültigkeit von RNI, oder wird in den dritten Zustand im Falle des Eingangs von NXT gelangen. Der dritte Zustand 158, definiert durch die Flipflop-Konfiguration (11), ist ein Spiegelbild des ersten Zustandes mit der Ausnahme, daß der vorausgegangene Befehl noch ausgeführt wird. Wenn das Zeitgabesignal FC nicht länger aktiv ist und ROM 114 anzeigt, daß ein neuer Befehl ablaufen soll, kehrt der Lader 130 zum Nullzustand zurück, um den neuen Abruf zu beginnen. Wenn der Befehl im dritten Zustand kein Ein-Byte-Logik-Befehl ist und das Zeitgabesignal SC noch Gültigkeit hat, bedeutet dies, daß der Befehl ein Zwei-Byte-Befehl des ROM-Typs ist oder die Warteschlange 48 nicht leer ist, und der Lader 130 kehrt in den zweiten Zustand zurück. Wenn das Zeitgabesignal SC inaktiv geworden ist, kehrt der Lader 130 auf den ersten Zustand zurück. Andererseits wird der Lader 130 in den Nullzustand versetzt, wobei ROM 116 abgeschaltet und abgeschaltet gehalten wird, wenn der neue Befehl eine Ein-Byte-Logik ist. Die Zeitgabesignale FC und SC werden auch in den verschiedenen Registern der unteren Steuereinheit 14 zum Setzen derjenigen Zeit verwendet, bei der das Register in der gewünschten Funktion entsprechend bekannten Prinzipien arbeitet.
Die Ausführung wird in der erfindungsgemäßen CPU 10 dadurch gesteigert, daß von der informationslosen Instruktion soviel wie möglich beseitigt wird. Mit anderen Worten, die Befehlscodes sind derart zugeordnet, daß in beinahe allen Fällen nur das erste Byte eines Mehrbytebefehls zur Bildung der gesamten Mikrokodeadresse herangezogen wird. Das Zeitgabesignal FC stellt den einzigen Taktimpuls dar, bei dem das erste Byte von der unteren Steuereinheit 14 gelesen wird. Da das Befehlsregister 102 noch seinen vorhergehenden Wert hat, gibt es keine laufende Information in Bezug auf die Art des neuen Befehls. Daher machen alle an den Q-Bus 22 angeschlossenen Register der unteren Steuereinheit eine Wahrscheinlichkeitsannahme zur Art des neuen Befehls und laden aus dem ersten Byte auf dem Zeitgabesignal FC dementsprechend. Genauer gesagt, das Befehlsregister IR 102 lädt normalerweise das erste Byte. Von dem M-Register 104 wird angenommen, daß der Befehl ein Ein-Byte-Befehl ist, und daher baut dieses Register den 16-Bit-Register-Quell-Buscode dadurch auf, daß es die drei am geringsten bewerteten Bits des Bytes 1 als ein Registerfeld nimmt. Im N-Register 106 wird angenommen, daß der Befehl ein Verschieberegisterbefehl ist, wobei ein 16-Bit-Verschieberegister- Ziel-Buskode aus den Bits 3 und 4 des ersten Bytes als Verschieberegisterfeld genommen wird. Das X-Register 108 nimmt an, daß das erste Byte ALU-Befehlscodes in Bits 3-6 haben kann, und lädt diese Bits dementsprechend. Von dem AR-Register 112 und dem CR-Register 124 wird angenommen, daß Byte 1 eine ausreichende Startadresse ist, und Byte 1 wird in das Register AR 112 geladen, das CR-Register 124 wird zurückgesetzt, und der Zugriff zum Mikrokodeplatz in ROM 114 beginnt. Wenn eine erste Annahme unrichtig war, wird sie beim Zeitgabesignal SC korrigiert, da zu diesem Zeitpunkt das Ausgangssignal des Gruppendekodier-ROM 116 zur Verfügung steht, und zwar in Form bestimmter, an ausgewählte Dekodierer und die oben genannten Register angelegten Befehlssignale, welche das Bitfeld gegebenenfalls unter einer anderen Interpretation neu dekodieren.
Die beschriebene CPU 10 hat neun verschiedene Adressierungsarten. Der Speicherplatz eines Operanden in einem erfindungsgemäß verwendeten Befehl wird von verschiedenen Feldern in dem Befehl spezifiziert. Diese Felder weisen im besonderen ein Registerfeld oder eine Kombination eines Modenfeldes und eines R/M-Feldes auf. Das Registerfeld ist ein 3-Bit-Feld, welches eines der 8- oder 16-Bit-Register als Adreß- bzw. Speicherplatz des Operanden und daher des ersten von zwei Adressierungsmoden bezeichnet. Das Register/Speicher-Feld oder R/M-Feld ist ein 3-Bit-Feld im Befehl, das ein 8- oder 16-Bit-Register für den Operanden bezeichnet. Die drei Bits bezeichnen acht Arten, in denen gewisse Register zum Operandenzugriff in möglicher Kombination mit zwei Distanzbytes im Befehl verwendet werden können. Das Modenfeld ist ein 2-Bit-Feld im Befehl, welches angibt, ob der Operand im bezeichneten Register oder an einem durch den Registerinhalt bezeichneten Speicherplatz befindlich ist, und welches die Verarbeitung von etwa vorhandenen Distanzbits angibt. Insbesondere kann ein bezeichnetes Register entweder der Speicherplatz des Operanden sein oder auf den Adressenplatz des Operanden im Speicher hinweisen. Ein W- oder Wortfeld ist ein Ein-Bit-Feld im Befehl, das in Kombination mit einem der Modenfeldkodes spezifiziert, ob der Operand eine Byte- oder Wortmenge ist. Ein beliebiges der Register und eine Kombination der 8-Bit-Register in der unteren Hauptregisterdatei 78 kann der Speicherplatz sein und bestimmte Register können auf den Platz des Operanden im Speicher hinzeigen, der im Befehl spezifiziert ist. Wenn erforderlich, d. h. wenn der Befehl ein 2-Bit-ROM-Befehl ist und den Operanden von einem Platz im Speicher gewinnt, wird ein automatisches Adreßunterprogramm von der Ladeschaltung 130 beim Takt SC ausgelöst. Die von dem Adreßunterprogramm gefolgten Schritte sind im wesentlichen ähnlich einem normalen langen Sprung, bei dem die Mikrokode-Adresse in der Regel erhalten bleibt, mit der Ausnahme, daß der Datenfluß in das und aus dem AR-Register 112, dem CR-Register 124 und dem SR-Register 126 unter der Steuerung der Ladeschaltung 130 und nicht des ROM 114 steht. Die Moden- und Register/Speicher-Felder werden aus dem Q-Bus 22 über den Multiplexer 120 direkt in den Übersetzungs-ROM 122 geladen, um durch eine direkte Dekodierung eine von neun Unterprogramm-Mikrokode-Startadressen zu gewinnen. Als Folge davon wird der adressierte Operand automatisch in die richtigen oberen Dateiregister, gewöhnlich das OPR-Register 46 geladen, und zwar in der gleichen Weise wie vorstehend beschriebener normaler Befehlsabruf.
Die Operationsweise und Organisation des Mikroprozessors können dadurch besser verständlich gemacht werden, daß die Ausführung einer Anzahl charakteristischer Befehle im folgenden genau beschrieben wird.
Die CPU 10 kann sogenannte Kettenbefehle ausführen, die aus einer Gruppe primitiver Ein-Byte-Befehle bestehen, welche entweder einmal oder wiederholt ausgeführt werden. In wiederholter Operationsweise ermöglichen die Kettenbefehle eine Maschinenausführung - im Gegensatz zu einer typischen Programmausführung - einer vollständigen Sequenz- oder Schleifenoperation. Bei einer Einzeloperation ermöglichen die Kettenbefehle das Schreiben einer engen Programmschleife (software loop), die zur Ausführung komplexerer Kettenbefehle verwendet werden kann. Alle primitiven Kettenbefehle verwenden BC-Register 84 bzw. 92 als Schleifenzähler und IJ-Register 103 und, wenn nötig, IK-Register 105 als Hinweisadressen auf Operanden im Speicher. Wenn ein Richtungskennzeichen im PSW 136 gelöscht worden ist, werden die Operanden-Zeiger nach Gebrauch inkrementiert, da sie anderenfalls automatisch von ALU 134 dekrementiert werden. Andere Programmbefehle sind im Befehlsvorrat zum Setzen oder Löschen des Richtungskennzeichens in PSW 136 vorgesehen.
Die primitiven Kettenbefehle sind ÜBERTRAGEN, VERGLEICHEN, SUCHEN, LADEN und SPEICHERN. Der Befehl ÜBERTRAGEN führt zur Übertragung einer Zeichenkette von einem Speicherblock zu einem anderen. Der Befehl VERGLEICHEN ermöglicht einen Vergleich von zwei Zeichenketten, um festzustellen, nach welchem Zeichen die Reihen bzw. Sequenzen ungleich werden, was dazu beiträgt, eine lexigraphische Ordnung zwischen den Reihen bzw. Sequenzen herzustellen. Der Befehl SUCHEN ermöglicht das Suchen eines vorgegebenen Zeichens in einer Zeichenkette. Der Befehl SPEICHERN dient dazu, einen vorgegebenen Wert in eine Zeichenkette einzuführen. Typischerweise werden die Befehle SPEICHERN und LADEN als Befehls-Bausteine zur Bildung enger Programmschleifen verwendet, welche komplexe Zeichenreihenbefehle durchführen. Jeder dieser primitiven Befehle bietet die Möglichkeit, Wörter ebenso wie Zeichen oder Bytes zu verarbeiten. Eingeschlossen unter den Zeichenreihenbefehlen ist ein Präfix bzw. Vorsatz, WIEDERHOLEN, der eine rasche Schleifensteuerung in einer wiederholten Reihenoperation ermöglicht. Einem jeden der primitiven Befehle kann der Ein-Byte-Präfix WIEDERHOLEN vorangestellt werden, wodurch der Befehl solange wiederholt wird, wie die Schleifenzählung nicht null ist. Die Prüfung der Schleifenzählung erfolgt vor und nicht nach jeder Wiederholung der Schleife, so daß der Anfangsschleifenwert von null die Ausführung von primitiven Zeichenreihenbefehlen verhindert. Während jeder Schleifenwiederholung wird der Schleifenzähler dekrementiert. Während der Wiederholung eines Zeichenreihenbefehls bleibt der PC-Programmzähler 42 hinweisend auf das Wiederholungspräfixbyte und wird solange nicht auf den neuesten Stand gebracht, bis die letzte Wiederholung des Zeichenreihenbefehls erfolgt ist. Dies ermöglicht zusammen mit der fortlaufenden Aktualisierung der Operanden-Zeiger und des Zählregisters, daß der wiederholte Befehl nach einer Unterbrechung in richtiger Weise wieder aufgenommen wird. Eine externe Unterbrechung ist vor jeder Wiederholung des primitiven Kettenbefehls möglich.
Ein Schleifenbefehl bewirkt die gleiche Steuerung wie der Wiederholungspräfix, jedoch in engen Programmschleifen zur Ausführung komplexer Reihenoperationen. Ein Schleifenbefehl erniedrigt den Schleifenzählwert im Register BC und führt einen relativen Sprung, typischerweise zum Start der Schleife aus, wenn entweder der Zählwert nicht null geworden ist oder das Null-Kennzeichen von PSW 136 nicht einen speziellen Sollwert hat. Es gibt auch eine Form eines Schleifenbefehls, bei dem das Null-Kennzeichen nicht geprüft wird. Der Schleifenbefehl ist typischerweise am Ende der Schleife angeordnet und prüft nach jeder Schleifenausführung auf Schleifenwiederholungen.
Dies bedeutet, daß die Schleife noch ausgeführt wird, wenn die Schleifenzählwerte anfänglich null waren. Ein ÜBERSPRING- Befehl wird eingeführt, um unerwünschte Wiederholungen zu verhindern. Ein ÜBERSPRING-Befehl führt einen relativen Sprung aus, wenn das Register BC eine Null enthält, wobei der Inhalt von BC nicht geändert wird. Übersetzen (XLAT) ist eine andere primitive Zeichenreiheninstruktion, die als Baublock in engen Schleifen verwendet wird. Der XLAT-Befehl ermöglicht einen Byte- Abruf aus einer zu übersetzenden Zeichenreihe vor dem Speichern des Byte in einer zweiten Zeichenreihe oder dessen Vergleich mit einem vorgegebenen Byte. Das Übersetzen erfolgt durch Verwendung des Werts im A-Register zum Indizieren in eine Tabelle, auf die vom HL-Register 88 und 96 hingewiesen ist. Der aus der Tabelle gewonnene umgesetzte Wert ersetzt dann den im A-Register 90 anfangs enthaltenen Wert.
Der Maschinensprachenkode für die Zeichenreihenbefehle ist nachfolgend zusammengefaßt:
Tabelle 1 Zeichenreihenbefehle (String-Befehle)
Befehl LADEN
Kurzbezeichnung:
LDS (w=0)
LDSW (=1)
Beschreibung:
Wenn w=0 dann ((IJ)) → (A)
sonst ((IJ))+1,(IJ)) → (XA)
wenn (Richtung)=1 dann (IJ)-(1+w) → (IJ)
sonst (IJ)+(1+w) → (IJ)
Beteiligte Kennzeichen (Flags):
Keine
Befehl SPEICHERN
Kurzbezeichnung:
STS (w=0)
STSW (w=1)
Beschreibung:
Wenn w=0 dann (A) → ((IK))
sonst (XA) → ((IK))+1,(IK))
wenn (Richtung)=1 dann (IK)-(1+w) → (IK)
sonst (IK)+(1+w) → (IK)
Beteiligte Kennzeichen (Flags):
Keine
Befehl VERGLEICHEN
Kurzbezeichnung:
CMPS (w=0)
CMPSW (w=1)
Beschreibung:
Wenn w=0 dann ((IJ))-((IK))
→ nirgendwohin, aber Kennzeichen (Flags) sind gesetzt
sonst ((IJ)+1,(IJ))-((IK)+1,(IK))
→ nirgendwohin, aber Kennzeichen (Flags) sind gesetzt
wenn (Richtung)=1 dann
(IJ)-(1+w) → (IJ)
(IK)-(1+w) → (IK)
sonst
(IJ)+(1+w) → (IJ)
(IJ)+(1+w) → (IK)
Kennzeichen (Flags):
ÜBERTRAG, HILFSÜBERTRAG, VORZEICHEN, NULL, PARITÄT, ÜBERLAUF
Befehl SUCHEN
Kurzbezeichnung:
SRCHS (w=0)
SRCHSW (w=1)
Beschreibung:
Wenn w=0 dann (A)-((IK))
→ nirgendwohin, aber Kennzeichen (Flags) gesetzt
sonst (XA)-((IK)+1,(IK))
→ nirgendwohin, aber Kennzeichen (Flags) gesetzt
wenn (Richtung)=1 dann (IK)-(1+w) → (IK)
sonst (IK)+(1+w) → (IK)
Beteiligte Kennzeichen (Flags):
ÜBERTRAG, HILFSÜBERTRAG, VORZEICHEN, NULL, PARITÄT, ÜBERLAUF
Befehl ÜBERTRAGEN
Kurzbezeichnung:
MOVS (w=0)
MOVSW (w=1)
Beschreibung:
Wenn w=0 dann ((IJ)) → ((IK))
sonst ((IJ))+1,(IJ)) → ((IK)+1,(IK))
wenn (Richtung)=1 dann
(IJ)-(1+w) → (IJ)
(IK)-(1+w) → (IK)
sonst
(IJ)+(1+w) → (IJ)
(IK)+(1+w) → (IK)
Beteiligte Kennzeichen (Flags):
Keine
Wiederholungspräfix
WIEDERHOLEN:
Beschreibung:
Während (BC)<<0
Unterbrechung eines laufenden Programms (pending service) hier Durchführung eines primitiven Kettenbefehls in nachfolgendem Byte
(BC)-1 → (BC)
wenn primitiver Befehl ein solcher ist, der die NULL-Marke beeinflußt und (NULL)<<z
dann Ausgang "while" Schleife
end-of-while
(PC)+2 → (PC)
SCHLEIFE
Kurzbezeichnung:
LP
Beschreibung:
(BC)-1 → (BC)
wenn (BC)<<0 dann
(PC)+Verschiebung → (PC)
wobei "Verschiebung" eine vorzeichenbehaftete 8-Bit-Zahl ist
Beteiligte Kennzeichen (Flags):
Keine
ÜBERSPRINGEN
Kurzbezeichnung:
SKP disp
Beschreibung:
Wenn (BC)=0 dann (PC)+Verschiebung → (PC)
wobei die "Verschiebung" eine vorzeichenbehaftete 8-Bit-Zahl ist
Beteiligte Kennzeichen:
Keine
Enge Schleifenbefehle
UMSETZEN:
Kurzbezeichnung:
XLAT
Beschreibung:
((HL)+(A) → (A)
Beteiligte Kennzeichen:
Keine
Schleifen und Prüf-Null
Kurzbezeichnung:
LPW disp für z=1 (bedeutet Schleife "während")
LPU disp für z=0 (bedeutet Schleife "bis")
Beschreibung:
(BC)-1 → (BC)
wenn (NULL)=z und (BC)<<0 dann
(PC)+Verschiebung → (PC)
wobei die "Verschiebung" eine vorzeichenbehaftete 8-Bit-Zahl
ist
Beteiligte Kennzeichen:
Keine
Wie aus der allgemeinen Form gesehen werden kann, besteht der primitive Zeichenreihenbefehl aus einem Byte mit einem 7-Bit- Befehlscode und einem w-Bit, das kennzeichnet, ob der Reihenbefehl ein Zeichen oder ein Byte (w=0) oder ein Wort (w=1) verarbeitet.
Betrachtet wird das folgende Beispiel als Benutzung von Zeichenreihenbefehlen (spring instructions) zum Schreiben einer engen Programmschleife. Die Aufgabe besteht darin, eine Folge von Eingangszeichen solange abzutasten, bis ein Zeichen festgestellt wird, das nicht alphanumerisch ist. Das IJ-Register 103 wird initialisiert und weist auf den Beginn der Eingangskette, und das Register BC wird initialisiert, um die Länge der Eingabezeichenfolge aufzunehmen. Das Richtungskennzeichen wird im PSW 136 gelöscht, und das HL-Register wurde mit der ersten Adresse einer Umsetztabelle geladen. Die Umsetztabelle enthält ein Byte für jedes mögliche Zeichen. Jedes alphanumerische Zeichen ist einem speziellen, beliebig wählbaren Kode zugeordnet. Dieser gleiche Kode wird in das E-Register 94 eingegeben. Die Programmschleife, welche einen Zeichenreihenbefehl zum Abtasten nach einem ersten nicht-alphanumerischen Zeichen benutzt, ist wie folgt:
Das oben angegebene Programm löst die folgenden Operationen aus: Bei dem Befehl SKP X1 springt das Programm auf X1, wenn das Zählregister Null ist, indem die vom SKIP-Befehl angezeigte Verschiebung X1 zum Programmzähler addiert wird, wie aus der obigen Tabelle 1 zu ersehen ist. Wenn der Inhalt des Zählers nicht Null ist, so wird das nächste Byte, nämlich der Ladebefehl LDS zugegriffen. Wie sich aus Tabelle 1 ergibt, wird der durch den Inhalt des Registers IJ, d. h. das erste Zeichen in der Eingabereihe der Zeichen, bezeichnete Inhalt des Speicherplatzes in das A-Register oder den Akkumulator 90 geladen. Das in den Akkumulator geladene Zeichen wird sodann zu der im Register HL enthaltenen ersten Adresse der Umsetztabelle zur Bildung einer Speicheradresse addiert. Diese Adresse ist der Platz in der Umsetztabelle, welcher dem aus der Zeichen-Eingabefolge gelesenen Zeichen entspricht. Der Kode, in den das Zeichen umgesetzt wird, wird sodann von diesem Platz bzw. dieser Adresse zurückgeholt und in den Akkumulator 90 eingegeben. Der Vergleichsbefehl CMP A, E subtrahiert definitionsgemäß den Inhalt des Registers E vom Inhalt des Registers A, das zuvor mit dem alphanumerischen umgesetzten Kode geladen war. Wenn das erste Zeichen der Zeichenfolge kein alphanumerischer Kode ist, so führt die Subtraktion zu einer positiven oder negativen Zahl ungleich Null. Wenn das erste Zeichen jedoch gleich einem alphanumerischen Kode ist, so ist die Summe Null, wodurch ein Null-Kennzeichnungsbit im PSW 136 beeinflußt wird. Der Schleifen- und Prüf-Null-Befehl LPW subtrahiert Eins vom Inhalt des Zählregisters BC. Wenn das Nullkennzeichen gesetzt ist und das BC-Register noch niocht Null ist, so wird die im Schleifen- und Prüf-Null-Befehl enthaltene Verschiebung X2 zum Programmzähler addiert und in den Programmzähler wieder eingesetzt. Da die Distanzadresse eine negative Zahl sein kann, kann der Programmzähler durch eine geeignete Anzahl von Bytes dazu gebracht werden, daß er beim ersten Schritt mit dem Ladebefehl LDS das Programm wieder aufnimmt. Es ist zu beachten, daß die Ladebefehlsfolge LDS das IJ-Register 103 um Eins erhöht, da angenommen wurde, das W=0. Infolgedessen wird das nächste zeichen aus der Eingabezeichenfolge zum Vergleich in den Akkumulator geladen.
Es sei nun die Situation betrachtet, bei der ein Suchbefehl an einer Zeichenreihe ausgeführt werden soll, um ein vorgegebenes Zeichen zu identifizieren. Diese Situation tritt während einer gewöhnlichen Operation bei der Durchsicht und Identifizierung spezieller Daten in einer Suchdatei auf. Um dies durchzuführen, wird das Register IK initialisiert, um den Beginn der zu untersuchenden Datei von Eingangszeichen anzuzeigen, BC wird initialisiert, um die Länge der Eingabedatei zu speichern, und ein Rücksetzkennzeichen wird gelöscht. Die Maschinenschleife besteht einfach in folgendem:
Der Sprungbefehl führt zum Überspringen der Schleife, wenn das Zählerregister BC Null ist. Ist dies nicht der Fall, wird das Wiederholungspräfix RPT gelesen, das anzeigt, daß solange das BC-Register nicht Null ist, der primitive nachfolgende Ketenbefehl auszuführen ist, und daß nur dann, wenn das Nullkennzeichen und Z-Bit des Wiederholungsbefehls gleich sind, die Schleife bei X1 verlassen werden soll. Nach dem Verlassen der Schleife wird der Programmzähler um 2 erhöht bzw. weitergeschaltet. In dem beschriebenen Ausführungsbeispiel ist der dem Wiederholungspräfix folgende primitive Zeichenreihenbefehl der Befehl SUCHEN, der den Inhalt des A-Registers 90, in das das gesuchte Zeichen geladen worden ist, nimmt und ihn vom Inhalt der vom IK-Register 105 bezeichneten Adresse oder Stelle subtrahiert. Solange diese beiden Zeichen unterschiedlich sind, ist der Unterschied ungleich Null und das Nullkennzeichen (Null-Flag) bleibt unberührt. Daher ist zu sehen, daß eine "Maschinenschleife" durch Verwendung des Wiederholungspräfix geschrieben werden kann. Die Zeichenreihenbefehle können in "Maschinen" Schleifen und in engen Programmschleifen verwendet werden, da die einfachen Befehle VERGLEICHEN, SUCHEN, LADEN und SPEICHERN jeweils eine Inkrementier- oder Dekrementierfunktion unter den ausgeführten Operationen enthalten. Die Mikrokodestruktur jedes der Reihenzeichenbefehle wird nachfolgend genauer beschrieben.
Dezimalbefehle werden von der CPU 10 sowohl in Form eines gepackten Binär-Dezimal-Kodes (BCD) als auch in ungepackter BCD-Form verarbeitet. Gepackte BCD-Befehle befassen sich mit BCD-Informationen, welche so kodiert ist, daß sie zwei Dezimalziffern pro Byte enthält. Ungepackte BCD-Digitalinformationen enthalten eine Dezimalziffer pro Byte. Der ASCII-Kode ist ein besonderer Fall der ungepackten BCD-Form. Die ASCII-Informationen liegen in Byteform vor und werden derart kodiert, daß die vier am höchsten bewerteten Bits des Bytes nur das Paritätsbit und der Kode 011 sind, der ausdrückt, daß die folgende Information ein numerisches Zeichen darstellt. Die am geringsten bewerteten vier Bits des ASCII-Bytes stellen in einem solchen Fall die binär kodierte Dezimalzahl dar. Die erfindungsgemäße CPU 10 ist zur Ausführung arithmetischer Operationen bezüglich der ASCII-Informationen besser und leichter befähigt als herkömmliche Prozessoren. Die Basis der ASCII-Befehle dreht sich um einen eingestellten Zyklus. Additions- und Subtraktionseinstellung nach einem ASCII-Befehl ist ähnlich der entsprechenden gepackten BCD-Einstellungen, mit der Ausnahme, daß das X-Register aktualisiert wird, wenn eine Anpassung an den Akkumulator, das Register A, erforderlich ist. Betrachtet werden die Additions- und Subtraktionseinstellungen entsprechend der nachfolgenden Tabelle 2.
Tabelle 2
ASCII Addition a+b → c
0 → (ÜBERTRAG)
DO i=1 nach N
(a[i] → (A)
(A)+(b[i]) → (A)
wobei "+" Addition mit Übertrag bezeichnet
Additionseinstellung (A) → (XA)
(A) → (c [i])
ASCII Subtraktion a-b → c
0 → (Übertrag)
DO i-1 nach N
(a [i]) → (A)
(A)-(b [i]) → (A)
wobei "-" Subtraktion mit Ausborgen bezeichnet
Subtrahieren-Einstellung (A) → (XA)
(A) → (c [i])
ASCII (ungepackter BCD) Einstellung für Addition
Kurzbezeichnung:
AAA
Beschreibung:
Wenn (A). Low-Tetrade<9 oder (HILFSÜBERTRAG) = 1 dann
(A) + 6 → (A)
(X) + 1 → (X)
1 → (HILFSÜBERTRAG)
(HILFSÜBERTRAG) → (ÜBERTRAG)
(A) AND OFH → (A)
Beteiligte Kennzeichen (Flags):
ÜBERTRAG, HILFSÜBERTRAG, VORZEICHEN, NULL, PARITÄT auf der Basis von (A) ÜBERLAUF undefiniert
ASCII (ungepackter BCD) Einstellung für Subtraktion
Kurzbezeichnung:
AAS
Beschreibung:
Wenn (A). low-Tetrade<9 oder (HILFSÜBERTRAG) = 1, dann
(A) - 6 → (A)
(X) - 1 → (X)
1 → (HILFSÜBERTRAG)
(HILFSÜBERTRAG) → (ÜBERTRAG)
(A) AND OFH → (A)
Beteiligte Kennzeichen bzw. Marken:
ÜBERTRAG, HILFSÜBERTRAG, VORZEICHEN, NULL, PARITÄT auf der Basis von (A), ÜBERLAUF undefiniert
A und B stellen zwei Mehrfach-ASCII-Zeichen-Zahlen dar. N stellt die Anzahl von ASCII-Zeichen in der längeren der beiden Zahlen dar. In dem ASCII-Additionsbefehl wird die Übertragsmarke zuerst auf Null gesetzt und danach in die Schleife eingetreten. Beginnend mit dem ersten Zeichen der ASCII-Zahlen wird das erste Zeichen in ein A-Register oder einen Akkumulator 90 geladen. Das erste Zeichen der zweiten Summe wird sodann mit dem Inhalt des Akkumulators 90 in einer Addier-Mit-Übertrag- Operation addiert. Offensichtlich sind die am höchsten bewerteten vier Bits (oberes Halbbyte) eine bedeutungslose Summe, da sie die Addition von zwei ASCII-Kodes und das Paritätsbit für jedes zeichen darstellen. Eine Überschuß- Sechs-Kode-Einstellung wird durch Prüfung des unteren Halbbytes des Akkumulators 90 durchgeführt, um festzustellen, ob die Zahl dort größer als 9 ist, oder ob die Hilfsübertragsmarke in PSW 136 gesetzt worden ist. Ist dies der Fall, so wird sechs zum Inhalt des Akkumulators 90 und Eins zum Inhalt des X-Registers 82 addiert. Das Kennzeichen HILFSÜBERTRAG wird sodann gesetzt, und das Übertrags-Flag wird mit HILFSÜBERTRAG in Übereinstimmung gebracht. Der Inhalt des Akkumulators 90 wird sodann mit der Hexidezimalzahl OF in einer UND-Funktion logisch kombiniert, um das Halbbyte hoher Ordnung auf Null zu setzen und das Halbbyte niedriger Ordnung, welcher die bedeutsame numerische Information enthält, zu übertragen. Der Inhalt des Akkumulators 90 wird sodann in dem der Summe für dieses Zeichen entsprechenden Platz gespeichert. Die Schleife wiederholt dann die Operation für die ASCII-Zeichen nächst höherer Ordnung der Summanden.
In ähnlicher Weise läuft die in Tabelle 2 gezeigte ASCII- Subtraktion ab. Die Subtraktionseinstellung erfolgt in einem Überschuß-Sechs-Kode in der gleichen Weise wie die Einstellung der Addition mit der Ausnahme, daß eine sechs vom Inhalt des Akkumulators 90 abgezogen und der Inhalt des X-Registers 82 um Eins verringert wird. Es ist zu erkennen, daß weder im Subtraktions- noch im Additionsprogramm gemäß Tabelle 2 der Inhalt des X-Registers 82 bewertet wird (figure in). Jedoch wird die Additionseinstellung in dem ASCII-Multiplikationsschema in einer in der Tabelle 3 schematisch dargestellten Weise verwendet.
Die ASCII-Befehle sind besonders günstig bezüglich der Multiplikation und Division. Betrachtet wird beispielsweise das Multiplikationsunterprogramm entsprechend Tabelle 3.
Tabelle 3
ASCII-Multiplikation a · b → c
(b) AND OFH → (b)
0 → - (c[1])
DO i = 1 nach N
(a[i]) AND OFG → (A)
(A) · (b) → (XA)
Multipliziereinstellung (A) → (XA)
(A) + (c[i]) → (A)
Addierstellung (A) → (XA)
(A) → (c[i])
(X) → (c[i+1])
ASCII-Division a/b → c
(b) AND OFH → (b)
0 → (X)
DO i = N nach 1
(a[i]) AND OFH → (A)
Divisionseinstellung (XA) → (A)
(A)/(b) → (A)
mit Quotient nach (X)
(A) → (c[i])
ASCII-Einstellung für Multiplikation
Kurzbezeichnung:
AAM
Beschreibung:
(A)/10 → (X)
(A) mod 10 → (A)
Beteiligte Kennzeichen (Flags):
ÜBERTRAG, HILFSÜBERTRAG undefiniert, VORZEICHEN, NULL, PARITÄT basierend auf (A), ÜBERLAUF undefiniert
ASCII-Einstellung für Division
Kurzbezeichnung:
AAD
Beschreibung:
(X) · 10 + (A) → (A)
0 → (X)
Beteiligte Kennzeichen (Flags):
ÜBERTRAG, HILFSÜBERTRAG undefiniert, VORZEICHEN, NULL, PARITÄT basierend auf (A), ÜBERLAUF undefiniert
Die ASCII-Zahl b wird in einer UND-Funktion mit der Hexidezimalzahl OF kombiniert, um die am höchsten bewerteten vier Bits zu Null zu machen. Der Inhalt des c(1) Platzes, das Produkt, wird auf Null gesetzt. In die Schleife wird dadurch eingetreten, daß die am höchsten bewerteten vier Bits des ASCII-Multiplikanden zu Null gemacht und das Ergebnis in den Akkumulator 90 gesetzt wird. Die in Tabelle 3 angegebene Routine ist ein Programm, welches einen Mehr-Zeichen-Multiplikanden mit einem Einzelzeichen-Multiplikator multipliziert. Für Mehr-Zeichen-Multiplikatoren müßte die Routine zur Gewinnung einer Mehrzahl von Produkten wiederholt werden, wobei dann die so gewonnenen Produkte in geeigneter Form entsprechend dem üblichen Multiplikationsalgorithmus für Dezimalzahlen kombiniert werden.
Der Inhalt des Akkumulators 90 wird sodann mit dem ASCII- Multiplikator multipliziert und das Produkt in das 16-Bit- XA-Register 82 und 90 geladen. Das 16-Bit-Binär-Produkt wird sodann einem Multipliziereinstellungs-ASCII-Befehl unterworfen. Eine Multiplikationseinstellung AAM teilt zunächst den Inhalt des Akkumulators 90 durch 10 und gibt das Ergebnis in das X-Register 82. Der Inhalt des Akkumulators 90 wird dann auf Modulo 10 reduziert, um den Rest der Division in den Akkumulator 90 einzugeben. Das Ergebnis ist, daß das Produkt von b mit der Zahl a(1) in ungepackter BCD-Form im 16-Bit-Register XA zur Verfügung steht. Der Inhalt des Akkumulators 90 wird sodann zum Produkt c(1) zuaddiert, das beim ersten Durchlauf durch die Schleife auf null gesetzt worden ist. Die Ergebnisse der Summe werden in den Akkumulator 90 zurückgeladen. Eine binäre Summe ergibt sich jetzt im Akkumulator 90 und wird durch eine Additionseinstellung AAA der oben beschriebenen Art auf die ungepackte BCD-Form eingestellt. Der Inhalt des Akkumulators 90 wird dann in den c(1) Platz geladen und der Inhalt des X-Registers 82 wird in den c(2) Platz bzw. in die c(2) Adresse geladen.
Die DO-Schleife wird durch Multiplizieren des zweiten Zeichens a(2) mit dem Multiplikator und Einsetzen des Produkts in das 16-Bit-Register XA wiederholt. Der Multiplikationseinstellbefehl setzt den Inhalt des Akkumulators 90 in eine ungepackte BCD-Form um und lädt das Register XA mit dem Ergebnis. Der Inhalt des Akkumulators 90 wird sodann zum Inhalt des Platzes bzw. der Zelle c(2) addiert, der bzw. die den Übertrag von der vorhergehenden Multiplikation enthält. Das Ergebnis wird in den Akkumulator 90 geladen. Da die binäre Summe neun übersteigen kann, folgt der vorgeschriebene Additionseinstellbefehl mit dem im Register XA erscheindenden BCD-Ergebnis. Die Erhöhung des X-Registers 82 überträgt automatisch einen Übertrag von der BCD-Einstellung. Die Ergebnisse im X-Register 82 und Akkumulator 90 werden in die geeigneten Produktplätze bzw. -zellen geladen.
Daher wird der Inhalt des X-Registers 82, der für die ASCII- Additionsroutine unwesentlich war, zu einem integralen Bestandteil der ASCII-Multiplikationsroutine über den Additionseinstellbefehl.
Die ASCII-Routine für die Division ist in ähnlicher Weise in Tabelle 3 gezeigt und besteht aus einer DO-Schleife, die von dem Zeichen höchster Ordnung zu demjenigen niedrigster Ordnung wiederholt wird. Die Routine zeigt einen Ein-Zeichen- Divisor und einen Mehr-Zeichen-Dividenden. Die in Tabelle 3 gezeigte Routine kann in geeigneter Weise als Unterprogramm in einem größeren Schema zum Aufnehmen von Mehr-Zeichen- Divisoren entsprechend bekannten Prinzipien verwendet werden. Der Teil höherer Ordnung des ASCII-kodierten Divisors wird zunächst zu null gemacht. Das X-Register 82 wird in ähnlicher Weise auf null gesetzt. Dann wird in die DO-Schleife eingetreten, beginnend mit dem am hächsten bewerteten Zeichen. Das Zeichen höchster Ordnung des Dividenden, a(N) ist in den am höchsten bewerteten Bits in ähnlicher Weise auf null gesetzt und wird in den Akkumulator 90 geladen. Ein ASCII-Befehl Divisionseinstellung AAD wird danach mit Bezug auf den Inhalt des Registers XA ausgeführt.
Die Einstellung bzw. das Programm zur Division nimmt zuerst den Inhalt des X-Registers 82 und multipliziert ihn mit 10 und addiert das Produkt zum Inhalt des Akkumulators 90 und setzt das Ergebnis in den Akkumulator 90 ein. Mit anderen Worten, die ungepackte BCD-Kode-zahl wird in binäre Form umgesetzt und in den Akkumulator 90 eingesetzt. Nullen werden wiederum in das X-Register 82 geschreiben. Der Divisor wird sodann in den Inhalt des Akkumulators 90 unterteilt, wobei der Quotient in den Akkumulator 90 und der Rest in das X-Register 82 kommt. Der Inhalt des Akkumulators 90, der Quotient, wird sodann in einen geeigneten Platz bzw. eine geeignete Zelle für das höchste Zeichen des Quotienten geladen. Der Zahlwert wird verringert und das nächstniedrigere ASCII-Zeichen wird in den Akkumulator 90 geladen. Der Inhalt des Registers XA wird wiederum einer Divisionseinstellung in der oben beschriebenen Weise unterworfen, um das binäre Äquivalent in den Akkumulator 90 einzugeben. Die Division wird durchgeführt, wobei das Ergebnis in die geeigneten Quotientenzelle geladen und der Rest wieder in das X-Register 82 für ein eventuelles nächstniedrigeres Zeichen eingesetzt wird.
Zu beachten ist, daß in den Multiplikations- und Divisionsroutinen die Multiplikationseinstell- und Divisionseinstellschritte relativ zur tatsächlichen Multiplikation oder Division in einer anderen Folge ablaufen. Die tatsächliche arithmetische Operation wird in binärer Form durchgeführt. Da der ASCII-Kode ein ungepackter BCD ist und für die tatsächliche Berechnungauf null gesetzt wird, sind die Zahlen tatsächlich in binärer Form, und die Multiplikationseinstellung braucht nur nach der Gewinnung des Produkts durchgeführt zu werden. Da der Rest einer Division jedoch nach jeder Zeichendivision in das X-Register 82 eingesetzt wird, muß eine Divisionseinstellung in jedem Fall vor der Ausführung der tatsächlichen Division vorgenommen werden. Das Mikrokode-Format für die ASCII-Einstellbefehle wird weiter unten genauer beschrieben.
Die erfindungsgemäße CPU verwendet auch ein zusätzliches Bit im Befehlscode in zwei Klassen von Befehlen. Ein d-Bit wird in den Befehlscode in der Klasse von zwei Operandenbefehlen und ein l-Bit wird in den Befehlscode in der Klasse von Direktdatenbefehlen einbezogen. Betrachtet wird beispielsweise der Additionsbefehl, der in Tabelle 4 unten in tabellarischer Form gezeigt ist.
Tabelle 4
Befehlsdetails
ADDIEREN
Kurzbezeichnung:
ADD reg,ea (w = 0)
ADDW reg,ea (w = 1)
umgekehrt ea und reg wenn d = 1
Beschreibung:
Wenn w = 0 dann
wenn d = 1 dann (REG8) + (EA8) → (REG8)
sonst (EA8) + (REG8) → (EA8)
sonst
wenn d = 1 dann (REG16) + (EA16) → (REG16)
sonst (EA16) + (REG16) → (EA16)
Beteiligte Kennzeichen (Flags):
ÜBERTRAG, HILFSÜBERTRAG, VORZEICHEN, NULL, PARITÄT, ÜBERLAUF
Die sechs am höchsten bewerteten Bits des Befehlscodes liefern in besonderer Weise die Additionsbefehl-Befehlscodeadresse. Bit 1 des Befehlscode ist das d-Bit und Bit 0 des Befehlscode ist das w-Bit, das anzeigt, ob eine 8- oder 16-Bit-Operation ablaufen soll. Das d-Bit liefert den programmierten Befehl für die Richtung, in der die Operation abläuft. Mit anderen Worten, wie in der obigen Tabelle 4 gezeigt ist, wenn das d-Bit auf 1 gesetzt ist, werden der Inhalt eines ersten Registers und derjenige eines zweiten Registers oder eines Speicherplatzes addiert und in das erste Register eingesetzt. Wenn jedoch das d-Bit null ist, so wird der Speicherplatz oder das zweite Register zum ersten Register addiert und das Ergebnis in das zweite Register oder den Speicherplatz eingesetzt. Besonders vorteilhaft ist die Art, in der die CPU 10 das d-Bit verarbeitet. Das d-Bit wird nicht mikrokode-dekodiert, sondern wird unter Verwendung einer herkömmlichen beliebig wählbaren Logik dekodiert. Der Gruppen-Dekodier-ROM 116 erzeugt ein bestimmtes internes Befehlssignal DACT, welches anzeigt, daß der laufende Befehl, der in die verschiedenen Register geladen ist, ein d-Feld hat. DACT wird direkt zu einer Kreuzschaltung 172 (Fig. 1b) geleitet. Normalerweise werden die Ausgangssignale von dem M-Register 104 und dem N-Register 106 sobehandelt, als bezeichneten sie die Quelle und das Ziel in einer angenommenen Reihenfolge. Mit anderen Worten, normalerweise erzeugt das M-Register 104 den Quellkode zur Auswahl des geeigneten Quellregisters, während das N-Register 106 selektiv ein Freigabesignal und den Zielkode für das Zielregister erzeugt. Jedoch schafft das d-Bit eine zusätzliche Kodiermöglichkeit, um die angenommene Quellen- und Ziel-Zuordnung durch Umkehr der Ausgänge des M-Registers 104 und des N-Registers 106 mit herkömmlichen Mitteln in der Kreuzschaltung 172 in Abhängigkeit von DACT umzukehren.
Es wird jetzt die Verwendung des l-Bits im Befehlscode eines direkten Addierbefehls betrachtet, wie schematisch in der nachfolgenden Tabelle 5 dargestellt.
Tabelle 5
Direktes Addieren
Kurzbezeichnung:
ADDI ea,data (w = 0)
ADDIW ea,data (w = 1)
Beschreibung:
Wenn ea = d8 oder d16, dann ist
data der Inhalt des oder der Bytes, das oder die dem oder den d8 oder d16 Byte(s) folgt oder folgen
sonst
data ist der Inhalt des oder der dem Befehl folgenden Byte(s)
wenn w = 0, dann ist data der Inhalt eines Bytes;
wenn w,l = 1,1 dann ist
data der Inhalt eines Bytes, das durch das Vorzeichen erweitert wurde zur Bildung einer 16-Bit-Zahl;
wenn w,l = 1,0 dann ist
data der Inhalt eines Paars von aufeinanderfolgenden Bytes, wobei das niedrig bewertete Byte dem höher bewerteten Byte vorausgeht.
wenn w = 0 dann (EA8) + data → (EA8)
sonst (EA16) + data → (EA16)
Beteiligte Kennzeichen (Flags):
ÜBERTRAG, HILFSÜBERTRAG, VORZEICHEN, NULL, PARITÄT, ÜBERLAUF
Der Code des Befehls zum direkten Addieren wird in ähnlicher Weise identifiziert in den sechs am höchsten bewerteten Bits des Befehlscodes, Bit 1 ist das l-Bit und Bit 0 ist das w-Bit wie zuvor. Der Befehl zum direkten Addieren kann über vier Bytes fortbestehen. Das erste Byte bezieht sich auf den Befehlscode, das zweite Byte bezieht sich auf das Register oder den Speicherplatz EA, und die letzten beiden Bytes enthalten die Direktdaten.
Der Einfachheit halber sei angenommen, daß die zu addierenden Mengen Einzelbytes sind, d. h. w = 0. Die Daten im Befehl sind dann der Inhalt eines Byte. Der Register- oder Speicherplatz (EA8) wird dann zum Datenbyte addiert und das Ergebnis in diesen Speicherplatz oder dieses Register eingesetzt.
Wenn die zu addierende Information jedoch Wortlänge hat, so wird der Inhalt des 16-Bit-Speicher- oder Register- Platzes zu den Direktdaten im Befehl addiert und zu diesem Speicherplatz oder Register (EA16) zurückgeführt. Das l-Bit ermöglicht die Verwendung sowohl von 8- als auch 16-Bit- Daten in einer Wortlängenaddition. Wenn das l-Bit auf eins gesetzt ist, so sind die Direktdaten gleich dem Inhalt des Einzelbytes in dem Befehl, mit dem Vorzeichenbit erweitert zur Bildung einer 16-Bit-Menge. Dies geschieht in einer speziellen Hardware in der ALU 134 entsprechend bekannten Konstruktionsprinzipien. Wenn das l-Bit jedoch auf eine binäre Null gesetzt ist, so handelt es sich bei den verarbeiteten Daten um die 16-Bit-Menge in dem Paar von aufeinanderfolgenden Bytes, welche das letzte Paar eines Mehr-Byte-Befehls bilden, wobei das niedriger bewertete Byte dem höher bewerteten Byte vorausgeht. Das l-Bit ermöglicht somit, daß sowohl 8- als auch 16-Bit-Datenwörter übereinstimmend in Direktdatenbefehlen in einer Form verarbeitet werden, welche hardware-identisch ist.
Schließlich kann die CPU 10 in einer Betriebsart arbeiten, bei der eine Gleitkomma-Ankopplung zum Koordinieren der Operation der CPU mit einem getrennten Chip, z. B. einem Arithmetik-Chip verwendet wird, welches Gleitpunkt- bzw. Gleitkommaoperationen durchführt und dadurch deren Ausführung in festverdrahteter bzw. Hardware-Form anstelle der Verwendung von Software-Unterprogrammen ermöglicht. Das Arithmetik-Chip hat die Fähigkeit, den Adreß/Daten- Bus zu überwachen und konstant den ausgeführten Befehl festzustellen. Insbesondere ist das Arithmetik-Chip so eingestellt, daß es einen speziellen Befehl FLOAT feststellt und in dessen Abhängigkeit die notwendigen Maßnahmen trifft. Damit das Arithmetik-Chip von der Zugriffsadresse des Befehls Kenntnis erhält, reagiert die CPU 10 auf einen FLOAT-Befehl durch Durchführen einer Leseoperation ohne Übertragung des Ergebnisses der Leseoperation in die untere Steuereinheit 14. Die gelesene Adresse wird der im FLOAT-Befehl angegebenen Operandenadresse entnommen, wodurch die Adresse für das Arithmetik-Chip auf dem Adreß/Daten-Bus erkennbar erscheint. Während das Arithmetik-Chip seine Routinen ausführt, kann die CPU 10 in einen Ruhezustand eintreten, währenddessen sie darauf wartet, daß das Arithmetik-Chip die Verwendung des Adreß/ Daten-Bus freigibt. Ein externer Prüfanschluß an der CPU 10 zeigt letzterer an, ob das Arithmetik-Chip zur Ausführung eines anderen Befehls bereit ist. Anderenfalls bewirkt der Befehl WARTEN, daß die CPU 10 im Ruhezustand ist. Für das beschriebene Ausführungsbeispiel ist die besondere Form von FLOAT und WARTEN weiter unten in Tabelle 6 angegeben.
Tabelle 6
Gleitpunkthaken:
Kurzbezeichnung:
FLOAT ea
Beschreibung:
(EA16) → nirgendwohin, ausgenommen Adresse wird auf Bus gegeben
Beteiligte Kennzeichen (Flags):
Keine
WARTEN
Kurzbezeichnung:
WARTEN
Beschreibung:
Wenn kein Signal auf "Prüfanschluß" so wird dieser Befehl wieder ausgeführt.
Beteiligte Kennzeichen (Flags):
Keine
Jetzt sind die Mikrokode-Routinen für die oben angeführten Befehle verständlich.
Wenn auch in dem beschriebenen Ausführungsbeispiel eine besondere Befehlskodierung und Mikrokodierung mit Bezug auf die Operationsweise der oben angegebenen Hardware beschrieben wurde, ist klar, daß äquivalente Hardware-Komponenten, welche sich aufeinander in logisch äquivalenter Weise beziehen, verwendet werden können. Betrachtet sei beispielsweise die Mikrokode-Routine für den ASCII-Additionseinstellungsbefehl AAA. Tabelle 7 umfaßt die ASCII-Additions- und Substraktionseinstellungen zusammen.
Tabelle 7
Jeder Mikrokode-Befehl besteht aus zwei Hälften, welche parallel operieren können. Die erste Hälfte, Bits 1 bis 10, enthält das Quell- und Bestimmungsfeld und erlaubt eine allgemeine Übertragung zwischen beliebigen zwei Datenquellen auf dem ALU-Bus 16. Die zweite Operation, welche parallel zur ersten abgewickelt wird, kann eine der folgende sechs Arten von Befehlen in den Mikrokodefeldern TYP, A, B und F sein:
Ein Kurzbereichssprung;
ein ALU-Statuseinstellungsbefehl;
ein allgemeines Verwaltungssteuerungspaar;
eine Speicherzyklusanforderung;
ein Weitbereichssprung; und
ein Weitbereichssprung mit Retten (SAVE), d. h. ein Aufruf.
Die ROM-Adresse, gespeichert im AR-Register 112, ist in Tabelle 7 in den Bits 0 bis 7 und dem zusätzlich addierten Bit ARX gezeigt. Der Inhalt des Inkrementregisters CR ist in Dezimalform in einer Spalte rechts von der ROM-Adresse gezeigt. Die Spalten S, D, TYP, A, B und F stellen in memotechnischer Form den 21-Bit-Mikrokode dar, der im ROM 114 entprechend der ASCII-Einstellung gespeichert ist. Die Quell- und Bestimmungsfelder belegen Bits 1 bis 10 und identifizieren entsprechend einer Quell- und Befestimmungsbuskodezuordnung eines der Register in den oberen oder unteren Dateien 32, 78 oder einem der ALU-Register.
Es gibt sechs Arten von Mikrokode-Befehlen bei dem beschriebenen Ausführungsbeispiel. Typ 1 ist ein ALU-Statuseinstellungbefehl, welcher die mit PSW 136 zusammengenommene ALU 134 zur Ausführung einer besonderen Funktion einstellt. Ein Typ 0-Mikrokode-Befehl ist ein kurzer Sprung, welcher innerhalb der Mikrokodefolge einen bedingten Sprung herbeiführt. Ein Typ-4-Befehl ist ein Buchhaltungsbefehl. Andere Typen umfassen einen Typ-6-Speicherzyklus, einen Typ-5-Sprungzyklus und einen Typ-6-Sprungzyklus mit Adressen-Zwischenspeicherung.
Im Falle der ASCII-Additions- und Subtraktionseinstellung entsprechend Tabelle 7 besteht das Mikroprogramm aus acht Mikrokodebefehlen. Der ersten Mikrokodebefehl überträgt den Inhalt von A zu den niedrigeren acht Bits des 16-Bit-Zwischenregisters TMP A 138. Die zweite Hälfte des Mikrokodebefehls ist ein ALU-Statuseinstellungsbefehl, welcher die ALU 134 derart vorkonditioniert, daß sie den Inhalt von TMP A 138 und den Inhlat von TMP B 142 ohne Übertrag addiert. Der durch XI symbolisch dargestellte Befehlscode besteht aus Bits 13 bis 17. Dies fünf Bits werden in das Befehlscode-Register 110 geladen und über ROM 132 zu ALU 134 dekodiert. Der Befehlscode ist eine besondere ASCII-Einstellung entweder zur Addition oder zur Subtraktion, ausgeführt mit dem Inhalt des Mikrokode-B-Feldes, das im Falle eines ALU-Befehls Bits 18 bis 20 enthält. Bit 21 ist ein Kennzeichenbits, das anzeigt, ob die PSW-Kennzeichen bzw. -marken auf den neuesten Stand gebracht werden sollen. Die ALU ist derart vorkonditioniert, daß sie den Inhalt des Zwischenregisters A prüft, um festzustellen, ob er 9 übersteigt oder ob das Hilfsübertragkennzeichen gesetzt ist. Der vorgeladene ALU- Bus 16 wird bei Beginn jedes Taktzyklus auf ein volles Komplement von Einsen gesetzt und durch Mikrokodebefehl 1 selektiv heruntergedrückt, indem eine geeignete Schaltung 160, die schematisch in Fig. 2 gezeigt ist, zum Entladen der ausgewählten Leitungen des ALU-Bus 16 und zum Laden einer binären 6 in TMP B 142 befähigt wird. Eine herkömmliche Komparatorschaltung 162 prüft den Inhalt des Zwischenregisters A, um festzustellen, ob dessen Inhalt größer als 9 ist. Ist dies der Fall, so ist das Ausgangssignal des Komparators 162 wahr und wird im ODER-Gatter 164 mit dem Hilfsübertrag-Bit vom PSW 136 verknüpft. Das Ausgangssignal des ODER-Gatters 164 gibt den Addierer 166 frei, der daraufhin die Inhalte von TMP A 138 und TMP B 142 addiert. Die Schaltung gemäß Fig. 2 oder deren Äquivalent ist hin die ALU 134 einbezogen und wird vom entsprechenden ALU-Befehlscode freigegeben.
Der Mikrokode-Befehl 2 nimmt den Inhalt der Summe aus ALU 134 und lädt diese Summe neu in den Akkumulator 90. ALU 134 wird sodann von der zweiten Hälfte des Mikrokode- Befehls 2 vorkonditioniert, um den Inhalt von TMP B zu dekrementieren. Das am niedristen bewertete Bit XO des X-Registers 108 wird sodann im Mikrokode-Befehl 3, nämlich durch Bit 3 der Befehlsadresse geprüft. Wenn dies Bit wahr ist, folgt der Mikrokode-Befehl einem kurzen Sprung zum Mikrokode-Befehl 5, wo der Inhalt des X-Registers 82 in das Register TMP B 142 geladen wird. Die vom Mikrokode-Befehl 2 vorkonditionierte ALU 134 dekrementiert den Inhalt von TEMP B 142. Die zweite Hälfte des Mikrokode-Befehls 5 ruft sodann einen kurzen Sprung zum Ende des Mikrokode-Befehls hervor, wenn die Inversion des Übertragungskennzeichens (carry flag) wahr ist und keinen Übertrag NCY anzeigt; anderenfalls wird Mikrokode-Befehl 6 ausgeführt, wobei die Summe in das X-Register 82 gegeben wird. In jedem Fall erzeugt der Buchhaltungsbefehl ein ROM-Steuersignal RNI aus der Schaltung 144, um den nächsten Befehl zu durchlaufen, d. h. dem Lader 130 anzuzeigen, daß der nächste Maschinensprachenbefehl ablaufen soll.
Wenn ein ASCII-Additionsbefehl angezeigt wird, so wird der Mikrokode-Befehl 3 fortgelassen und ALU 134 derart vorkonditioniert, daß sie den Inhalt von TMP B inkrementiert. Wiederum setzt der Mikrokode-Befehl 5 den Inhalt des Zwischenregisters 82 in TMP B ein, mit dem Ergebnis, daß der inkrementierte Inhalt des X- Registers 82 in der erforderlichen Weise geladen und eine ASCII-Multiplikation-Division ausgeführt werden kann. Eine Schaltung führt die anderen, für die ASCII-Additions- und Subtraktionseinstellung erforderlichen restlichen Operationen, z. B. Setzen des Hilfsübertragkennzeichens durch Verwendung einer Anhebeschaltung 168 unter Verknüpfung der Summe mit hexidezimal OF im UND-Gatter 170 (Fig. 2) aus. Die logisch äquivalente Schaltung, die bei der ASCII-Addition und -Subtraktion verwendet wird, ist schematisch in Fig. 2 gezeigt. Selbstverständlich ist dort nur ein Ausführungsbeispiel dargestellt, das ein Äquivalent dafür darstellt, wie die Vielzweckschaltung in der ALU 134 die erforderlichen fest verdrahteten logischen Operationen in bekannter Weise ausführt. Es ist klar, daß die tatsächliche Schaltung eine bestimmte Architektur haben kann und nur eine zur Darstellung in Fig. 2 äquivalente Konfiguration annimmt, und zwar in Abhängigkeit von den oben erörterten Mikrokode-Befehlen.
Die ASCII-Divisions- und Multiplikationseinstellbefehle AAM und AAD sind schematisch unten in Tabelle 8 dargestellt.
Tabelle 8
Wie für AAD in Tabelle 3 gezeigt ist, wird die 8-Bit-Binärzahl für 10 als zweites Byte des Befehls aus der Warteschlange gezogen und in den TMP C 140 eingesetzt. Der Inhalt des X-Registers 82 wird in TMP B 142 eingesetzt. Der unbedingte Langsprung wird dann zu CORX ausgeführt, was bei dem beschriebenen Ausführungsbeispiel ein Teil eines Inkrementier- und Dekrementier- Befehls ist. Mikrokode-Befehle 3 bis 11 und CORX stellen die Ausführung des normalen binären Multiplikationsalgorithmus dar, bei dem TMP A als Akkumulator benutzt wird. Der ALU-Befehlscode RRCY steht für eine Rechtsdrehung einschließlich dem Übertrag. Der Übertrag ist einbezogen, da die erfindungsgemäße ALU 134 nur in der Lage ist, das Übertragsbit statt eines ausgewählten Bits des Bytes oder Worts zu prüfen. Daher löscht der Mikrokode- Befehl 3 von CORX das Zwischenregister A und vorkonditioniert die ALU 134 für eine Rechtsrotation des Inhalts des Zwischenregisters C. Die tatsächliche Drehung bzw. Rotation erfolgt beim Mikrokode- Befehl 4. In der zweiten Hälfte des Mikrokode-Befehls 4 setzt eine Verwaltungsinstruktion einen an sich bekannten internen Zähler in der ALU 134 entweder auf 15 oder auf 7, was davon abhängt, ob die verarbeitete Menge ein Byte oder ein Wort ist.
Wie weiter unten zu erkennen ist, wird danach der Zähler dekrementiert, wenn ein Multiplikationsalgorithmus fortgesetzt wird. Mikrokode-Befehl 5 ist ein kurzer bedingter Sprung, bei dem das Übertragsbit geprüft wird. Gibt es keinen Übertrag, so wird der Sprung zum Mikrokode-Befehl 8 ausgeführt. Die letzte Hälfte des Mikrokode-Befehls 8 und die erste Hälfte des Mikrokode- Befehls 9 werden rechtsgedreht mit Übertrag des Inhalts des Zwischenregisters A, gefolgt von der Rechtsdrehung mit Übertrag des Inhalts des Registers TMP C. In der letzten Hälfte des Mikrokode-Befehls 10 wird immer dann ein kurzer bedingter Sprung ausgeführt, wenn die Bedingung NCZ anzeigt, daß der Inhalt des Zählers in der ALU 134 null erreicht hat. Wenn der Inhalt ungleich null ist, kehrt die Schleife zum Mikrokode- Befehl 5 zurück. Am Ende der Schleife wird zum Mikrokode- Programm mit Bezug auf AAD zurückgekehrt, wobei der Inhalt des A-Registers 90 in das Zwischenregister B 142 geladen und ALU 134 derart vorkonditioniert wird, daß sie den Inhalt des Zwischenregisters B und denjenigen des Zwischenregisters C, das jetzt das Produkt des Zehnfachen des vorhergehenden Inhalts des X-Registers 82 enthält, addiert. Bei dem Mikrokode-Befehl 3 wird das X-Register 82 sodann auf null gesetzt und ein unbedingter Sprung nach ASCF ausgeführt, wobei die Addition, vorkonditioniert durch den Mikrokode-Befehl 2 in der ALU 134 ausgeführt wird, die Kennzeichen aktualisiert und das ROM-Steuersignal RNI erzeugt werden. Ein Vergleich mit Tabelle 3 zeigt, daß dies tatsächlich die ASCII-Einstellung bzw. Programmierung für Division ist.
In ähnlicher Weise zeigt Tabelle 8 auch die ASCII-Einstellung bzw. Programmierung für die Multiplikation AAM. Die Binärzahl für 10 wird der Warteschlange entnommen und während des Mikrokode-Schritts 0 in das Zwischenregister B geladen. Das Zwischenregister A wird während des Mikrokode-Befehls 1 gelöscht, und der Inhalt des Akkumulators 90 wird in das Zwischenregister C während des Mikrokode-Befehls 2 geladen, worauf ein unbedingter Sprung zum Unterprogramm CORD stattfindet, das aus einem 16-Mikrobefehls-Mikroprogramm besteht.
Der erste Mikroprogramm-Befehl von CORD konditioniert ALU 134 derart vor, daß diese den Inhalt des Zwischenregisters B von demjenigen des Zwischenregisters A subtrahiert und die Subtraktion beim Mikrokode-Befehl 1 ausführt, ohne das Ergebnis an einen Speicherplatz zu setzen. Das Übertragskennzeichen wird ebenfalls gesetzt. Wenn daher der Inhalt des Zwischenregisters B null ist, wobei angenommen wird, daß alle Inhalte positive Zahlen sind, so wird kein Übertrag erzeugt, da das Zwischenregister A gelöscht worden ist. In einem solchen Falle zeigt beim Mikrokode-Befehl 2 ein bedingter Sprung NCY zu einer herkömmlichen Fehler-Subroutine dem Benutzer an, daß eine Division durch null versucht wird. Normalerweise wird das Übertragungskennzeichen bzw. die Übertragsmarke beim Mikrokode- Befehl 1 gesetzt. Wie zuvor setzt der Buchhaltungsbefehl MAX C den Inhalt eines internen Zählers in der ALU 134 auf 15 oder 7, und zwar abhängig davon, ob Byte- oder Wortmengen verarbeitet werden. Eine Linksdrehung mit Übertrag wird sodann am Inhalt des Zwischenregisters C während der Mikrokode- Befehle 3 und 4 ausgeführt. Als Ergebnis wird das gesetzte Übertragsbit in das Zwischenregister C linksgedreht, das anfänglich den Dividenden enthielt. In ähnlicher Weise wird das gesetzte Übertragungsbit in das Zwischenregister A gedreht, welches vorher von den Mikrokode-Befehlen 4 und 5 auf null gesetzt worden ist. ALU 134 ist derart vorkonditioniert, daß sie den Inhalt des Zwischenregisters B von demjenigen des Zwischenregisters A in der zweiten Hälfte des Mikrokode- Befehls 5 subtrahiert. Das Übertragungsbit wird in einem Mikrokode- Befehl 6 geprüft, ist jedoch null beim ersten Durchlauf, da ein Nullbit in das Übertragungsbit von dem auf null gesetzten Inhalt des Zwischenregisters A geschoben worden ist. Während des Mikrokode-Befehls 7 wird die Subtraktion ausgeführt, ohne daß die Differenzen irgendwo abgespeichert werden. Jedoch wird das Übertragungsbitkennzeichen auf den neuesten Stand gebracht. Wenn der im Zwischenregister B enthaltene Divisor größer als der inzwischen gedrehte Inhalt des Zwischenregisters A ist, so wird das Übertragsbit gesetzt, so daß der bedingte Sprung NCY und der Mikrokode-Befehl 8 durchlaufen werden. Der Mikrokode-Befehl 9 überträgt einen kurzen Sprung zurück zum Mikrokode-Befehl 3 zusammen mit dem Dekrementieren des internen Zählers innerhalb der ALU 134.
Der Prozeß wird in gleicher Weise solange fortgesetzt, bis der verschobene Inhalt des Zwischenregisters A gleich oder größer als der im Zwischenregister B gespeicherte Divisor ist. Wenn das Übertragsbit durch Verschiebung einer binären 1 in das Übertragsbit gesetzt ist, und zwar als Ergebnis der Linksdrehungsverschiebung, beginnend beim Mikrokode-Befehl 4 aus dem Zwischenregister A, so ruft der Mikrokode-Befehl 6 einen Sprung zum Mikrokode-Befehl 13 hervor, der das Übertragsbit rücksetzt. Die Differenz zwischen dem Dividenden wird während des Mikrokode-Befehls 14 in das Zwischenregister A eingesetzt, verbunden mit einer Rückkehr in der zweiten Hälfte dieses Befehls zum Mikrokode-Befehl 3. Wenn keine binäre 1 in das Übertragsbit gedreht worden ist, so wird der Mikrokode- Befehl 6 durchlaufen und die Subtraktion wie vorher im Mikrokode-Befehl 7 ausgeführt. Wenn der Dividend gleich oder größer als der Divisor ist, wird ein Übertragskennzeichen beim Befeh 7 rückgesetzt, woraus ein bedingter Sprung beim Befehl 14 resultiert, wo wiederum die Summe in das Zwischenregister A gesetzt und die Schleife fortgesetzt wird.
Am Ende der Schleife entweder vom Befehl 9 oder vom Befehl 14 wird in den Befehl 10 entweder direkt oder über einen unbedingter Sprung beim Befehl 15 eingetreten, um eine zusätzliche Linksdrehung mit dem Übertrag an dem Inhalt des Zwischenregisters C auszuführen. Der Inhalt des Zwischenregisters C wird wieder in die ALU 134 beim Befehl 12 geladen und in der Hauptmikrokode-Routine für AAM beim Mikrokode-Befehl 3 komplementiert. Der komplementierte Inhalt des Zwischenregisters C, der jetzt der Quotient von 10, geteilt durch den Dividenden ist, wird in das X-Register 82 geladen. ALU 134 wird vorkonditioniert, um den Inhalt des Zwischenregisters A zu durchlaufen und lädt den Inhalt beim Mikrokode-Befehl 5 in das Akkumulatorregister 90. Das Übertragskennzeichen wird sodann auf den neuesten Stand gebracht und ein Befehlssignal RNI erzeugt. Ein Vergleich mit Tabelle 3 zeigt, daß die Routine für AAM tatsächlich durch das Mikroprogramm bzw. die geschlossene Mikrokode-Kette gemäß vorstehender Beschreibung ausgeführt wird.
Die Mikrokode-Unterprogramme für die Zeichenreihen- bzw. String-Befehle MOVS und LDS, wie sie bei der Erfindung ausgeführt werden, sind in der nachstehenden Tabelle 9 angegeben.
Tabelle 9
Jeder der String-Befehle beginnt mit einem langen Sprung bei der Bedingung F1, die wahr ist, wenn das oben beschriebene Wiederholungspräfix RPT gerade zuvor dekodiert wurde. Wenn vorhanden wird in das Wiederholungsunterprogramm RPTS eingetreten, welches dazu führt, daß der String-Befehl so oft wiederholt wird, wie durch den Inhalt des Registers BC angegeben ist.
Die String-ÜBERTRAGEN- und String-LADEN-Befehle MOVS und LDS teilen, wie gezeigt ist, die gleichen Mikroprogramme. Im Mikrokode-Befehl 1 wird der Inhalt des IJ-Registers 102 zum indirekten Register < 12722 00070 552 001000280000000200012000285911261100040 0002002903349 00004 12603BOL<44 in der oberen Datei 48 übertragen. Ein Speicher-Lesebefehl wird danach ausgeführt. Das bekannte Adressier-Unterprogramm nimmt dann die Adresse vom IND 44 und liest den Inhalt in das Operandenregister OPR 46. Bits 17 bis 20 enthalten einen Kode, der angibt, welches Verschieberegister verwendet werden soll, und einen Adressenfaktor zur Korrektur der Adresse im IND-Register 44 nach dessen Benutzung. BL stellt symbolisch einen 2-Bit-Kode dar, der eine externe Logik die Byte- oder Wort-Leitung prüfen und das Richtungskennzeichen im PSW-Register 136 entsprechend einer bekannten Logik den erforderlichen Adressenfaktor erzeugen läßt. Der Adressenfaktor erhöht oder erniedrigt selektiv den Adresseninhalt von IND 44 um 1 oder 2, je nachdem, ob ein oder zwei Bytes beim Zugriff beteiligt sind.
Im Mikrokode-Befehl 2 ist das XO-Bit des Registers 108 wahr, wenn der Befehl ein String-Lade-Befehl ist; in diesem Falle wird ein kurzer bedingter Sprung zum Mikrokode- Befehl 6 durchgeführt. Der Mikrokode-Befehl 6 lädt den Inhalt des OPR-Registers 46, das jetzt den Inhalt des zugegriffenen Adressenplatzes enthält, und überträgt diesen zum M-Register 104. In der letzten Hälfte des Mikrokode-Befehls 6 gibt es einen bedingten kurzen Sprung zurück zum nullten Befehl, sofern ein Wiederholungspräfix vorhanden ist, anderenfalls wird das RNI-Signal erzeugt.
Wenn der Befehl ein String-Übertragungs-Befehl ist, so wird der bedingte Sprung vom Mikrokode-Befehl 2 durchlaufen, und der Inhalt des IK-Registers 105 wird in das indirekte Register IND 44 geladen. Eine Speicher-Schreiboperation belegt die letzte Hälfte des Mikrokode-Befehls 3, wobei wiederum der 2-Bit-Adressenkorrekturfaktor verwendet wird, der das w oder Wort/Byte-Eingabesignal aus dem Befehl zusammen mit dem PSW-Richtungskennzeichen zur Durchführung einer nachträglichen Korrektur in IND durch die richtige Erhöhung oder Verminderung benutzt. Nach der Ausführung der Erhöhung oder Verminderung wird das Ergebnis aus dem IND-Register 44 in das IK-Register 105 übertragen, und es wird bei Vorhandensein eines Wiederholungspräfix ein bedingter Sprung durchgeführt, anderenfalls wird das RNI-Signal erzeugt.
In ähnlicher Weise zeigt Tabelle 10, daß String-Vergleichen CMPS und String-Suchen SRCHS dieselben Mikro-Programme teilen.
Tabelle 10
Wie vorher ist der nullte Befehl ein von einem Wiederholungspräfix abhängiger langer Sprung. Der Mikrokode- Befehl 1 überträgt den Inhalt des M-Registers 104 zum Zwischenregister A, gefolgt von einem bedingten Sprung zum Mikrokode-Befehl 5, wenn das XO-Bit des Registers 108 wahr ist, wodurch angezeigt wird, daß der Befehl ein String-Such-Befehl ist. Der Inhalt des IK-Registers 105 wird dann in das IND-Register 44 geladen, gefolgt von einer Speicher-Leseoperation, bei der das w-Bit und der Richtungsbit-Adressenkorrekturfaktor gemäß obiger Beschreibung verwendet wird. Der Inhalt der zugegriffenen Speicherzelle wird jetzt im OPR-Register 46 gespeichert und zum Zwischenregister B übertragen. ALU 134 wird im Mikrokode-Befehl 6 derart vorkonditioniert, daß der Inhalt des Zwischenregisters B vom Inhalt des Zwischenregisters A subtrahiert wird. Die Operation wird im Mikrokode-Befehl 7 ausgeführt, wobei das Übertragskennzeichen auf den neuesten Stand gebracht wird. Im Mikrokode-Befehl 8 wird der Inhalt des IND-Registers 44, der jetzt die nachkorrigierte Adresse enthält, zum IK- Register 105 rückübertragen. Beim Mikrokode-Befehl 9 wird ein kurzer Sprung konditioniert, wenn das logische Produkt des Null-Kennzeichens auf Null voreingestellt und das Wiederholungspräfix vorhanden ist. In diesem Falle wird die Folge durch Rückkehr auf den Mikrokode-Befehl 0 wiederholt, anderenfalls wird das RNI-Signal erzeugt. Daher wird der Inhalt des adressierten Speicherplatzes mit der Menge verglichen, die in das vom M-Register 104 bezeichnet Register - im Falle eines String-Such-Befehls der Akkumulator 90 - geladen ist.
In ähnlicher Weise durchläuft der String-Vergleichen den bedingten kurzen Sprung beim Mikrokode-Befehl 1 und lädt den Inhalt des IJ-Registers 103 in das IND-Register 44. Ein Speicher-Lesezyklus wird danach unter Verwendung des RD-Verschieberegisters und des 2-Bit-w- und Richtungsbit- Kodes für einen Nachkorrekturadressenfaktor ausgeführt. Die nachkorrigierte Adresse wird dann dem IND-Register 44 beim Mikrokode-Befehl 3 entnommen und wieder in das IJ- Register 103 geladen. Der Inhalt des zugegriffenen Speicherplatzes wird dann in das Zwischenregister A beim Mikrokode-Befehl 4 geladen. Der Inhalt des IJK-Registers 105 wird in das IND-Register 44 geladen, wobei ein anderer Speicher- Lesezyklus das RA-Verschieberegister und das w- und Richtungsbit zur Nachadressenkorrektur benutzt, mit dem Ergebnis, daß der Inhalt der zugegriffenen Speicherzelle in das OPR- Register 46 geladen wird. Beim Mikrokode-Befehl 6 wird dann der Inhalt des OPR-Registers 46 in das Zwischenregister B übertragen und die ALU 134 derart vorkonditioniert, daß sie den Inhalt des Zwischenregisters B von demjenigen des Zwischenregisters A subtrahiert. Die Operation wird beim Mikrokode-Befehl 7 ausgeführt, wobei die Kennzeichen, einschließlich des Null-Kennzeichens gesetzt werden. Daher wird die Differenz zwischen den Inhalten des vom IK-Register 105 bezeichneten Speicherplatzes und des IJ-Registers 103 in die ALU 134 gesetzt. Wenn die Differenz Null ist, so ist das Null-Kennzeichen auf eine binäre Null voreingestellt. Der Mikrokode-Befehl 8 speichert die nachkorrigierte Adresse im IND-Register 44 wieder in das IK-Register 105, gefolgt von einem bedingten kurzen Sprung beim Mikrokode-Befehl 9, wenn sowohl ein Wiederholungspräfix als auch ein Vergleich ungleich Null vorlagen, anderenfalls wird das RNI- Signal beim Mikrokode-Befehl 10 erzeugt.
Schließlich stellt die Tabelle 11 den String-Speicher-Befehl STS dar, der aus einem 4-Mikroprogramm besteht.
Tabelle 11
In dem nullten Befehl wird der Inhalt des IK-Registers 105 zum IND-Register 44 übertragen, gefolgt von einem langen Sprung, der bei Vorhandensein eines Wiederholungspräfix konditioniert wird. Beim Mikrokode-Befehl 1 wird der Inhalt des vom M-Register 104 bezeichneten Registers, das im beschriebenen Ausführungsbeispiel der Akkumulator 90 ist, zum OPR-Register 46 übertragen. Ein Speicher-Schreibzyklus wird sodann unter Verwendung des Verschieberegisters RA und des Richtungs- und w-Bit-Nachadressenkorrekturfaktors ausgeführt. Im Falle eines Speicher-Schreibzyklus wird die Adresse in das IND-Register 44 eingesetzt, wobei die zu schreibenden Daten während oder vor dem Speicherschreibwort im OPR-Register 46 befindlich sind. Daher werden die Daten aus dem Akkumulator 90 in den vom IK-Register 105 bezeichneten Speicherplatz geschrieben. Die nachkorrigierte Adresse im IND-Register 44 wird sodann zum IK-Register 105 im Mikrokode-Befehl 2 zurückübertragen, gefolgt von einem bedingten kurzen Sprung zum nullten Befehl, wenn ein Wiederholungspräfix gefunden wird, anderenfalls wird das RNI-Signal erzeugt.
Das Wiederholungspräfix RPTS enthält ein Mikroprogramm, das während jedes der String-Verleich-Befehle als bedingtes Unterprogramm verwendet wird. Das Wiederholungs-Mikrokode- Unterprogramm ist in Tabelle 12 zeigt.
Tabelle 12
Beginnend mit dem Mikrokode-Befehl 6 wird der Inhalt des BC-Registers 84 und 92 in das Zwischenregister B geladen, gefolgt von einem bedingten Unterbrechungssprung, wenn ein externes Interrust empfangen wurde. Der bedingte Sprung zum Mikrokode-Befehl 12, bei dem es sich um einen Verwaltungsbefehl handelt, bewirkt, daß die obere Steuereinheit 12 die Befehlsabrufe unterbricht, wodurch der Programmzähler angehalten wird. Der nächste Verwaltungsbefehl bewirkt, daß die obere Steuereinheit 12 einen Realprogrammzähler neu berechnet, indem die Zahl der Bytes in der Warteschlange von dem existierenden Programmzähler subtrahiert wird und wieder zurück in den Programmzähler geladen wird. Dies wird mit Hilfe einer bekannten Logik-hardware durchgeführt. Der wahre Inhalt des Programmzählers wird dann zum Zwischenregister B übertragen und die ALU 134 zum Verringern des Inhalts des Zwischenregisters B um 2 entsprechend der Wortlänge vorkonditioniert. Der Inhalt des TMP B wird im Mikrokode- Befehl 15 verringert und in den Programmzähler wieder eingesetzt. Der Verwaltungsbefehl FLUSH startet die Warteschlange erneut und löscht alle gerade in der Warteschlage befindlichen Bytes, startet neu vom Inhalt des laufenden Programmzählers und erzeugt das RNI-Signal.
Wenn jedoch kein Unterbrechungssignal vorhanden ist, wird die ALU 134 derart konditioniert, daß sie den Inhalt des Zwischenregisters B beim Mikrokode-Befehl 7 durchläuft und dann den Inhalt des Zwischenregisters B beim Mikrokode- Befehl 8 verringert. Ein kurzer bedingter Sprung beim Mikrokode-Befehl 9 erscheint beim Mikrokode-Befehl 10, wenn der Inhalt Null ist, andernfalls wird der verringerte Zählwert wieder in das BC-Register 84 und 92 geladen, gefolgt von einer Rückkehr zum Aufrufpunkt. Wenn der Inhalt Null ist, wird der Mikrokode-Befehl 11 durch Erzeugung des RNI-Signals ausgeführt.
Zu beachten ist, daß die direkten Befehle in der oben beschriebenen Weise ein l-Bit enthalten. Das l-Bit zeigt an, ob beim Verarbeiten einer 16-Bit-Menge die direkten Daten 8 oder 16 Bits breit sind. Die Speicher-Lesebefehle, die ein l-Bit verwenden, enthalten als einen Mikrokode-Befehl das folgende Befehlspaar als die ersten beiden Befehle des Mikroprogramms.
Ein Byte wird aus der Warteschlange genommen und an die Stelle der am geringsten bewerteten Bits des Zwischenregisters B 142 eingegeben. ALU 134 erweitert dann in herkömmlicher Weise automatisch das Vorzeichen-Bit des am niedrigsten bewerteten Bytes auf die 8 am höchsten bewerteten Bits des 16-Bit-Registers. Ein bedingter kurzer Sprung wird dann zu den restlichen Mikrokode- Befehlen des Mikroprogramms ausgeführt, wenn das l-Bit gesetzt worden ist, d. h. L8. Anderenfalls wird das nächste Byte aus der Warteschlange in die am höchsten bewerteten Bits des Zwischenregisters B geladen und das Mikrokode-Befehls-Programm fortgesetzt. Daher wird bei einem 16-Bit-Befehl, d. h. w=1, ein Signal L8 im ROM 116 dekodiert und in einer UND-Funktion mit dem l-Bit logisch verknüpft. Das Signal wird an einem Mikrokode- Befehl geprüft, um entweder ein zweites Byte zu laden oder das Vorzeichen eines Direktdaten-Einzelbytes in den direkten Befehlen zu erweitern.
Vorstehend wurde ein Zentralprozessor beschrieben, der in gleicher Weise zur Verarbeitung von 8- oder 16-Bit-Mengen geeignet ist, ohne dabei die Hardware bzw. den Maschinenaufwand zu duplizieren oder zu wiederholen. Außerdem kann der Prozessor einen erweiterten Speicherraum adressieren, der den durch die maximalen Wortlängen der Register des Mikroprozessors definierten adressierbaren Raum übersteigt. Der Datendurchlauf ist dadurch wesentlich erhöht, daß eine Befehlsüberlappung in Kombination mit der Warteschlange vorgesehen ist, wodurch der Mikroprozessor die oberen und unteren Steuereinheiten asynchron betreiben kann. Die Organisation ermöglicht außerdem einige Klassen von besonderen Befehlen, mit denen komplexe Funktionen bei minimalem Programmaufwand bzw. minimaler Mikrokode-Programmierung und ohne Beeinträchtigung der Vielseitigkeit ausgeführt werden können.

Claims (3)

1. Prozessor (10) zur Verarbeitung digitaler Informationen, wobei die digitalen Informationen Befehle mit Direktdaten und einem w-Bit umfassen, welches angibt, ob eine Verarbeitungsoperation des Prozessors in Byte- oder Wortlänge durchgeführt werden soll,
dadurch gekennzeichnet,
daß die Befehle aufweisen:
  • - ein Vorzeichen-Bit,
  • - Direktdaten von der Länge eines Bytes oder eines Wortes,
  • - ein l-Bit, das die Länge der Direktdaten angibt,
und daß eine Einrichtung (in 134) vorgesehen ist, die dann, wenn das l-Bit Direktdaten in Bytelänge und das w-Bit eine Verarbeitungsbreite in Wortlänge angibt, eine Erweiterung der Direktdaten auf Wortlänge vornimmt durch Kopieren des Vorzeichen- Bits in alle höherwertigen Bitpositionen des Wortes, so daß Verarbeitungsoperationen unabhängig von der Länge der Direktdaten ausführbar sind.
2. Verfahren zur Datenverarbeitung unter Verwendung einer Datenverarbeitungseinrichtung mit einem Speicher für digitale Informationen und einem Prozessor (10) zum Verarbeiten digitaler Informationen,
dadurch gekennzeichnet,
daß in den digitalen Informationen ein Befehl mit einem Vorzeichen-Bit, einem l-Bit und einem w-Bit Direktdaten mit der Länge eines Bytes oder eines Wortes und mit Bits geringerer und höherer Ordnung vorgesehen werden,
daß in dem Prozessor (10) durch Decodieren des w-Bits in dem Befehl bestimmt wird, ob eine Operation an den Direktdaten Wort- oder Byte-Länge hat,
daß durch Decodieren des l-Bits in dem Befehl bestimmt wird, ob die Direktdaten Wort- oder Byte-Länge haben, und
daß die Direktdaten durch Kopieren des Wertes des Vorzeichen- Bits in sämtliche Bitspositionen höherer Ordnung verlängert werden, wenn die Operation Wort-Länge und die Direktdaten eine Byte-Länge haben,
wobei Operationen an den Daten unabhängig von der Länge der Direktdaten auf identischer Hardware ausgeführt werden können.
DE2903349A 1978-01-31 1979-01-29 Prozessor und Verfahren zur Datenverarbeitung Expired - Fee Related DE2903349C2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US05/873,777 US4363091A (en) 1978-01-31 1978-01-31 Extended address, single and multiple bit microprocessor

Publications (2)

Publication Number Publication Date
DE2903349A1 DE2903349A1 (de) 1979-08-09
DE2903349C2 true DE2903349C2 (de) 1995-08-31

Family

ID=25362291

Family Applications (1)

Application Number Title Priority Date Filing Date
DE2903349A Expired - Fee Related DE2903349C2 (de) 1978-01-31 1979-01-29 Prozessor und Verfahren zur Datenverarbeitung

Country Status (4)

Country Link
US (2) US4363091A (de)
DE (1) DE2903349C2 (de)
GB (2) GB2013380B (de)
HK (1) HK14585A (de)

Families Citing this family (68)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4521858A (en) * 1980-05-20 1985-06-04 Technology Marketing, Inc. Flexible addressing and sequencing system for operand memory and control store using dedicated micro-address registers loaded solely from alu
EP0040703B1 (de) * 1980-05-23 1986-07-16 International Business Machines Corporation Verbesserung eines Datenverarbeitungsapparates vom Typ System/370
GB2077009B (en) * 1980-05-30 1985-04-17 Fairchild Camera Instr Co Microprocessor
US4577282A (en) 1982-02-22 1986-03-18 Texas Instruments Incorporated Microcomputer system for digital signal processing
US4531200A (en) * 1982-12-02 1985-07-23 International Business Machines Corporation Indexed-indirect addressing using prefix codes
JPS59174948A (ja) * 1983-03-25 1984-10-03 Toshiba Corp 情報処理装置
US4574348A (en) * 1983-06-01 1986-03-04 The Boeing Company High speed digital signal processor architecture
US4739475A (en) * 1983-09-20 1988-04-19 Mensch Jr William D Topography for sixteen bit CMOS microprocessor with eight bit emulation and abort capability
US5175816A (en) * 1984-10-05 1992-12-29 Hitachi, Ltd. Method and apparatus for bit operational process
US5265204A (en) * 1984-10-05 1993-11-23 Hitachi, Ltd. Method and apparatus for bit operational process
US6552730B1 (en) 1984-10-05 2003-04-22 Hitachi, Ltd. Method and apparatus for bit operational process
JPH0776917B2 (ja) * 1984-12-29 1995-08-16 ソニー株式会社 マイクロコンピユ−タ
JPS621047A (ja) * 1985-02-14 1987-01-07 Nec Corp メモリ回路を有する半導体装置
IT1183808B (it) * 1985-04-30 1987-10-22 Olivetti & Co Spa Circuito elettronico per collegare un microprocessore ad una memoria ad elevata capacita
US4972338A (en) * 1985-06-13 1990-11-20 Intel Corporation Memory management for microprocessor system
JPH0827716B2 (ja) * 1985-10-25 1996-03-21 株式会社日立製作所 データ処理装置及びデータ処理方法
IT1184013B (it) * 1985-12-13 1987-10-22 Elsag Memoria ad elevata capacita accessibile a diverse agenti
US4766531A (en) * 1986-04-14 1988-08-23 Motorola, Inc. Method and apparatus for generating the next microaddress for a micromachine
JPS63170736A (ja) * 1987-01-09 1988-07-14 Toshiba Corp マイクロプロセツサ
US4849875A (en) * 1987-03-03 1989-07-18 Tandon Corporation Computer address modification system with optional DMA paging
US4891752A (en) * 1987-03-03 1990-01-02 Tandon Corporation Multimode expanded memory space addressing system using independently generated DMA channel selection and DMA page address signals
US5233695A (en) * 1987-03-31 1993-08-03 Kabushiki Kaisha Toshiba Microprocessor with a reduced size microprogram
US4926322A (en) * 1987-08-03 1990-05-15 Compag Computer Corporation Software emulation of bank-switched memory using a virtual DOS monitor and paged memory management
US5101339A (en) * 1987-08-10 1992-03-31 Tandon Corporation Computer address modification system using writable mapping and page stores
JPS6473430A (en) * 1987-09-14 1989-03-17 Hudson Soft Co Ltd Memory access control device
US5261113A (en) * 1988-01-25 1993-11-09 Digital Equipment Corporation Apparatus and method for single operand register array for vector and scalar data processing operations
US5155818A (en) * 1988-09-28 1992-10-13 Data General Corporation Unconditional wide branch instruction acceleration
US5653238A (en) * 1988-12-06 1997-08-05 Exergen Corporation Radiation detector probe
JP3063006B2 (ja) * 1989-02-08 2000-07-12 インテル・コーポレーション マイクロプログラムされるコンピュータ装置及びマイクロコードシーケンスメモリをアドレツシングする方法
GB2230116B (en) * 1989-04-07 1993-02-17 Intel Corp An improvement for pipelined decoding of instructions in a pipelined processor
US5293592A (en) * 1989-04-07 1994-03-08 Intel Corporatino Decoder for pipelined system having portion indicating type of address generation and other portion controlling address generation within pipeline
JP2993975B2 (ja) * 1989-08-23 1999-12-27 株式会社リコー 中央演算処理装置
JPH0398145A (ja) * 1989-09-11 1991-04-23 Hitachi Ltd マイクロプロセッサ
FR2652926B1 (fr) * 1989-10-06 1994-07-08 Bull Sa Procede d'exploitation de la memoire dans un systeme informatique du type a adressage virtuel et dispositif pour la mise en óoeuvre dudit procede.
US5278974A (en) * 1989-12-04 1994-01-11 Digital Equipment Corporation Method and apparatus for the dynamic adjustment of data transfer timing to equalize the bandwidths of two buses in a computer system having different bandwidths
JP2658473B2 (ja) * 1990-02-26 1997-09-30 日本電気株式会社 マイクロコンピュータ
US5706460A (en) * 1991-03-19 1998-01-06 The United States Of America As Represented By The Secretary Of The Navy Variable architecture computer with vector parallel processor and using instructions with variable length fields
JP3181307B2 (ja) * 1991-04-25 2001-07-03 株式会社東芝 命令処理装置
JPH07500437A (ja) * 1991-10-24 1995-01-12 インテル コーポレイシヨン データ処理システム
US5361370A (en) * 1991-10-24 1994-11-01 Intel Corporation Single-instruction multiple-data processor having dual-ported local memory architecture for simultaneous data transmission on local memory ports and global port
WO1993019416A1 (en) * 1992-03-25 1993-09-30 Zilog, Inc. Fast instruction decoding in a pipeline processor
EP0577875A1 (de) * 1992-07-09 1994-01-12 Siemens Nixdorf Informationssysteme Aktiengesellschaft Befehlsverarbeitungseinheit für nach dem Fliessbandprinzip arbeitende Datenverarbeitungsanlagen
CA2100540A1 (en) * 1992-10-19 1994-04-20 Jonel George System and method for performing resource reconfiguration in a computer system
GB9226463D0 (en) * 1992-12-18 1993-02-10 Univ London Integrated circuits
US5408674A (en) * 1992-12-23 1995-04-18 Amdahl Corporation System for checking the validity of two byte operation code by mapping two byte operation codes into control memory in order to reduce memory size
US5680632A (en) * 1992-12-24 1997-10-21 Motorola, Inc. Method for providing an extensible register in the first and second data processing systems
US6058473A (en) * 1993-11-30 2000-05-02 Texas Instruments Incorporated Memory store from a register pair conditional upon a selected status bit
TW234175B (en) * 1994-02-08 1994-11-11 Meridian Semiconductor Inc Randomly-accessible instruction buffer for microprocessor
US6204796B1 (en) 1994-07-01 2001-03-20 Gemstar Development Corporation Apparatus and methods for generating codes for controlling appliances from a remote controller
TW267222B (en) * 1994-10-05 1996-01-01 Ibm Improved method and system of addressing
US5742282A (en) * 1995-02-28 1998-04-21 Eastman Kodak Company 16 bit address access using 8 bit registers
US5867701A (en) * 1995-06-12 1999-02-02 Intel Corporation System for inserting a supplemental micro-operation flow into a macroinstruction-generated micro-operation flow
US5774711A (en) * 1996-03-29 1998-06-30 Integrated Device Technology, Inc. Apparatus and method for processing exceptions during execution of string instructions
US5752015A (en) * 1996-03-29 1998-05-12 Integrated Device Technology, Inc. Method and apparatus for repetitive execution of string instructions without branch or loop microinstructions
US5742781A (en) * 1996-08-09 1998-04-21 Hitachi America, Ltd. Decoded instruction buffer apparatus and method for reducing power consumption in a digital signal processor
GB2317467B (en) * 1996-09-23 2000-11-01 Advanced Risc Mach Ltd Input operand control in data processing systems
US5826074A (en) * 1996-11-22 1998-10-20 S3 Incorporated Extenstion of 32-bit architecture for 64-bit addressing with shared super-page register
US5924117A (en) * 1996-12-16 1999-07-13 International Business Machines Corporation Multi-ported and interleaved cache memory supporting multiple simultaneous accesses thereto
US5898865A (en) * 1997-06-12 1999-04-27 Advanced Micro Devices, Inc. Apparatus and method for predicting an end of loop for string instructions
US6243798B1 (en) * 1997-10-28 2001-06-05 Microchip Technology Incorporated Computer system for allowing a two word jump instruction to be executed in the same number of cycles as a single word jump instruction
US6105125A (en) * 1997-11-12 2000-08-15 National Semiconductor Corporation High speed, scalable microcode based instruction decoder for processors using split microROM access, dynamic generic microinstructions, and microcode with predecoded instruction information
JP2001067335A (ja) 1999-06-23 2001-03-16 Denso Corp マイクロコンピュータ
US7376814B1 (en) * 1999-09-07 2008-05-20 Nxp B.V. Method for forming variable length instructions in a processing system
US6614789B1 (en) * 1999-12-29 2003-09-02 Nasser Yazdani Method of and apparatus for matching strings of different lengths
US7334116B2 (en) * 2004-10-06 2008-02-19 Sony Computer Entertainment Inc. Bit manipulation on data in a bitstream that is stored in a memory having an address boundary length
US8806183B1 (en) 2006-02-01 2014-08-12 Ixys Ch Gmbh Blank bit and processor instructions employing the blank bit
JP5357475B2 (ja) * 2008-09-09 2013-12-04 ルネサスエレクトロニクス株式会社 データプロセッサ
CN102262595B (zh) * 2011-07-29 2014-04-02 航天恒星科技有限公司 一种微处理器扩展寻址方法

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3657705A (en) * 1969-11-12 1972-04-18 Honeywell Inc Instruction translation control with extended address prefix decoding
US3793631A (en) * 1972-09-22 1974-02-19 Westinghouse Electric Corp Digital computer apparatus operative with jump instructions
US3818460A (en) * 1972-12-29 1974-06-18 Honeywell Inf Systems Extended main memory addressing apparatus
US3786436A (en) * 1973-03-14 1974-01-15 Gte Automatic Electric Lab Inc Memory expansion arrangement in a central processor
FR122199A (de) * 1973-12-17
US4050058A (en) * 1973-12-26 1977-09-20 Xerox Corporation Microprocessor with parallel operation
US3949378A (en) * 1974-12-09 1976-04-06 The United States Of America As Represented By The Secretary Of The Navy Computer memory addressing employing base and index registers
JPS5171648A (de) * 1974-12-18 1976-06-21 Panafacom Ltd
US3976976A (en) * 1975-04-04 1976-08-24 The United States Of America As Represented By The Secretary Of The Navy Method and means to access and extended memory unit
US4042911A (en) * 1976-04-30 1977-08-16 International Business Machines Corporation Outer and asynchronous storage extension system
US4092715A (en) * 1976-09-22 1978-05-30 Honeywell Information Systems Inc. Input-output unit having extended addressing capability
US4079455A (en) * 1976-12-13 1978-03-14 Rca Corporation Microprocessor architecture
US4181934A (en) * 1976-12-27 1980-01-01 International Business Machines Corporation Microprocessor architecture with integrated interrupts and cycle steals prioritized channel

Also Published As

Publication number Publication date
DE2903349A1 (de) 1979-08-09
GB2059124A (en) 1981-04-15
GB2013380B (en) 1982-04-21
HK14585A (en) 1985-03-08
GB2059124B (en) 1983-02-09
US4449184A (en) 1984-05-15
US4363091A (en) 1982-12-07
GB2013380A (en) 1979-08-08

Similar Documents

Publication Publication Date Title
DE2903349C2 (de) Prozessor und Verfahren zur Datenverarbeitung
DE69232232T2 (de) Mikrocomputer
DE69833008T2 (de) Prozessor mit instruktionskodierung mittels eines schablonenfeldes
DE69131637T2 (de) Registerhaltige Datenbearbeitung in einem Prozessor mit reduziertem Befehlssatz
DE69130379T2 (de) Datenvorausladebefehl in einem Prozessor mit reduziertem Befehlssatz
DE69308548T2 (de) Vorrichtung und verfahren zum befehlsabschluss in einem superskalaren prozessor.
DE3650602T2 (de) Datenverarbeitungssystem
DE68927855T2 (de) Verfahren und Datenverarbeitungseinheit zur Vorverarbeitung von implizierten Spezifizierern in einem Pipeline-Prozessor
DE69707486T2 (de) Architektur eines integrierten bausteins zur digitalen signalverarbeitung
DE3685913T2 (de) Vektorenverarbeitung.
DE2846495C2 (de) Zentraleinheit
DE3688824T2 (de) Datenverarbeitungssystem.
DE69129881T2 (de) Verzweigung in einem Pipeline-Prozessor
DE3851746T2 (de) Sprungvorhersage.
DE69032174T2 (de) Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen
DE69729974T2 (de) Datenverarbeitungsschaltung, Mikrocomputer und elektronische Einrichtung
DE3424962C2 (de)
DE2230102A1 (de) Rechenwerk fuer variable wortlaengen
DE1246289B (de) Bedingungsregister fuer eine programmgesteuerte Datenverarbeitungsanlage
DE2411963B2 (de) Datenverarbeitungsanlage
DE2847934A1 (de) Datenverarbeitungseinrichtung mit einem mikrobefehlsspeicher
CH650600A5 (de) Zentralprozessoreinheit einer datenverarbeitungsanlage mit operationscode-erweiterungsregister.
DE69133571T2 (de) Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen
DE3741850A1 (de) Ausfuehrungseinheit fuer einen i/o-prozessor
DE3121742C2 (de) Mikroprogramm-Steuereinrichtung

Legal Events

Date Code Title Description
8110 Request for examination paragraph 44
8125 Change of the main classification

Ipc: G06F 9/22

D2 Grant after examination
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee