DE69816775T2 - Vorrichtung zur datenverarbeitung mit stapelstruktur - Google Patents

Vorrichtung zur datenverarbeitung mit stapelstruktur Download PDF

Info

Publication number
DE69816775T2
DE69816775T2 DE69816775T DE69816775T DE69816775T2 DE 69816775 T2 DE69816775 T2 DE 69816775T2 DE 69816775 T DE69816775 T DE 69816775T DE 69816775 T DE69816775 T DE 69816775T DE 69816775 T2 DE69816775 T2 DE 69816775T2
Authority
DE
Germany
Prior art keywords
stack
bits
register
execution unit
unit
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
DE69816775T
Other languages
English (en)
Other versions
DE69816775D1 (de
Inventor
Claudius Marnix VLOT
Eugene Paul LIPPENS
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.)
Koninklijke Philips NV
Original Assignee
Koninklijke Philips Electronics NV
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 Koninklijke Philips Electronics NV filed Critical Koninklijke Philips Electronics NV
Application granted granted Critical
Publication of DE69816775D1 publication Critical patent/DE69816775D1/de
Publication of DE69816775T2 publication Critical patent/DE69816775T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/76Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data
    • G06F7/78Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor
    • G06F7/785Arrangements for rearranging, permuting or selecting data according to predetermined rules, independently of the content of the data for changing the order of data flow, e.g. matrix transposition or LIFO buffers; Overflow or underflow handling therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using a RAM
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30134Register stacks; shift registers
    • 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/30163Decoding the operand specifier, e.g. specifier format with implied specifier, e.g. top of stack
    • 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory

Landscapes

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

Description

  • Die Erfindung bezieht sich auf eine Vorrichtung zur Datenverarbeitung nach Anspruch 1. Eine derartige Vorrichtung zur Datenverarbeitung wird in der Übersicht zum Aufbau des Prozessors 80C51XA von Philips im Datenhandbuch IC25 auf den Seiten 33 bis 56 beschrieben, das 1996 von Philips Semiconductors veröffentlicht wurde.
  • Ein Stapel kann beispielsweise mittels eines Stapelzeigerregisters beibehalten werden, das einen Speicheradressenzeiger speichert. Während einer Operation des Hinzufügens (engl. push operation) wird der Speicheradressenzeiger inkrementiert, und Informationen werden an dem Speicherplatz gespeichert, auf den er zeigt. Durch aufeinander folgende Push-Operationen werden somit Informationen in eine Reihe von aufeinander folgenden Speicherplätzen geschrieben. Diese Informationen können durch Adressierung der Speicherplätze gelesen werden, die zur Stapelspitze gehören.
  • Die Operation des Auslesens (engl. pop operation) ist das Gegenteil der Push-Operation. Während einer Pop-Operation werden Informationen aus dem Speicherplatz gelesen, auf den der Adressenzeiger zeigt, und der Speicheradressenzeiger wird dekrementiert.
  • Der Prozessor 80C51XA unterstützt einen derartigen Stapelmechanismus, da er über Befehle mit einem Adressiermodus verfügt, bei dem die Adressen in Bezug auf ein Register ausgedrückt werden, das einen Speicheradressenzeiger enthält. Durch den Verweis auf ein Register identifiziert der Befehl den Speicheradressenzeiger in dieser Adresse als den Zeiger auf den Speicherplatz, der als Quelle eines Operanden oder als Ziel eines Ergebnisses zu verwenden ist. Mehrere Register können auf diese Weise eingesetzt werden, und daher kann jedes als Stapelzeiger verwendet werden. Der Prozessor 80CS1XA definiert auch speziell einen Benutzerstapel und einen Systemstapel für den Rücksprung von Prozeduraufrufen und Unterbrechungen. Der Stapelzeiger auf diese Stapel wird auf eines der normalen Register abgebildet. Dies ist in der Patentschrift US-A-5 319 757 dargelegt.
  • Es gibt einen Adressiermodus, in dem die Ausführung eines Befehls das Register, auf das er sich bezieht, dazu veranlasst, zusammen mit seiner funktionellen Operation des Befehls inkrementiert oder dekrementiert zu werden. Die Inkremente oder De kremente erfolgen in Einheiten von 16-Bit-Wortadressen, das heißt, der Inhalt des Registers wird jeweils um 2 Byte-Adressen inkrementiert oder dekrementiert.
  • Stapel bieten einen leistungsfähigen Mechanismus für die Verwaltung von Informationen, insbesondere wenn sie dazu verwendet werden, Programme auszuführen, die durch höhere Programmiersprachen definiert werden. Dies bedeutet, dass eine große Anzahl von Daten auf einem Stapel gespeichert wird, und dass ein Stapel eine beträchtliche Menge an Speicherplatz mit wahlfreiem Zugriff nutzt.
  • Der Erfindung liegt unter anderem die Aufgabe zugrunde, eine Verarbeitungsvorrichtung zu schaffen, in der weniger Speicherplatz für gestapelte Informationen benötigt wird.
  • Der Erfindung liegt ferner die Aufgabe zugrunde, den Umfang des zum Speichern von Programmen, die Stapel nutzen, erforderlichen Speicherplatzes zu reduzieren.
  • Der Erfindung liegt außerdem die Aufgabe zugrunde, einen leistungsfähigen Vorrat an Stapelverarbeitungsbefehlen zu schaffen, ohne dass die Befehle übermäßig lang werden.
  • Die erfindungsgemäße Verarbeitungsvorrichtung ist in Anspruch 1 definiert. Der erste Stapel kann beispielsweise für numerische Datenwerte genutzt werden, die als Operanden in verschiedenen arithmetischen bzw. logischen Befehlen verwendet werden sollen, wobei die Basiseinheit in diesem Fall beispielsweise ein 16-Bit-Wort ist, und der zweite Stapel kann für Adressen genutzt werden, die als Adressen für Operanden in derartigen arithmetischen bzw. logischen Befehlen verwendet werden sollen, wobei die Basiseinheit in diesem Fall beispielsweise ein 24-Bit-Wort ist.
  • Somit ist die Länge der Basiseinheiten beispielsweise 16 Bits und 24 Bits für den ersten bzw. den zweiten Stapel. Wenn ein erster und ein zweiter Stapelzeiger verwendet werden, die auf einen in Bytes adressierten Speicher zeigen, wird infolgedessen der erste Stapelzeiger um 2-Byte-Adressen als Ergebnis einer Push- bzw. einer Pop-Operation und der zweite Stapelzeiger um 3-Byte-Adressen als Ergebnis einer Push- oder einer Pop-Operation verändert. Der erste Stapel kann beispielsweise für numerische Datenwerte genutzt werden, die als Operanden in verschiedenen arithmetischen bzw. logischen Befehlen verwendet werden sollen, und der zweite Stapel kann für Adressen genutzt werden, die als Adressen für Operanden in derartigen arithmetischen bzw. logischen Befehlen verwendet werden sollen.
  • Die Basislänge von Datenwerten und Adressen unterscheidet sich im Allgemeinen aufgrund der unterschiedlichen Nutzung dieser beiden Arten von Informationen. Wenn im Gegensatz zu der Erfindung nur eine Basiseinheitslänge für die Stapelung beider Arten von Informationen zur Verfügung steht, bedeutet dies, dass Speicherplatz auf dem Stapel für nutzlose Informationen verschwendet wird. Dies wird durch die Erfindung verhindert, da Stapel mit unterschiedlichen Längen für die Basisstapeleinheiten verwendet werden. Die Erfindung beschränkt sich nicht auf Adressen und Daten, sondern kann unter allen Umständen angewendet werden, bei denen zwei Arten von Informationen mit unterschiedlichen bedeutungsvollen Längen verwendet werden.
  • Andere Ausführungsbeispiele der erfindungsgemäßen Verarbeitungsvorrichtung sind in den beigefügten abhängigen Ansprüchen beschrieben.
  • Diese und weitere vorteilhafte Aspekte der erfindungsgemäßen Verarbeitungsvorrichtung werden ohne Anspruch auf Vollständigkeit in Bezug auf die folgenden Zeichnungen beschrieben. Es zeigen:
  • 1 eine vereinfachte Vorrichtung zur Datenverarbeitung zur Erläuterung des Prinzips der Erfindung;
  • 2a/b einen Teil eines Befehlsvorrats einer Vorrichtung zur Datenverarbeitung;
  • 3 eine Vorrichtung zur Datenverarbeitung mit speziellen Stapelcaches/-pufferspeichern.
  • 1 zeigt eine vereinfachte Vorrichtung zur Datenverarbeitung zur Erläuterung des Prinzips der Erfindung. Die Vorrichtung umfasst eine Einheit 10 zur Befehlsausführung und einen Speicher 12, die beide mit einem Datenbus 14a und einem Adressenbus 14b verbunden sind. Die Vorrichtung umfasst ferner eine erste und eine zweite Stapelsteuerungseinheit 16, 18, deren Steuerungsschnittstelle mit der Einheit 10 zur Befehlsausführung und deren Ausgang mit dem Adressenbus 14b verbunden ist.
  • Die erste Stapelsteuerungseinheit 16 umfasst ein Stapelzeigerregister 160 mit einem Ausgang, der mit einem Versatzsubtrahierglied 163 verbunden ist. Die Steuerungsschnittstelle zur Ausführungseinheit 10 umfasst einen Versatzeingang, der über eine Verschiebeeinheit 162 mit einem Eingang des Versatzsubtrahiergliedes 163 verbunden ist. Der Ausgang des Versatzsubtrahiergliedes 163 ist über eine Busschnittstelleneinheit 164 mit dem Adressenbus 14b verbunden. Der Ausgang des Stapelzeigerregisters ist ebenso über ein Inkrementier-/Dekrementierglied 169 mit einem ersten Eingang eines Multiplexers 165 verbunden. Der zweite Eingang des Multiplexers 165 ist mit einem Stapelvoreinstellausgang der Einheit 10 zur Befehlsausführung verbunden. Der Ausgang des Multiplexers 165 ist mit einem Eingang des Stapelzeigerregisters 160 verbunden. Die Steuereingänge des Multiplexers 165, des Stapelzeigerregisters 160 und der Busschnittstelleneinheit 164 sind über die Steuerungsschnittstelle mit der Einheit 10 zur Befehlsausführung verbunden.
  • Die zweite Stapelsteuerungseinheit 18 umfasst einen zweiten Stapelzeiger 180 und entspricht der ersten Stapelsteuerungseinheit 16 mit der Ausnahme, dass der Versatzeingang 181 über eine Multiplizierschaltung 186 mit dem Versatzsubtrahierglied 183 verbunden ist. Die Multiplizierschaltung 186 umfasst eine Verschiebeeinheit 182 und ein weiteres Addierglied 187. Der Versatzeingang 181 ist direkt und über die Verschiebeeinheit 182 mit den Eingängen des weiteren Addiergliedes 187 verbunden. Der Eingang des weiteren Addiergliedes 187 ist mit dem Eingang des Versatzsubtrahiergliedes 183 verbunden.
  • Die 2a, b stellen eine Tabelle dar, die verschiedene mögliche Befehle vom Befehlsvorrat der Einheit 10 zur Befehlsausführung zeigt. Der Befehlsvorrat nutzt primär zwei Arten von Registern: A-Register (oder Adressenregister) mit 24 Bits und D-Register (oder Datenregister) mit 16 Bits. Bei der vereinfachten Vorrichtung zur Datenverarbeitung aus 1 entsprechen diese „Register" in der Tat Plätzen im Speicher 12.
  • Der Befehlsvorrat umfasst Lade- (Ld) und Speicher- (St) Operationen zum Laden und Speichern von Informationen aus dem Speicher in ein Register bzw. aus einem Register in den Speicher. Es existieren verschiedene Versionen dieser Befehle (beispielsweise LdA, LdB, LdD) in Abhängigkeit beispielsweise von dem betroffenen Quellen- oder Zielregister (beispielsweise ein Adressenregister oder ein Datenregister) und der Art der zu ladenden Daten (beispielsweise ganzes Wort oder halbes Wort). Zusätzlich umfasst der Befehlsvorrat Befehle zum Ausführen zahlreicher arithmetischer und logischer Operationen, wie Add (Addieren), Sub (Subtrahieren), Shl, Shr (Verschieben nach links bzw. rechts) And Or, Xor (exklusives ODER), Not (logische Inversion). Ferner umfasst der Befehlsvorrat Steueroperationen wie Br (Verzweigen), J (Springen) usw.
  • Die Quellenoperanden der arithmetischen und logischen Operationen stammen im Allgemeinen von D-Registern oder werden direkt in den entsprechenden Befehlen definiert. Die Adressen der Quellenoperanden von Ladeoperationen und der Zieloperanden von Speicheroperation werden im Allgemeinen direkt in den Befehlen durch eine Speicheradresse oder indirekt durch eine in einem A-Register gespeicherte Adresse definiert, auf die sich der Befehl bezieht. Zusätzlich existiert ein Add-Befehl für A-Register.
  • Für viele Befehle existiert eine Anzahl von Versionen, die sich nur durch den Adressiermodus unterscheiden, der verwendet wird, um Operanden zu handhaben, sonst jedoch die gleiche Operation definieren. So kommen die Befehle für LdA in zwei Hauptversionen vor, wobei eine erste Hauptversion ein Register und einen Versatz spezifiziert. Der Operand ist im Speicher bei einer Adresse angeordnet, die durch Addieren des Versatzes zum Inhalt des angegebenen Registers erzielt wird. Bei entsprechenden Versionen der ersten Hauptversion ist der Versatz 5 Bits oder 13 Bits lang, und der gesamte Befehl ist 16 Bits bzw. 28 Bits lang (der Operationscode ist bei der zweiten Version länger). Eine zweite Hauptversion spezifiziert den Operandenwert direkt. Bei entsprechenden Versionen der zweiten Hauptversion ist der Operandenwert 8 Bits oder 24 Bits lang, und die Befehle sind 20 bzw. 36 Bits lang.
  • In den 2a, b sind Maschinenbefehle mittels einer Beschreibung von Assemblerbefehlen für die Vorrichtung dargestellt. Ein Assemblerbefehl umfasst einen Funktionscode gefolgt von einer Operandenbeschreibung. Die erste Spalte zeigt ein mnemonisches Symbol für den Funktionscode. Die zweite Spalte zählt verschiedene Versionen eines Befehls mit der gleichen Mnemonik. Die dritte Spalte beschreibt das Format der Operandenbeschreibung. Die vierte bis achte Spalte zeigt die Anzahl von Bits, die in dem Maschinenbefehl für den Funktionscode (Operationscode) verwendet werden, und den ersten, zweiten, dritten bzw. vierten Operanden (wenn vorhanden). Die letzten Spalten zeigen die Gesamtlänge des Befehls in 4-Bit-Nibbles.
  • Bei dem in der dritten Spalte beschriebenen Format werden unterschiedliche Operanden eines Befehls durch Kommata getrennt. Normalerweise gibt der erste Operand den Platz an, an dem das Ergebnis des Befehls gespeichert werden soll, und der zweite und mögliche weitere Operanden geben das Argument an, das bei der Durchführung der Funktion verwendet wird. Im Fall der Befehle LdB und Shr (Verschieben nach rechts) geht den anderen Operanden ein Operand „s" voraus, der angibt, ob eine Vorzeichenerweiterung stattfinden soll. Im Fall der Operationen St bezieht sich der erste Operand auf die Quelle und der zweite Operand auf die Adresse des Ziels.
  • Ein Eintrag für einen Operanden, der „An" enthält, bedeutet, dass sich der Operand auf ein auswählbares Register „A" bezieht. „Dn" bedeutet, dass sich der Operand auf ein auswählbares Register „D" bezieht. Die Verwendung der Zeichen "+", "–" und "*" vor und nach Registern wird weiter unten erläutert. Wenn der Bezug auf ein Register in Klammern gesetzt wird „(" ")", bedeutet dies, dass der Inhalt des betreffenden Registers als Adresse für den Operanden verwendet wird. Folgt dem Verweis auf ein Register in Klammern ein Zeichen "+" und das Wort „offset", bedeutet dies, dass der Assemblerbefehl einen Versatzwert enthält, der zu dem Inhalt des Registers addiert werden muss, um die Adresse des Operanden zu erzielen. Dem Wort „offset" folgt eine Zahl, die die Anzahl von Bits angibt, die für diesen Operanden in dem speziellen Befehl verwendet werden.
  • In einer Reihe von Befehlen ist ein Wert explizit enthalten, der als Parameter für die Funktion zu verwenden ist. Dies wird verschiedentlich durch das Wort „offset" ohne Klammern oder ein Zeichen „#" gefolgt von dem Wort „immediate" oder „imm", angegeben. In jedem Fall kann diesen Worten eine Zahl folgen, die die Anzahl von Bits angibt, die in diesem Befehl zur Codierung des Wertes verwendet werden. Weitere Einzelheiten der Befehle werden im Folgenden erläutert.
  • Im Betrieb lädt die Einheit 10 zur Befehlsausführung nacheinander den Maschinencode für Befehle vom Speicher 12 und führt sie aus. Dies beginnt, wenn die Befehlsausführungseinheit 10 eine Adresse des Befehls zum Adressenbus 14b ausgibt. Als Reaktion leitet der Speicher 12 (mindestens einen ersten Teil) des Befehls zurück, der dann decodiert wird. Wenn sich aus dem geladenen Teil entnehmen lässt, dass der Befehl noch nicht vollständig ist (Befehle können unterschiedliche Längen aufweisen), lädt die Ausführungseinheit 10 auch den Rest des Befehls. Im Fall eines arithmetischen Befehls wählt die Befehlsausführungseinheit 10 dann die Operanden aus und leitet sie zu einem Rechenwerk (in der Befehlseinheit; nicht getrennt dargestellt) weiter; das Ergebnis der Verarbeitung durch das Rechenwerk wird in einem Zielregister gespeichert. Im Fall einer Lade-/Speicheroperation berechnet die Befehlsausführungseinheit die Adresse und ruft Informationen an dieser Adresse vom Speicher ab oder speichert Infonmationen an dieser Adresse im Speicher.
  • Die D-Register und ein Teil der A-Register sind als ein separater D-Stapel bzw. A-Stapel organisiert. Informationen werden auf dem D-Stapel in Einheiten von zwei Bytes (16 Bits) und auf dem A-Stapel in Einheiten von drei Bytes (24 Bits) gespeichert. Bei dem vereinfachten Datenverarbeitungssystem in 1 werden die Inhalte jedes Stapels im Speicher 12 gespeichert, und die Stapelzeiger 160, 180 in der ersten und der zweiten Stapelsteuerungseinheit 16, 18 enthalten Adressen, die auf die Speicherplätze zeigen, an denen die Spitze des D-Stapels bzw. die Spitze des A-Stapels gespeichert ist. Die Befehlsausführungseinheit interpretiert Verweise auf drei Register D0, D1, D2 usw. in Befehlen als Verweise auf den Platz an der Spitze des D-Stapels, den Platz ein Wort unterhalb der Spitze des D-Stapels bzw. den Platz zwei Worte unterhalb der Spitze des D-Stapels. Auf die gleiche Weise interpretiert die Befehlsausführungseinheit Verweise auf drei Register A0, A1, A2 usw. in Befehlen als Verweise auf den Platz an der Spitze des A-Stapels, den Platz drei Bytes unterhalb der Spitze des A-Stapels bzw. den Platz sechs Bytes unterhalb der Spitze des A-Stapels. Bei einer Version des Befehls LdD (siebte Version) wird der Quellenoperand als Dn_ext bezeichnet und mit Hilfe von 3 Bits codiert. Bei dieser Version des Befehls LdD kann der Wert in dem Feld Dn_ext acht Werte annehmen, die sich auf so viele Positionen verschiedener Basiseinheiten gezählt von der Stapelspitze beziehen, wie durch den Befehl LdD in D0 geladen werden können.
  • Trifft die Befehlseinheit 10 in einem Befehl einen Verweis auf ein D-Register an, das einer Position im D-Stapel entspricht, gibt sie an die erste Stapelsteuerungseinheit 16 einen Code aus, der die Anzahl der Register darstellt, um die dieses Register im Vergleich zu dem Register verschoben ist, das der Spitze des D-Stapels entspricht. Die Verschiebeeinheit 162 verschiebt diese Anzahl um ein Bit nach höherer Wertigkeit, indem sie effektiv die Anzahl mit Zwei multipliziert. Das Versatzsubtrahierglied 163 subtrahiert das Ergebnis vom Inhalt des Stapelzeigerregisters 160. Gesteuert von der Befehlsausführungseinheit 10 wird der Ausgang des Versatzsubtrahiergliedes dem Adresseneingang des Speichers 12 zugeführt, und Informationen werden in oder aus dem adressierten Platz geschrieben oder gelesen, was einen Lese- oder Schreibvorgang des betroffenen D-Registers darstellt.
  • Der Einfachheit halber wird angenommen, dass der Datenpfad zum Speicher breit genug für jede Basiseinheit von Informationen auf dem Stapel ist, und dass keine Besehränkungen hinsichtlich der Adressen bestehen, die verwendet werden können. Wird diese Annahme nicht erfüllt, kann die Busschnittstelleneinheit 164 den Informationstransfer in mehr als einen Speicherzyklus aufteilen, indem beispielsweise aufeinander folgende Bytes übertragen werden, die ein Wort ergeben, oder erst ein Anfangsteil der Basiseinheit über tragen wird, der sich nicht an einer Wortgrenze befindet und daher nicht in einer Worttransferoperation adressiert werden kann.
  • Trifft die Befehlseinheit 10 in einem Befehl einen Verweis auf ein A-Register an, das einer Position im A-Stapel entspricht, wird die zweite Stapelsteuerungseinheit 18 im Wesentlichen auf die gleiche Weise wie die erste Stapelsteuerungseinheit 16 verwendet. In diesem Fall wird die Anzahl der Register, um die dieses Register im Vergleich zu dem Register, das der Spitze dieses A-Stapels entspricht, versetzt ist, effektiv mit Drei multipliziert, indem diese Anzahl zu einer verschobenen Version ihrer selbst addiert wird.
  • Somit wird der berechnete Versatz im Vergleich zu dem Speicherplatz, der sich an der Spitze des Stapels befindet, an die Art des Stapels angepasst: er wird mit der Länge der auf dem Stapel gespeicherten Basiseinheiten multipliziert, d. h. mit Zwei oder Drei in 1, es kann jedoch natürlich jeder andere Faktor verwendet werden in Abhängigkeit von der Art der Informationen, für die der Stapel genutzt wird.
  • Wenn die Befehlsausführungseinheit 10 einen Befehl erhält, Daten vom D-Stapel oder A-Stapel auszulesen oder zu ihm hinzuzufügen, wird der Platz im Speicher 12 an der Stapelspitze adressiert. Gesteuert von der Befehlsausführungseinheit 10 berechnet das Inkrementier-/Dekrementierglied 169, 189 den Stapelzeiger vom Stapelzeigerregister 160, 180 inkrementiert oder dekrementiert um die Länge einer Basiseinheit. Das Ergebnis wird dazu verwendet, das Stapelzeigerregister 160, 180 zu aktualisieren. Im Falle der ersten Stapelsteuerungseinheit 16 für den D-Stapel beträgt dieses Inkrement oder Dekrement zwei. Im Fall der zweiten Stapelsteuerungseinheit 18 für den A-Stapel beträgt dieses Inkrement oder Dekrement drei. Dies ist in jedem Fall die Länge der auf dem Stapel gespeicherten Basiseinheiten.
  • Bei dem in den 2a, b gezeigten Befehlsvorrat bewirken mehrere Befehle, dass die Befehlsausführungseinheit eine Pop- oder eine Push-Operation durchführt und gleichzeitig die Stapelspitze als Operanden- oder Zieladresse verwendet. In diesem Fall ist eine Push-Operation gekennzeichnet durch "+" gefolgt von A0 oder D0, und eine Pop-Operation ist gekennzeichnet durch A0 oder D0 gefolgt von "–". Bei einigen Befehlen ist die Push- und Pop-Operation implizit: in diesem Fall sind keine separaten Bits in dem Maschinenbefehl erforderlich, um eine Push- und Pop-Operation zu codieren. In diesem Fall dient die Angabe von +/– und A0/D0 in den Assemblerbefehlen aus den 2a, b lediglich als Erinnerung. Bei anderen Befehlen ist die Push- oder Pop-Operation optional. In diesem Fall steht +/– in Klammern „[" "]", und ein Bit wird in dem Maschinenbefehl dazu verwendet auszuwählen, ob eine Push- oder eine Pop-Operation auszuführen ist.
  • In der vorangehenden Erläuterung wurde angenommen, dass der Stapelzeiger bei einer Push-Operation inkrementiert und bei einer Pop-Operation dekrementiert wird, und dass der Stapelzeiger auf den Platz der letzten hinzugefügten Information zeigt. Dies stellt nur ein Beispiel dar, und es kann natürlich stattdessen der Stapelzeiger bei einer Push-Operation dekrementiert werden, wobei ein Versatz im Vergleich zum Stapelzeiger berechnet wird, indem er zum Stapelzeiger addiert wird. Der Stapelzeiger kann ferner auf jeden Speicherplatz mit einer feststehenden Beziehung zur Stapelspitze zeigen, beispielsweise auf den Platz, an den die nächsten Informationen als Reaktion auf eine Push-Operation geschrieben werden.
  • Es ist nicht einmal erforderlich, dass bei einer Pop-Operation beide Stapelzeiger in der gleichen Richtung verändert werden. Es kann beispielsweise vorkommen, dass der Stapelzeiger für den D-Stapel bei einer Pop-Operation inkrementiert und im Gegensatz dazu der Stapelzeiger für den A-Stapel bei einer Pop-Operation dekrementiert wird oder umgekehrt. In diesem Fall kann ein einziger Speicheradressenbereich für beide Stapel verwendet werden, wobei ein Stapel vom unteren Ende dieses Bereichs aus anwächst and der andere Stapel vom oberen Ende dieses Bereichs nach unten wächst, bis sie sich treffen. Auf diese Weise kann der gemeinsame Stapelraum durch den Stapel genutzt werden, der den meisten Raum benötigt, auf Kosten des für den anderen Stapel zur Verfügung stehenden Raums. Die Verarbeitungseinheit umfasst in diesem Fall vorzugsweise einen Kollisionsdetektor, der erkennt, ob sich die Stapelzeiger für den A-Stapel und den D-Stapel treffen. Der Kollisionsdetektor erzeugt eine Unterbrechung aufgrund eines Stapelüberlauffehlers, um zu verhindern, dass Daten oder Adressen von einem der Stapel Adressen oder Daten von dem anderen Stapel überschreiben.
  • Ohne von der Erfindung abzuweichen, kann der Stapelzeiger auch als Stapelbasiszeiger beibehalten und ein Zählerwert, der die Anzahl von Basiseinheiten mit auf dem Stapel gespeicherten Informationen darstellt, gespeichert werden. In diesem Fall kann die Stapelspitzenadresse berechnet werden, indem der Zählerwert mit der Länge der Basiseinheit auf dem entsprechenden Stapel multipliziert wird (da diese eine feststehende Länge ist, erfordert die Multiplikation höchstens ein paar Additionen). Die Summe des Produkts und der Stapelbasis ist der Stapelzeiger. Die Speicheradresse einer Basiseinheit eine Anzahl von Einheiten unterhalb der Stapelspitze kann in gleicher Weise berechnet werden, indem zuerst die gegebene Anzahl von dem Zählwert subtrahiert wird.
  • Der Einfachheit halber sind die Stapelsteuerungseinheiten 16, 18 in 1 als vollständig getrennte Einheiten dargestellt, in der Praxis können jedoch mehrere Funktionen dieser Stapelsteuerungseinheiten von gemeinsamen Schaltungen durchgeführt werden. Die Versatzsubtrahierglieder 163, 183 und/oder die Busschnittstelleneinheiten 164 können beispielsweise von den beiden Stapelsteuerungseinheiten gemeinsam genutzt werden, da nur auf einen Stapel auf einmal zugegriffen wird.
  • Werden zwei Bits verwendet, um ein Operandenregister zu identifizieren, so können im Prinzip vier verschiedene Register, d. h. vier Positionen von Basiseinheiten auf dem Stapel, adressiert werden. Bei einem vorteilhaften Ausführungsbeispiel der Erfindung behandelt die Befehlsausführungseinheit 10 einen Verweis auf ein viertes Register D3, A3 auf einem der Stapel als Verweis auf die Stapelspitze, genau wie D0 oder A0; wenn jedoch D3 oder A3 verwendet wird, folgt dem Zugriff auf den Stapel eine Dekrementierung oder geht ihm eine Inkrementierung voraus, falls der Verweis auf A3 oder D3 als Quelle bzw. Ziel eines Operanden verwendet wird. Dies ist in der Tat eine Push- oder Pop-Operation. Durch die Verwendung eines derartigen Registerverweises zur Meldung einer Push- oder Pop-Operation an die Ausführungseinheit 10, erfordern die meisten Push- und Pop-Operationen keinen zusätzlichen getrennten Befehl, und der auf D3 oder A3 verweisende Befehl beansprucht nicht viel von dem Befehlsvorrat. Somit kann der für die Speicherung von Programmen erforderliche Speicherplatz minimiert werden. In den 2a, b ist diese Möglichkeit für eine ausgewählte Anzahl von Befehlen angegeben, indem der entsprechende Operand mit "*" gekennzeichnet ist. Diese Art der Behandlung des Operanden kann auf alle Befehle angewendet werden, die sich auf Register beziehen, oder diese Behandlung kann nur auf ausgewählte Befehle angewendet werden, so dass andere Befehle normalerweise A3 oder D3 für das vierte Register verwenden.
  • Vorzugsweise werden die vier Register D0, D1, D2, D3 und die vier Register A0, A1, A2, A3 unter Verwendung von zwei Bits in dem Befehl codiert. Natürlich können, wenn mehr Register erforderlich sind, die auf den Stapel verweisen, allgemeiner n Bits verwendet werden, wobei 2**n – 1 Werte verwendet werden, um auf verschiedene Versätze zur Stapelspitze zu verweisen, und ein Wert zum Durchführen einer Push- oder Pop-Operation verwendet wird.
  • Die Befehlsausführungseinheit kann Verweise auf zusätzliche Register A4, A5, A6, A7 als Verweise auf lokale Register interpretieren, die sich auf den gleichen lokalen Speicherplatz unabhängig vom Zustand des Stapels beziehen. Beispielsweise kann sich Register A4 auf den A-Stapelzeiger 180, Register A5 auf den D-Stapelzeiger 160, Register A7 auf den Programmzähler und Register A6 auf den Programmähler beziehen, der beim Rücksprung von einem Prozedurabruf zu verwenden ist. Alle diese Register speichern Adressen mit 24 Bits und werden daher A-Register genannt.
  • Im Prinzip können Rücksprungadressen von Unterprogrammaufrufen auch auf dem Adressenstapel gespeichert werden. Die Befehlsausführungseinheit 10 behält jedoch vorzugsweise mindestens einen weiteren Stapel zum Speichern von Rücksprungadressen und für den Rücksprung von Unterbrechungsinformationen, zum Einsatz in den Befehlen JSR (jump to subroutine), RT (return from subroutine), RTI (return from interrupt) usw.
  • Befehle mit indirekten A-Stapel-Verweisen, d. h. Befehle, in denen eine auf dem A-Stapel gespeicherte Adresse dazu verwendet wird, einen Speicherplatz zu adressieren, werden nur bei Lade- und Speicheroperationen in einem Befehlsvorrat verwendet und nicht beispielsweise bei arithmetischen oder logischen Operationen. Dadurch ist es möglich, zwei Stapel mit einem hocheffizienten RISC-ähnlichen Schaltungsaufbau zu kombinieren, der in der Lage ist, einen Befehl pro Taktzyklus auszuführen.
  • Der Befehlsvorrat aus den 2a, b umfasst einige spezielle Befehle, beispielsweise RET mit zwei Bits für Parameter, der einen Rücksprung von einem Unterprogramm kombiniert mit optionalen Pop-Operationen vom A- und D-Stapel bewirkt, wie sie in den beiden Bits codiert sind. Si ist ein Software-Unterbrechungsbefehl und Tr ist ein Trap-Befehl.
  • In der Praxis ist die vereinfachte Datenverarbeitungsvorrichtung aus 1 langsam, da sie für jeden Verweis auf den A-Stapel und den D-Stapel auf den Speicher 10 zugreifen muss. Ohne von der Erfindung abzuweichen, kann dies verbessert werden, indem Informationen, die in den Stapeln vorliegen, in einen Cachespeicher kopiert werden. Hierzu können ein Universal-Cachespeicher oder spezielle Cachespeicher für jeden Stapel verwendet werden. Es können optimal geeignete Stapelverwaltungsverfahren eingesetzt werden, da bekannt ist, dass nur diejenigen Stapelplätze sofort benötigt werden können, auf die explizit in den Befehlen verwiesen wird, und dass auf den Stapel sonst im Allgemeinen nur sequentiell zugegriffen wird. Die Konsistenz zwischen dem Cachespeicher und dem Speicher braucht nicht strikt aufrecht erhalten zu werden, wenn zwingend vorgeschrieben ist, dass Progammierer davon absehen, auf Speicherplätze auf dem Stapel auf andere Weise als über den Stapelmechanismus zuzugeifen.
  • 3 zeigt eine Vorrichtung zur Datenverarbeitung mit speziellen Stapel-Cachespeichern. Die Vorrichtung umfasst eine Befehlsausführungseinheit 30 und einen Speicher 32, die durch einen Adressenbus 34a und einen Datenbus 34b miteinander verbunden sind. Die Vorrichtung umfasst eine erste und eine zweite Stapelsteuerungseinheit 36, 38. Die erste Stapelsteuerungseinheit 36 umfasst eine Registerdatei 360 mit Registern, die goß genug sind, um jeweils eine Basisstapeleinheit zu speichern, eine Registerverwaltungseinheit 362, eine Stapelzeigereinheit 364 und eine Schnittstelleneinheit 366. Die Registerverwaltungseinheit 362 verfügt über einen Registerauswahleingang, der mit der Befehlsausführungseinheit 30 verbunden ist, und über einen Registerauswahlausgang, der mit der Registerdatei 360 verbunden ist. Die Registerdatei ist mit einem Doppelport ausgerüstet, und ihre Zugriffsports sind mit der Befehlsausführungseinheit 30 und der Schnittstelleneinheit 366 verbunden. Die Stapelzeigereinheit 364 verfügt über einen Steuereingang, der mit der Registerverwaltungseinheit 362 verbunden ist, einen Schreibeingang, der mit der Befehlsausführungseinheit 30 verbunden ist, und einen Ausgang, der mit der Befehlsausführungseinheit 30 und der Schnittstelleneinheit 366 verbunden ist. Es existiert eine Steuerverbindung zwischen der Registerverwaltungseinheit 362 und der Schnittstelleneinheit 366. Die Schnittstellenverwaltungseinheit 366 ist ferner mit dem Adressenbus 34a und dem Datenbus 34b verbunden.
  • Während des Betriebs speichern die Register in der Registerdatei 360 entsprechende Informationseinheiten, die auf dem oberen Teil eines der Stapel, beispielsweise dem A-Stapel, gespeichert werden. Die Registerverwaltungseinheit 362 verfolgt eine Übereinstimmung zwischen entsprechenden Positionen auf dem Stapel und Registern in der Registerdatei 360. Diese Übereinstimmung kann wahlweise angepasst werden, oder es kann beispielsweise eine zyklische Beziehung verwendet werden. Wenn ein Befehl auf eine Position an der Spitze des Stapels verweist, gibt die Befehlsausführungseinheit 30 den Verweis zu der Registerverwaltungseinheit 362 aus, die als Reaktion ein Register in der Registerdatei 360 auswählt, das diesem Verweis entspricht. Danach wird dieses Register mit der Befehlsausführungseinheit 30 zum Lesen oder Schreiben einer Basiseinheit mit Informationen verbunden.
  • In Prinzip hält die Registerverwaltungseinheit 362 ein Register in der Registerdatei 360 zum Empfangen hinzugefügter Informationen in Bereitschaft. Wenn ein Befehl eine Push-Operation auf den Stapel verlangt, wählt die Registerverwaltungseinheit 362 dieses Register so aus, dass die Befehlsausführungseinheit 30 eine Basiseinheit mit Informationen in diesem Register speichert. Die Registerverwaltungseinheit 362 befiehlt der Stapelzeigereinheit, den Wert des Stapelzeigers um die Länge einer Basiseinheit mit Informationen zu erhöhen. Die Registerverwaltungseinheit 362 aktualisiert die Übereinstimmung zwischen den Registern und der Position auf dem Stapel, so dass dieses Register der Stapelspitze entspricht und die übrigen Register jeweils einer Position weiter entfernt von der Stapelspitze als vor der Push-Operation entsprechen.
  • Danach befiehlt die Registerverwaltungseinheit 362 der Schnittstelleneinheit 366, die Basiseinheit mit Informationen, die am weitesten von der Stapelspitze entfernt ist, von der Registerdatei 360 zu dem Speicher 32 an den Platz zu übertragen, der ihrer Position auf dem Stapel entspricht; dies kann von der Schnittstelleneinheit 366 berechnet werden, indem eine vorher festgelegte Anzahl von Basislängen von dem Wert des Stapelzeigers subtrahiert wird. Auf diese Weise wird das Register in der Registerdatei 360, das die Basiseinheit mit Informationen von der Registerdatei 360 enthielt, die am weitesten entfernt vom der Stapelspitze ist, verfügbar als Register, das für das Empfangen der nächsten hinzugefügten Informationen in Bereitschaft gehalten wird.
  • Somit stehen Informationen, die in Bezug auf die Stapelspitze ausgewählt wurden, der Befehlsausführungseinheit immer ohne die Verzögerung, die für die Speicherung im Speicher 32 erforderlich ist, zur Verfügung.
  • Verlangt ein Befehl eine Pop-Operation vom Stapel, wählt die Registerverwaltungseinheit 362 das Register in der Registerdatei 360 aus, das der Stapelspitze entspricht, so dass die Befehlsausführungseinheit dieses Register lesen kann. Die Registerverwaltungseinheit 362 befiehlt der Stapelzeigereinheit 364, den Stapelzeiger um die Länge einer Basiseinheit zu verringern. Die Registerverwaltungseinheit 362 aktualisiert die Übereinstimmung zwischen den Registern und Positionen auf dem Stapel, so dass dieses Register der Stapelspitze entspricht, und die übrigen Register jeweils einer Position entsprechen, die vor der Pop-Operation um eins näher an der Stapelspitze liegt. Außerdem befiehlt die Registerverwaltungseinheit 362 der Schnittstelleneinheit 366, die höchste Basiseinheit mit Informationen vom Speicher 32 abzurufen, die sich nicht in der Registerdatei 360 befindet. Die Schnittstelleneinheit 366 kann die Adresse dieser Basiseinheit durch Subtraktion einer vorher festgelegten Anzahl von Basislängen von dem Wert des Stapelzeigers berechnen. Diese Basiseinheit wird in dem Register gespeichert, das in Bereitschaft gehalten wurde, um die nächsten hinzugefügten Informationen zu empfangen, und das Register, das sich an der Stapelspitze befand, wird zu dem Register, das in Bereitschaft gehalten wird, um die nächsten hinzugefügten Informationen zu empfangen. Wenn der Pop-Operation eine Push-Operation vorausging, ohne dass inzwischen ausgelesen wurde, ist der Speicherabruf natürlich nicht erforderlich und kann wegfallen, da sich die entsprechenden Informationen bereits in dem Register befinden, das in Bereitschaft gehalten wurde.
  • Somit stehen Informationen, die in Bezug auf die Stapelspitze ausgewählt werden, der Befehlsausführungseinheit 30 immer ohne die für den Abruf aus dem Speicher 32 erforderliche Verzögerung zur Verfügung.
  • Auf diese Weise braucht die Anzahl der Register in der Registerdatei 360 nur Eins plus die Anzahl der Positionen in Bezug auf die Stapelspitze zu sein, auf die explizit verwiesen werden kann. Es können jedoch, ohne von der Erfindung abzuweichen, mehr Register verwendet werden. Wenn mehr Register verwendet werden, kann die Registerverwaltungseinheit 362 den Befehl zur Durchführung von Schreiboperationen in den Speicher 32 nach Push-Befehlen so lange aufschieben, wie freie Register zur Verfügung stehen. Dadurch kann vermieden werden, dass viele Schreiboperationen erforderlich sind, wenn aus der Stapelspitze gelesen wird, bevor keine freien Register mehr vorhanden sind.
  • Die Stapelzeigereinheit 364 und die Registerverwaltungseinheit 362 können auch die maximalen und minimalen Stapelzeigerwerte verfolgen um zu vermeiden, dass Schreib-, Lese-, Push- oder Pop-Operationen außerhalb dieser Maxima und Minima auftreten, und, falls erforderlich, eine Unterbrechung der normalen Befehlsausführung erzeugen, wenn dies eintritt. Falls die Stapel in entgegengesetzten Richtungen in demselben Speicherbereich aufeinander zu wachsen, kann dies durch einen Test ersetzt werden, dass die beiden Stapel nicht kollidieren.
  • Falls die Länge der Basiseinheit größer als die Breite des Busses ist, verwendet die Schnittstelleneinheit 366 mehr als einen Buszyklus, um eine Basiseinheit gestapelter Informationen zu übertragen. Falls die Länge L der Basiseinheit kein ganzzahliges Vielfaches der Breite W des Busses ist, kann ein Überschuss von R Bits der Basiseinheit (L = N*W + R, N ganzzahlig, 0 < R < W, z. B. W = 16, L = 24 und R = 8) vorliegen. In diesem Fall kann die Schnittstelleneinheit 366 beim Schreiben in den Speicher davon absehen, den Überschuss von R Bits einer speziellen Speichereinheit zu schreiben und sie zurückhalten, um sie später kombiniert mit der nächsten Basiseinheit zu schreibender Stapelinformationen zu schreiben oder sie mit dem Rest der speziellen Basiseinheit wieder zu verknüpfen, wenn sie wieder vom Speicher 32 abgerufen wird. In der gleichen Weise kann die Schnittstelleneinheit 366 beim Abrufen vom Speicher 32 die W-R-Bits zurückhalten, die mit den überschüssigen Bits abgerufen werden müssen, um sie bei einem Abruf der nächsten Basiseinheit zu verwenden, so dass auf Worte im Speicher 32, die Informationen von mehr als einer Basiseinheit speichern, nicht zweimal so oft zugegriffen werden muss wie auf Worte, die Informationen von nur einer Basiseinheit speichern. Alternativ kann die Schnittstelleneinheit 366 mehr als eine (M) Basiseinheiten auf einmal abrufen oder schreiben, so dass sie zusammen eine ganzzahlige Anzahl von Busbreiten (M*L = N*W) ergeben.
  • Die Vorrichtung kann noch effizienter sein, wenn eine Architektur mit verschiedenen Speichern für jeden Stapel bzw. mit unterschiedlichen, an die Länge der Basiseinheiten des speziellen Stapels angepassten Busbreiten eingesetzt wird. Der Programmierer der Vorrichtung braucht dieses jedoch nicht zu wissen, da in diesem Fall der Befehlsvorrat nicht zu verändert werden braucht. Programme für eine Architektur können einfach auf die andere Architektur portiert werden.
  • Die zweite Stapelsteuerungseinheit 38 funktioniert analog zu der ersten Stapelsteuerungseinheit 36, mit der Ausnahme, dass sie Basiseinheiten mit einer anderen Länge nutzt. Alternativ kann die Stapelsteuerungseinheit aus 1 eingesetzt werden.
  • Die Vorrichtung kann einen zusätzlichen Adressiermodus bieten, der Blöcke aus den Speichern 12, 32 verwendet, die durch Versätze zu einer Adresse adressiert werden können, die von einem Teil des Programmzählers mit der höchsten Wertigkeit (z. B. im Fall eines 24-Bit-Programmzählers nur die 15 Bits mit der höchsten Wertigkeit) abgeleitet werden kann. Ein Befehl, der diesen Adressiermodus nutzt, enthält beispielsweise einen Versatz von N Bits. Die Befehlsausführungseinheit interpretiert diesen Befehl als Verweis auf einen Speicherplatz mit einer Adresse, die die N Bits des Versatzes als Bits mit der niedrigsten Wertigkeit und die M-N Bits mit der höchsten Wertigkeit des Programmzählers (der selbst M Bits enthält) als Bits mit der höchsten Wertigkeit aufweist. Auf die gemeinsamen Daten für eine Anzahl von Befehlen an benachbarten Platzen kann somit mit einer relativ geringen Befehlslänge verwiesen werden, die für den Versatz verwendet wird, und nach einem Sprung zum Unterprogrammbefehl können die gemeinsamen Daten ohne jeglichen Aufwand erneut definiert werden.
  • In einigen Fallen ist es wünschenswert, Datenelementen einen Typcode zuzuordnen, beispielsweise anzugeben, ob das Datenelement ein einzelnes 16-Bit-Wort oder Teil eines 32-Bit-Wortes ist (wobei der Rest des Wortes an einem logisch benachbarten Speicherplatz oder in einem logisch benachbarten Register gespeichert wird). Bei einem anderen Beispiel kann der Typcode angeben, ob das Datenelement eine Gleitkommavariable, eine Festkommavariable oder eine ganzzahlige Variable ist. Wenn einem Datenelement ein Typcode zugeordnet ist, kann die Befehlsausführungseinheit eine Laufzeitauswahl einer Operationsart durchführen, die für den Typcode eines Datenelements geeignet ist, wenn auf ein Datenelement als Operand verwiesen wird. Dies bedeutet, dass explizite Befehlsversionen für verschiedene Typen nicht erforderlich sind. Infolgedessen sind weniger Befehlsversionen erforderlich, um zwischen Operationen zu unterscheiden. Dies bietet den Vorteil, dass kürzere Maschinenbefehlcodes verwendet werden können, um zwischen Operationen zu unterscheiden und somit der für Befehle erforderliche Speicherplatz verringert wird.
  • Um die Verwendung von Datenelementen mit Typcodes zu implementieren, würde die Befehlsausführungseinheit eine Schaltung zum Erfassen des Typs der eingehenden Operanden und ein umschaltbares Rechenwerk umfassen, das durch die Schaltung zur Typerfassung gesteuert wird, um die Ausführung der für den erfassten Typ geeigneten logischen Rechenoperation auszuwählen. Ferner würde die Befehlsausführungseinheit Befehle enthalten, um Datenelemente von einem Typ in einen anderen umzuwandeln.
  • Wird eine derartige Befehlsausführungseinheit eingesetzt, die Operanden (insbesondere D-Operanden) Typen zuordnet, sollten die Inkremente und Dekremente des Stapelzeigers gesteuert von dem Typcode der Basiseinheit an der Stapelspitze einstellbar sein. Wenn beispielsweise der Typcode des Elements an der Stapelspitze ein 16-Bit-Wort anzeigt, verringert die Stapelsteuerungseinheit im Falle einer Pop-Operation den Stapelzeiger um 2 Byte-Adressen (oder um eine Wortadresse), und wenn der Typcode des Elements an der Stapelspitze ein 32-Bit-Wort anzeigt, verringert die Stapelsteuerungseinheit im Falle einer Pop-Operation den Stapelzeiger um 4 Byte-Adressen (oder um zwei Wortadressen). In gleicher Weise untersucht die Befehlsausführungseinheit im Falle einer Push-Operation den Typcode des hinzugefügten Datenelements und bewirkt, dass die Stapelsteuerungseinheit entsprechend des Typcodes um 2 oder um 4 Byte-Adressen erhöht, und 16 Bits oder 32 Bits werden auf dem Stapel gespeichert.
  • In diesem Fall sollte ein Typcode für jedes gestapelte Element gespeichert werden. Dies kann beispielsweise durchgeführt werden, indem ein zusätzlicher Stapel mit Typcodes gespeichert wird, der automatisch ausgelesen oder zu dem automatisch hinzugefügt wird, wenn der entsprechende Stapel ausgelesen oder zu ihm hinzugefügt wird.
  • Die in den Figuren dargestellte Vorrichtung kann als ein einzelner IC-Chip ausgeführt werden. Hierbei ist die Erfindung besonders vorteilhaft, da sie den für ein typisches Programm erforderlichen Speicherplatz und somit die Chipfläche reduziert. Der Speicher kann jedoch auch zumindest teilweise außerhalb des Chips liegen. Die erfindungsgemäße Vorrichtung kann jedoch ebenso aus mehreren kombinierten IC-Chips mit oder ohne den Speicher bestehen.
  • Text in der Zeichnung
  • 2a
  • instruction
    Befehl
    data format
    Datenformat
    opc
    Operationscode
    op
    Operand
    nibble
    Nibble

Claims (7)

  1. Vorrichtung zur Datenverarbeitung, die Folgendes umfasst: – Mittel zum Speichern eines ersten und eines zweiten Stapels, – eine Befehlsausführungseinheit, die über einen Befehlsvorrat verfügt, der erste und zweite Befehle enthält, die eine Push- bzw. Pop-Operation von dem ersten bzw. zweiten Stapel bewirken, dadurch gekennzeichnet, dass die Speichermittel Informationen in Basiseinheiten mit einer ersten und einer zweiten Länge zu dem ersten bzw. zweiten Stapel hinzufügen bzw. aus ihm lesen, wobei die erste und die zweite Länge ungleich sind; und dass der Befehlsvorrat einen ersten und einen zweiten Adressiermodus nutzt, um Speicherplätze in Form eines Versatzes im Vergleich zu einer Spitze des ersten bzw. zweiten Stapels zu bezeichnen, wobei der Versatz nur in der Anzahl von Basiseinheiten für den geeigneten Stapel ausgedrückt werden kann.
  2. Vorrichtung zur Datenverarbeitung nach Anspruch 1, wobei die erste und die zweite Länge keine ganzzahligen Vielfache voneinander sind.
  3. Vorrichtung zur Datenverarbeitung nach Anspruch 1 oder 2, wobei der Versatz für einen Quellenoperanden mit Hilfe einer Gruppe von Bits codiert wird, wobei eine erste vorher festgelegte Kombination von Werten der genannten Bits bewirkt, dass die Befehlsausführungseinheit die Stapelspitze liest und von dem entsprechenden Stapel ausliest, und eine zweite Kombination von Werten der genannten Bits bewirkt, dass die Befehlsausführungseinheit die Stapelspitze liest, ohne den entsprechenden Stapel zu verändern, und die restlichen Kombinationen von Werten der genannten Bits bewirken, dass die Befehlsausführungseinheit Speicherplätze liest, die im Vergleich zur Spitze des entsprechenden Stapels versetzt sind.
  4. Vorrichtung zur Datenverarbeitung nach Anspruch 1 oder 2, wobei der Versatz für ein Ergebnisziel mit Hilfe einer Gruppe von Bits codiert wird, wobei eine erste vorher festgelegte Kombination von Werten der genannten Bits bewirkt, dass die Befehlsausführungseinheit zu dem entsprechenden Stapel hinzufügt und in die Stapelspitze schreibt, und eine zweite Kombination von Werten der genannten Bits bewirkt, dass die Befehlsausführungseinheit in die Stapelspitze schreibt, ohne zu dem entsprechenden Stapel hinzuzufügen, und die restlichen Kombinationen von Werten der genannten Bits bewirken, dass die Befehlsausführungseinheit in Speicherplätze schreibt, die im Vergleich zur Spitze des entsprechenden Stapels versetzt sind.
  5. Vorrichtung zur Datenverarbeitung nach Anspruch 1 oder 2, die einen Speicherbereich mit Plätzen umfasst, an den Informationen von Basiseinheiten sowohl vom ersten als auch vom zweiten Stapel alternativ gespeichert werden können, wobei der erste Stapel von einem oberen Ende eines Speicherbereichs wächst und der zweite Stapel von einem unteren Ende dieses Speicherbereichs wächst.
  6. Vorrichtung zur Datenverarbeitung nach Anspruch 1 oder 2, wobei der erste Stapel ein Datenstapel und der zweite Stapel ein Adressenstapel ist, wobei die Befehle im Befehlsvorrat Informationen vom zweiten Stapel nutzen, um Speicherplätze von Operanden bzw. Ergebnissen zu adressieren, und Informationen vom ersten Stapel als Operanden bzw. Ergebnisse selbst nutzen.
  7. Vorrichtung zur Datenverarbeitung nach Anspruch 1 oder 2, die Mittel zum Handhaben eines dritten Stapels umfassen, um Informationen für Unterprogrammaufrufe bzw. Unterbrechungen im Laufe der Ausführung eines Programms mit Befehlen zurückzuleiten.
DE69816775T 1997-08-18 1998-07-06 Vorrichtung zur datenverarbeitung mit stapelstruktur Expired - Fee Related DE69816775T2 (de)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
EP97202530 1997-08-18
EP97202530 1997-08-18
EP97202638 1997-08-28
EP97202638 1997-08-28
PCT/IB1998/001038 WO1999009469A1 (en) 1997-08-18 1998-07-06 Stack oriented data processing device

Publications (2)

Publication Number Publication Date
DE69816775D1 DE69816775D1 (de) 2003-09-04
DE69816775T2 true DE69816775T2 (de) 2004-05-27

Family

ID=26146789

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69816775T Expired - Fee Related DE69816775T2 (de) 1997-08-18 1998-07-06 Vorrichtung zur datenverarbeitung mit stapelstruktur

Country Status (5)

Country Link
US (2) US6502183B2 (de)
EP (1) EP0931286B1 (de)
JP (1) JP2001504969A (de)
DE (1) DE69816775T2 (de)
WO (1) WO1999009469A1 (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10816361B2 (en) 2016-02-17 2020-10-27 Vitesco Technologies GmbH Arrangement for detecting the angular position of a rotatable component

Families Citing this family (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6631462B1 (en) * 2000-01-05 2003-10-07 Intel Corporation Memory shared between processing threads
EP1383039B1 (de) 2002-07-19 2011-05-11 STMicroelectronics Srl Verfahren und Vorrichtung zur Verwaltung des Systemstapels während der Unterbrechungsstufe
US7660985B2 (en) * 2003-04-30 2010-02-09 At&T Corp. Program security through stack segregation
DE10329680A1 (de) * 2003-07-01 2005-02-10 Universität Stuttgart Prozessorarchitektur für exakte Zeigeridentifizierung
US20070074013A1 (en) * 2003-08-25 2007-03-29 Lonnie Goff Dynamic retention of hardware register content in a computer system
GB2418272A (en) * 2004-09-17 2006-03-22 Marconi Comm Ltd Processor arrangement having a stack memeory
US7797505B2 (en) * 2005-04-25 2010-09-14 Hewlett-Packard Development Company, L.P. Program stack handling
US7647482B2 (en) * 2006-03-31 2010-01-12 Intel Corporation Methods and apparatus for dynamic register scratching
US8055886B2 (en) * 2007-07-12 2011-11-08 Texas Instruments Incorporated Processor micro-architecture for compute, save or restore multiple registers and responsive to first instruction for repeated issue of second instruction
US8860715B2 (en) * 2010-09-22 2014-10-14 Siemens Corporation Method and system for evaluation using probabilistic boosting trees
GB2486738B (en) * 2010-12-24 2018-09-19 Qualcomm Technologies Int Ltd Instruction execution
FR3013869B1 (fr) * 2013-11-22 2016-01-01 Thales Sa Procede de detection des debordements de pile et processeur pour la mise en oeuvre d'un tel procede
US11126657B2 (en) * 2018-06-11 2021-09-21 Alibaba Group Holding Limited Efficient in-memory representation of computation graph for fast serialization and comparison
US11782871B2 (en) 2021-04-27 2023-10-10 Microchip Technology Inc. Method and apparatus for desynchronizing execution in a vector processor
WO2022231649A1 (en) * 2021-04-27 2022-11-03 Microchip Technology Inc. System of multiple stacks in a processor devoid of an effective address generator
CN113721809B (zh) * 2021-09-08 2023-07-04 遨博(江苏)机器人有限公司 一种窗口展示方法及系统

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3786432A (en) * 1972-06-20 1974-01-15 Honeywell Inf Systems Push-pop memory stack having reach down mode and improved means for processing double-word items
US4325120A (en) * 1978-12-21 1982-04-13 Intel Corporation Data processing system
EP0185215B1 (de) * 1984-11-21 1993-09-22 Harris Corporation Mikroprozessor für Forth-ähnliche Sprache
GB8602964D0 (en) * 1986-02-06 1986-03-12 Metaforth Computer Systems Ltd Computer architecture
JPH0337723A (ja) * 1989-07-05 1991-02-19 Hitachi Ltd 情報処理装置
US5440749A (en) * 1989-08-03 1995-08-08 Nanotronics Corporation High performance, low cost microprocessor architecture
JPH03206525A (ja) * 1990-01-09 1991-09-09 Seiko Instr Inc シングルチップマイコンのスタック方式
US5335332A (en) * 1991-12-24 1994-08-02 International Business Machines Corporation Method and system for stack memory alignment utilizing recursion
US5634046A (en) * 1994-09-30 1997-05-27 Microsoft Corporation General purpose use of a stack pointer register
US5903899A (en) * 1997-04-23 1999-05-11 Sun Microsystems, Inc. System and method for assisting exact Garbage collection by segregating the contents of a stack into sub stacks
US6058457A (en) * 1997-06-23 2000-05-02 Sun Microsystems, Inc. Method for storing method frames in multiple stacks

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10816361B2 (en) 2016-02-17 2020-10-27 Vitesco Technologies GmbH Arrangement for detecting the angular position of a rotatable component

Also Published As

Publication number Publication date
EP0931286B1 (de) 2003-07-30
US6502183B2 (en) 2002-12-31
US6557093B2 (en) 2003-04-29
WO1999009469A1 (en) 1999-02-25
EP0931286A1 (de) 1999-07-28
US20020002665A1 (en) 2002-01-03
JP2001504969A (ja) 2001-04-10
US20010010071A1 (en) 2001-07-26
DE69816775D1 (de) 2003-09-04

Similar Documents

Publication Publication Date Title
DE69816775T2 (de) Vorrichtung zur datenverarbeitung mit stapelstruktur
DE69723286T2 (de) Echtzeitprogramm-sprachbeschleuniger
DE4215063C2 (de) Einrichtung und Verfahren zum Seitenwechsel bei einem nicht-flüchtigen Speicher
DE2230102C2 (de) Mikroprogrammierter Prozessor mit bitparalleler Datenübertragung
DE3151745C2 (de)
DE2350884C2 (de) Adreßumsetzungseinheit
DE69729974T2 (de) Datenverarbeitungsschaltung, Mikrocomputer und elektronische Einrichtung
DE69730276T2 (de) Vorrichtung und Verfahren zur Erleichterung der Vermeidung von exzeptionellen bestimmten Zuständen während des Ablaufs eines Programmes
DE60131864T2 (de) Speichern von stapeloperanden in registern
DE69738188T2 (de) Verfahren und apparat für eine erhöhte genauigkeit bei der verzweigungsvorhersage in einem superskalaren mirkroprozessor
DE69133571T2 (de) Datenprozessor mit der Fähigkeit, zwei Befehle gleichzeitig auszuführen
DE2417795C2 (de) Datenverarbeitungsanlage
WO2001024368A1 (de) Rekonfigurierbares gate-array
DE3726192A1 (de) Stacksteuerung
CH623947A5 (de)
DE2411963A1 (de) Datenverarbeitungsanlage
DE1499193B2 (de) Speicher-adressierschaltung
DE3500804A1 (de) Unterbrechungssteuerkreis
DE19934067A1 (de) Verfahren, Vorrichtung und Computerprogrammprodukt für stapelspeicherbezogene Ausnahmeunterbrechungen
DE1285219B (de) Steuerwerk zur Ausfuehrung von Unterprogrammen
DE69918033T2 (de) Zentrale Verarbeitungseinheit mit Befehl zur Datenverlängerung
DE4238099A1 (de)
EP1407348B1 (de) Verfahren zum ansteuern einer zentralen verarbeitungseinheit für eine adressierung bezüglich eines speichers und controller
DE3410497A1 (de) Rechneranordnung
DE1424755A1 (de) Adressier-System

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee