DE69630416T2 - Mikroprozessor zur Ausführung von Befehlen mit variablen Längen - Google Patents

Mikroprozessor zur Ausführung von Befehlen mit variablen Längen Download PDF

Info

Publication number
DE69630416T2
DE69630416T2 DE69630416T DE69630416T DE69630416T2 DE 69630416 T2 DE69630416 T2 DE 69630416T2 DE 69630416 T DE69630416 T DE 69630416T DE 69630416 T DE69630416 T DE 69630416T DE 69630416 T2 DE69630416 T2 DE 69630416T2
Authority
DE
Germany
Prior art keywords
register
code
command
instruction
word
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 - Lifetime
Application number
DE69630416T
Other languages
English (en)
Other versions
DE69630416D1 (de
Inventor
Toshimichi Aomadani Matsuzaki
Masashi Nara-shi Deguchi
Toshifumi Takatsuki-shi Hamaguchi
Yutaka Oazal-Kusauchi Tanase
Masahiko Shouryu-ji Matsumoto
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.)
Panasonic Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
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
Priority claimed from JP13328195A external-priority patent/JP3199603B2/ja
Priority claimed from JP13407895A external-priority patent/JP3199604B2/ja
Application filed by Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Publication of DE69630416D1 publication Critical patent/DE69630416D1/de
Application granted granted Critical
Publication of DE69630416T2 publication Critical patent/DE69630416T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime 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
    • 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/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • 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/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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/30156Special purpose encoding of instructions, e.g. Gray coding
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted instructions
    • 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/3802Instruction 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/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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

Landscapes

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

Description

  • HINTERGRUND DER ERFINDUNG
  • (1) Sachgebiet der Erfindung
  • Diese Erfindung bezieht sich auf einen Mikroprozessor, der Daten gemäß Anweisungen in einem Programm verarbeitet, genauer gesagt auf einen Mikroprozessor zum Unterstützen der Verringerung der Größe von Programmcoden.
  • (2) Beschreibung des Stands der Technik
  • Heutzutage werden Hochleistungen von neuen Produkten mit eingebautem Mikroprozessor erwartet. Um solche Hochleistungs-Produkte zu realisieren, werden die Programme der Mikroprozessoren größer und größer. Allerdings sollte in Produkten, in denen ein Mikroprozessor eingeschlossen ist, das Programm in einem oder in mehreren ROMs gespeichert werden. Als Folge sollten sich, wenn sich die Code, verwendet in den Programmen, in der Größe erhöhen, die Kapazität eines ROM und/oder die Anzahl von ROMs auch erhöhen, was eine Behinderung beim Entwickeln von kostengünstigen Produkten ist. Deshalb ist es erwünscht, die Code-Größe so stark wie möglich zu komprimieren, wenn solche Produkte entwickelt werden.
  • <Erste, herkömmliche Technik>
  • Eine der herkömmlichen Techniken zum Komprimieren der Code-Größe komprimiert die Code-Größe jedes Befehls, ausgeführt durch den Mikroprozessor (z. B. NEC's V800 Serie und Hitachi's SH7000 Serie). Die Mikroprozessoren dieser Technik führen Befehle aus, deren Größe kleiner als diejenige eines Daten-Busses, einer arithmetischen, logischen Einheit (Arithmetic Logic Unit – ALU), oder von Registern (nachfolgend ALU-Größe) ist. Zum Beispiel führen die Mikroprozessoren 16-Bit-Befehle aus, während die ALU-Größe 32 Bit beträgt.
  • Die Technik ermöglicht das Ersetzen eines 32-Bit-Befehls durch einen 16-Bit-Befehl, um dadurch unnötige Bits auszuschließen und effektiv die gesamte Code-Größe für ein Programm zu komprimieren.
  • Allerdings besitzt diese erste, herkömmliche Technik ein Problem so, wie es nachfolgend beschrieben ist.
  • Obwohl die Befehls-Größe kleiner als die ALU-Größe ist, sollte die Befehls-Größe gleich zu der oder n-mal so groß wie die Größe des Befehl-Decodierers des Mikroprozessors sein (n ist eine ganze Zahl). Das bedeutet, dass ein Befehl in Einheiten von 8 Bits erweitert wird. Zum Beispiel sollte, falls der Decodierer 8 Bit in der Größe ist, die Befehls-Größe eines von 8, 16, 24, 32, ..., Bits sein. Die Einheit für die Erweiterung kann nicht auf unterhalb von 8 Bits reduziert werden. Als Folge müssen, gerade wenn 8 Bits nicht zum Darstellen eines Werts erforderlich sind, 8 Bits verwendet werden. Dies erzeugt verschwenderische Code in der Größe.
  • 1 stellt ein Format eines Befehls, verwendet in einem herkömmlichen Mikroprozessor, dar. Der Befehl „add #4,d0", instruiert den Mikroprozessor, einen unmittelbaren Wert „4" zu einem Wert, gespeichert in einem Register d0, hinzuzufügen. Der Befehl verwendet 16 Bits insgesamt, umfassend 8 Bits zum spezifizieren eines Operations-Codes „add #n,d0" und 8 Bits für den unmittelbaren Wert „#n", der „4" in diesem Fall ist. Allerdings sind 8 Bits zu viele, um einen Wert „4" darzustellen. Eine ganze Zahl, die von „–8" bis „+7" reicht, erfordert nur 4 Bits. Das bedeutet, dass 16 Bits für den Befehl verwendet werden, der nur 12 Bits erfordert. Dies erzeugt verschwenderische Code in der Größe.
  • <Zweite, herkömmliche Technik>
  • Eine zweite, herkömmliche Technik zum Komprimieren der Code-Größe ist ein Verfahren zum effektiven Lesen/Schreiben von Daten von einem/in einen Speicher. Dies wird, z. B., durch Verbessern eines Adressier-Modes, verwendet in einem Datenübertragungsbefehl, erreicht.
  • Sowohl die 2A als auch die 2B sind Programme, mit denen Daten von einem Speicher gelesen und in diesen geschrieben werden können. Beide instruieren den Mikroprozessor, einen Wert, gespeichert in einem Speicher, zu lesen, mit dem Wert zu rechnen und das Berechnungsergebnis in dem Speicher zu speichern.
  • Ein Befehl a1 in 2A ist ein Lade-Befehl, durch den ein Wert, gespeichert an einer Stelle in einem Speicher, spezifiziert durch eine absolute Adresse, in ein Register D0 hineingelesen wird. Ein Befehl a2 ist ein Addier-Befehl, durch den ein Wert, gespeichert in einem Register D1, zu einem Wert in dem Register D0 hinzu addiert wird, dann der erhaltene Wert in dem Register D0 gespeichert wird. Ein Befehl a3 ist ein Speicher-Befehl, durch den ein Wert, gespeichert in einem Register D0, an einer Stelle in einem Speicher, spezifiziert durch eine absolute Adresse, gespeichert wird. Der Basisteil dieser Befehle besitzt eine Länge von 8 Bits. Eine absolute Adresse besitzt eine Länge von 16 Bits. Dementsprechend beträgt die gesamte Code-Größe des Programms von 2A 7 Bytes. Das bedeutet, dass 7 Bytes für einen Satz eines Daten-Lesens und -Schreibens von dem/in den Speicher verwendet werden.
  • In dem Programm der 2A wird eine absolute Adresse mit 16-Bit für jeden der zwei Speicher-Zugriffe verwendet. In dem Programm der 2B wird ein Adressen-Register für Speicher-Zugriffe verwendet.
  • Das Programm in 2B unterscheidet sich von demjenigen in 2A dadurch, dass es zuerst eine absolute Adresse des Speichers zu einem Adressen-Register überträgt (Befehl b1), dass es als zweites Daten von dem Speicher zu dem Register D0 durch Spezifizieren des Adressen-Registers überträgt (Befehl b2) und dass es drittens das Berechnungsergebnis in dem Speicher durch Spezifizieren des Adressen-Registers speichert (Befehl b4). Obwohl das Programm der 2B zusätzlich einen Befehl zum Übertragen einer absoluten Adresse zu einem Adressen-Register umfasst, umfasst nur ein Befehl b2 eine absolute Adresse. Als Folge wird die gesamte Code-Größe um ein Byte, verglichen mit dem Programm der 2A, reduziert.
  • Eine große Menge an Programmraum kann in einem Mikroprozessor verringert werden, falls die Code-Größe für einen Satz von Speicherzugriffen verringert wird.
  • Allerdings ist ein Problem der zweiten, herkömmlichen Technik dasjenige, dass Adressen-Register belegt werden, wenn sie zum Spezifizieren von absoluten Adressen eines Speichers verwendet werden. Deshalb kann ein Prozessor, der weniger Adressen-Register besitzt, nicht immer in der Lage sein, dieses Verfahren zu verwenden. Auch können, da ein Mikroprozessor, genauer gesagt ein eingebauter Mikroprozessor, häufig Daten von einem Speicher liest und in diesen schreibt, Adressen-Register nicht für andere Operationen verwendet werden.
  • Ein variables Befehls-Format ist in „Computer Organization and Architecture", Fifth Edition, William Stallings, Prentice-Hall International, Inc., Seiten 388–397, 457, 458, veröffentlicht 2000, offenbart. Dieses Dokument offenbart ein System, bei dem ein Befehl aus einem 1- oder 2-Byte Opcode bzw. Operationscode, gefolgt von Null bis sechs Operanden-Spezifizierern, mit einer Länge von mindestens 1 Byte, von dem Operationscode abhängig, besteht. Die minimale Befehls-Länge beträgt 1 Byte und Befehle bis zu 37 Bytes können konstruiert werden. Der VAX Befehl beginnt mit einem Operationscode von 1-Byte, der ausreichend ist, um die meisten VAX Befehle zu handhaben. Allerdings sind 8 Bits nicht genug, um über 300 unterschiedliche Befehle zu handhaben, so dass hexadezimale Code FD und FF einen erweiterten Operationscode bzw. Opcode anzeigen, wobei der tatsächliche Operationscode in dem zweiten Byte spezifiziert wird.
  • ZUSAMMENFASSUNG DER ERFINDUNG
  • Es ist deshalb eine erste Aufgabe der vorliegenden Erfindung, einen Mikroprozessor zu schaffen, der Befehle ausführt, effektiv reduziert, durch Befreien der Befehle von einer Einschränkung, dass die Befehls-Größe gleich zu oder n-mal so groß wie die Größe des Befehls-Decodierers des Mikroprozessors sein sollte (n ist eine ganze Zahl), um dadurch die Erstellung eines Programms zu ermöglichen, das Code mit einer geringeren Größe als herkömmliche Programme mit denselben Inhalten besitzt.
  • Es ist deshalb erwünscht, einen Mikroprozessor zu schaffen, der die Verringerung der Code-Größe ohne Belegen von Adressen-Registern ermöglicht.
  • Die erste Aufgabe wird durch einen Mikroprozessor zum Unterstützen einer Verringerung von Coden in der Größe, wie er in dem beigefügten Anspruch 1 definiert ist, erfüllt.
  • Der Mikroprozessor erweitert Befehle ohne eine Einschränkung, dass die Befehls-Größe gleich zu oder n-mal so groß wie die Größe des Befehls-Decodierers des Mikroprozessors sein sollte (n ist eine ganze Zahl). Das bedeutet, dass der Mikroprozessor Befehle in Einheiten von „b", was kleiner als „a" ist, erweitert. Als Folge verringert die vorliegende Erfindung die notwendigen Bits, umfasst in Coden für Befehle, was die gesamte Programmgröße verringert.
  • In dem vorstehenden Mikroprozessor kann „a" gleich einem Wort in der Länge sein, und „b" kann gleich einer Hälfte eines Worts in der Länge sein, wobei das Wort und das halbe Wort Einheiten einer Länge sind.
  • Dieser Mikroprozessor erweitert Befehle in Einheiten von halben Worten. Dann wird die Befehls-Länge „w" irgendeine von a, 1,5a, 2a, 2,5a, 3a ...., sein. Wenn dies auftritt, erhöht sich die Menge an Informationen, spezifiziert durch einen Befehl, mit weniger Bits. Zum Beispiel können Befehle mit mehr Informationen definiert werden und Daten können mit mehr Informationen spezifiziert werden.
  • Dieser Mikroprozessor kann weiterhin die Merkmale aufweisen, die in dem beigefügten Anspruch 3 definiert sind.
  • Dieser Mikroprozessor speichert einen vorab abgerufenen Befehl in dem Befehls-Puffer und speichert Informationen über den Zustand des vorab abgerufenen Befehls in der Speichereinrichtung für jedes halbe Wort und aktualisiert die Informationen. Weiterhin beurteilt der Mikroprozessor, dass der nächste Code ein Wort oder ein halbes Wort in der Länge ist. Dies ermöglicht dem Mikroprozessor, zu beurteilen, wie der nächste Code in dem Befehls-Puffer in Einheiten von halben Worten ausgerichtet ist.
  • Das Befehls-Register des Mikroprozessors kann aufweisen: ein Befehls-Register höherer Ordnung, das ein Halbwort eines Codes höherer Ordnung speichert; und ein Befehls-Register niederer Ordnung, das ein Halbwort des Codes niederer Ordnung speichert; wobei der Befehls-Puffer umfasst: ein erstes Register, das einen zuletzt ausgelesenen Wortcode speichert; ein zweites Register, das einen Wortcode speichert, der dem in dem ersten Register gespeicherten Code vorangeht; und eine Auswähleinrichtung, die auf Basis einer Anweisung von der Steuereinrichtung selektiv einen Code zu dem Befehls-Register überträgt; wobei das erste Register umfasst: ein erstes Register höherer Ordnung, das ein Halbwort eines Codes höherer Ordnung speichert; und ein erstes Register niederer Ordnung, das ein Halbwort des Codes niederer Ordnung speichert; wobei das zweite Register umfasst: ein zweites Register höherer Ordnung, das ein Halbwort eines Codes höherer Ordnung speichert; und ein zweites Register niederer Ordnung, das ein Halbwort des Codes niederer Ordnung speichert; wobei die Auswähleinrichtung umfasst: eine Auswähleinrichtung höherer Ordnung, die einen Code von dem zweiten Register höherer Ordnung, dem zweiten Register niederer Ordnung oder dem Befehls-Register niederer Ordnung selektiv zu dem Befehls-Register höherer Ordnung überträgt; und eine Auswähleinrichtung niederer Ordnung, die einen Code von dem zweiten Register höherer Ordnung, dem zweiten Register niederer Ordnung oder dem ersten Register niederer Ordnung selektiv zu dem Befehls-Register niederer Ordnung überträgt; und wobei: die Speichereinrichtung einen ersten Zustand, der anzeigt, dass das zweite Register höherer Ordnung oder das zweite Register niederer Ordnung keinen Code speichert, einen zweiten Zustand, der anzeigt, dass das zweite Register höherer Ordnung einen Code speichert und das zweite Register niederer Ordnung keinen Code speichert, oder einen dritten Zustand speichert, der anzeigt, dass das zweite Register höherer Ordnung und das zweite Register niederer Ordnung einen Code speichern, speichert.
  • Dieser Mikroprozessor ruft 1-Wort-Code ab und speichert sie in dem Befehls-Puffer, nach Unterteilen davon in Code eines halben Wortes. Ein ausgewählter Code wird zu dem Befehls-Register unabhängig in Einheiten von Halbworten übertragen. Die Speichereinrichtung speichert den Zustand eines Codes, der zu dem Befehls-Register bei dem nächsten Zyklus übertragen werden soll, und zwar wie der Code in dem Befehls-Puffer auszurichten ist. Dies ermöglicht dem Mikroprozessor, notwendige Code in dem Befehls-Puffer zu speichern und unabhängig sie zu dem Befehls-Register in Einheiten von halben Coden zu übertragen, um sie zu decodieren.
  • Die Steuereinrichtung des Mikroprozessors kann die Auswähleinrichtung so steuern, dass die Auswähleinrichtung höherer Ordnung einen Code von dem zweiten Register höherer Ordnung zu dem Befehls-Register höherer Ordnung überträgt, und die Auswähleinrichtung niederer Ordnung einen Code von dem ersten Register niederer Ordnung zu dem Befehls-Register niederer Ordnung überträgt, wenn die Speichereinrichtung den zweiten Zustand speichert und die erste Feststelleinrichtung feststellt, dass ein nächster zu übertragender Code ein Wort lang ist.
  • Der Mikroprozessor überträgt einen 1-Wort-Code, gespeichert über zwei Register, zu dem Befehls-Register, um ihn zu decodieren. Dies ermöglicht dem Mikroprozessor, korrekt einen 1-Wort-Code, gespeichert über zwei Stellen in dem externen Speicher, spezifiziert durch zwei Adressen, korrekt zu decodieren und auszuführen, und befreit den Mikroprozessor von einer Einschränkung durch eine Wort-Ausrichtung in Ausrichtungs-Coden in dem externen Speicher.
  • Die Steuereinrichtung des Mikroprozessors kann die Auswähleinrichtung so steuern, dass die Auswähleinrichtung höherer Ordnung einen Code von dem Befehls-Register niederer Ordnung zu dem Befehls-Register höherer Ordnung überträgt, und die Auswähleinrichtung niederer Ordnung einen Code von dem zweiten Register niederer Ordnung zu dem Befehls-Register niederer Ordnung überträgt, wenn die Speichereinrichtung den dritten Zustand speichert und die erste Feststelleinrichtung feststellt, dass ein nächster zu übertragender Code ein Halbwort lang ist, und den in der Speichereinrichtung gespeicherten Zustand von dem dritten Zustand auf den zweiten Zustand aktualisiert.
  • Der Mikroprozessor überträgt nur einen Halbwort-Code von dem zweiten Register niederer Ordnung zu dem Befehls-Register und decodiert ihn mit einem anderen Halbwort-Code, der zuvor decodiert ist, und führt weiter aus. Dies ermöglicht dem Mikroprozessor, korrekt einen Halbwort-Code gerade dann zu decodieren und auszuführen, wenn der Halbwort-Code in einer Position niederer Ordnung in dem externen Speicher gespeichert ist.
  • Die Steuereinrichtung des Mikroprozessors kann die Auswähleinrichtung so steuern, dass die Auswähleinrichtung höherer Ordnung einen Code von dem Befehls-Register niederer Ordnung zu dem Befehls-Register höherer Ordnung überträgt, und die Auswähleinrichtung niederer Ordnung einen Code von dem zweiten Register höherer Ordnung zu dem Befehls-Register niederer Ordnung überträgt, wenn die Speichereinrichtung den zweiten Zustand speichert und die erste Feststelleinrichtung feststellt, dass ein nächster zu übertragender Code ein Halbwort lang ist, und den in der Speichereinrichtung gespeicherten Zustand von dem zweiten Zustand auf den dritten Zustand aktualisiert.
  • Der Mikroprozessor überträgt nur einen Halbwort-Code von dem zweiten Register höherer Ordnung zu dem Befehls-Register, und decodiert ihn mit einem anderen Halbwort-Code, der zuvor decodiert ist und führt beide aus. Dies ermöglicht dem Mikroprozessor, korrekt einen Halbwort-Code gerade dann zu decodieren und auszuführen, wenn der Halbwort-Code in einer Position höherer Ordnung in dem externen Speicher gespeichert ist.
  • Der Mikroprozessor kann weiterhin aufweisen: eine zweite Feststelleinrichtung, um festzustellen, ob ein Befehl, decodiert durch den Decodierer, ein Sprung-Unterprogramm-Befehl ist, der an einer Stelle in einem externen Speicher gespeichert ist, die an einer Halbwort-Position endet, basierend auf den Informationen, die in der Speichereinrichtung gespeichert sind, und Informationen, erhalten von dem decodierten Befehl, wobei dann, wenn die zweite Feststelleinrichtung feststellt, dass ein Befehl, decodiert durch den Decodierer, ein Sprung-Unterprogramm-Befehl ist, der an einer Stelle in einem externen Speicher gespeichert ist, die an einer, Halbwort-Position endet, die Ausführeinrichtung ein Unterprogramm ausführt, nachdem eine Rücksprung-Adresse des Unterprogramms angegeben wurde, die bestimmt wird, indem ein Halbwort zu der Halbwort-Position addiert wird.
  • Mit einem solchen Aufbau wird gerade dann, wenn ein Sprung-Unterprogramm-Befehl an einer Stelle in dem externen Speicher, beginnend von einer Halbwort-Grenze an, gespeichert ist, ein Sprung-Unterprogramm-Befehl normal durch Einsparen einer Rückführadresse ausgeführt, die dieselbe Länge wie diejenige für einen Sprung-Unterprogramm-Befehl hat, der an einer Wortgrenze endet. Als Folge wird die Anzahl von Zugriffen auf den Stapel verringert und eine unnötige Benutzung des Stapels wird verhindert. Dies verbessert den Durchsatz des Mikroprozessors.
  • Eine Beispiel eines weiteren Mikroprozessors zum Unterstützen einer Verringerung von Coden in der Größe weist auf: einen Operanden-Adressen-Puffer zum Halten einer Target-Speicher-Zugangsadresse, wobei der Operanden-Adressen-Puffer mit einem externen Speicher gespeichert ist; eine Ausleseeinrichtung zum Auslesen eines Befehls; eine Befehls-Erfassungseinrichtung zum Erfassen eines Befehls, der durch die Ausleseeinrichtung ausgelesen worden ist und dazu dient, auf den externen Speicher zuzugreifen; eine Feststelleinrichtung zum Feststellen, ob der Befehl, der durch die Befehls-Erfassungseinrichtung erfasst ist, die Target-Speicher-Zugangsadresse, gespeichert in dem Operanden-Adressen-Puffer, spezifiziert; eine erste Steuereinrichtung zum Steuern des Operanden-Adressen-Puffers so, dass die Adresse, gespeichert in dem Operanden-Adressen-Puffer, zu dem externen Speicher ausgegeben wird, wenn die Feststelleinrichtung feststellt, dass der Befehl, erfasst durch die Befehls-Erfassungseinrichtung, die Target-Speicher-Zugangsadresse spezifiziert; und eine zweite Steuereinrichtung zum Speichern einer Adresse, erhalten von einem Operanden des Befehls, erfasst durch die Befehls-Erfassungseinrichtung, in dem Operanden-Adressen-Puffer, und Steuern des Operanden-Adressen-Puffers so, dass die gespeicherte Adresse zu dem externen Speicher ausgegeben wird, falls die Feststelleinrichtung feststellt, dass der Befehl nicht die Target-Speicher-Zugangsadresse, gespeichert in dem Operanden-Adressen-Puffer, spezifiziert.
  • Dieser Mikroprozessor kann auf einen Speicher ohne Spezifizieren irgendwelcher absoluten Adressen und ohne Verwenden von Adressen-Registern zugreifen, da eine Adresse, gespeichert in einem Operanden-Adressen-Puffer, zu dem Speicher ausgegeben wird, wenn die Adresse als eine Target-Speicher-Zugangsadresse spezifiziert ist.
  • Auch werden, gerade wenn eine Menge von I/O-Zugriffen zu I/O-Ports in einem speicher-aufgelisteten I/O, wie in eingebauten Mikroprozessoren, vorhanden ist, die Adressen-Register nicht belegt. Als Folge kann der Mikroprozessor Adressen-Register effektiv verwenden.
  • Weiterhin werden, wenn derselbe I/O-Port bei jeder bestimmten Periode überwacht wird, und ein Wert des I/O-Ports wiederholt geladen wird oder wenn Peripherievorrichtungen über einen I/O-Port gesteuert werden und ein Wert des I/O-Ports bei jeder bestimmten Periode überschrieben wird, Adressen-Register effektiv durch Spezifizieren einer Adresse, gespeichert in dem Operanden-Adressen-Puffer, als eine Target-Speicher-Zugangsadresse, verwendet.
  • Die erhöhte Nutzungseffektivität der Adressen-Register hilft dem Mikroprozessor, stark die Code-Größe zu verringern, da absolute Adressen weniger zu Adressen-Registern übertragen werden, Daten weniger von Adressen-Registern gesichert/zurückgespeichert werden, und Adressen-Register für eine Vielfalt von anderen Zwecken verwendet werden können.
  • Der Mikroprozessor ist nicht nur beim Verringern der Code-Größe erfolgreich, sondern ist auch beim Beschleunigen der Ausführungszeit erfolgreich. Dies kommt daher, dass, aufgrund der Zahl einer Adresse, Berechnungen reduziert werden, da eine Adresse, gespeichert in einem Operanden-Adressen-Puffer, zu dem Speicher ausgegeben wird, wenn die Adresse als eine Target-Speicher-Zugangsadresse spezifiziert ist, wodurch entsprechend die Anzahl von Datenübertragungen zu einer ALU verringert wird und berechnete Adressen weniger zu dem Operanden-Adressen-Puffer übertragen werden.
  • Ein weiteres Beispiel eines Mikroprozessors zum Unterstützen einer Verringerung von Coden in den Größen weist auf: ein Pufferfeld zum Einschließen von n Operanden-Adressen-Puffern, die jeweils von einer vorherigen Target-Speicher-Zugangsadresse zu einem Target-Speicher-Zugang n-mal zuvor speichern, wobei n eine ganze Zahl von 2 oder größer ist, und wobei das Puffer-Feld mit einem externen Speicher verbunden ist; eine Ausleseeinrichtung zum Auslesen eines Befehls; eine Befehls-Erfassungseinrichtung zum Erfassen eines Befehls, der durch die Ausleseeinrichtung ausgelesen worden ist, und dazu dient, auf den externen Speicher zuzugreifen; eine Feststelleinrichtung zum Feststellen, ob der Befehl, erfasst durch die Befehls-Erfassungseinrichtung, irgendeinen der Operanden-Adressen-Puffer spezifiziert; eine erste Steuereinrichtung zum Steuern des Puffer-Felds so, dass eine Adresse, gespeichert in einem Operanden-Adressen-Puffer, zu dem externen Speicher ausgegeben wird, wenn die Feststelleinrichtung feststellt, dass der Befehl, erfasst durch die Befehls-Erfassungseinrichtung, den Operanden-Adressen-Puffer spezifiziert; und eine zweite Steuereinrichtung zum Speichern einer Adresse, erhalten von einem Operanden des Befehls, erfasst durch die Befehls-Erfassungseinrichtung, in irgendeinen der Operanden-Adressen-Puffer, und Steuern des Puffer-Felds so, dass die gespeicherte Adresse zu dem externen Speicher dann ausgegeben wird, wenn die Fest stelleinrichtung feststellt, dass der Befehl nicht irgendwelche Operanden-Adressen-Puffer spezifiziert.
  • Mit einem solchen Aufbau kann der Mikroprozessor eine Target-Speicher-Zugangsadresse von irgendeinem von n Operanden-Adressen-Puffern durch Auswählen irgendwelcher der vorherigen Target-Speicher-Zugangsadressen, die darin gespeichert sind, ausgeben. Demzufolge kann der Mikroprozessor auf einen Speicher ohne Spezifizieren irgendwelcher absoluter Adressen und ohne Verwendung von Adressen-Registern zugreifen, da eine Adresse, gespeichert in einem Operanden-Adressen-Puffer, zu dem Speicher als eine Target-Speicher-Zugangsadresse ausgegeben wird.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Diese und andere Aufgaben, Vorteile und Merkmale der Erfindung werden aus der nachfolgenden Beschreibung davon ersichtlich werden, die in Verbindung mit den beigefügten Zeichnungen vorgenommen wird, die eine spezifische Ausführungsform der Erfindung darstellen. In den Zeichnungen:
  • 1 stellt ein Format eines Befehls, verwendet in einem herkömmlichen Mikroprozessor, dar.
  • 2A stellt ein herkömmliches Programm, umfassend zwei Spezifikationen von absoluten Adressen, dar.
  • 2B stellt ein herkömmliches Programm, umfassend einen LOAD Befehl und einen STORE Befehl, unter Verwendung eines Adressen-Registers, dar.
  • 3 zeigt ein Blockdiagramm, das einen Aufbau eines Mikroprozessors einer ersten Ausführungsform der vorliegenden Erfindung darstellt.
  • 4 zeigt ein Blockdiagramm, das einen Aufbau eines Befehls-Decodierblocks 100 darstellt.
  • 5 stellt die Zustände des Befehls-Decodierblocks 100 eines Mikroprozessors einer ersten Ausführungsform der vorliegenden Erfindung dar.
  • 6 stellt zwei Typen von Befehls-Formaten, ausgeführt durch einen Mikroprozessor der ersten Ausführungsform der vorliegenden Erfindung, dar.
  • 7A stellt das Format eines 5-Nibble-Befehls dar.
  • 7B stellt dar, wie 1-Nibble-Code des Befehls, dargestellt in 7A, ausgerichtet werden, wenn der Befehl in einer Stelle in dem externen Speicher, beginnend von einer Byte-Grenze aus, gespeichert wird.
  • 7C stellt die Befehls-Pipeline bei jedem Taktzyklus dar, wenn der Befehl, dargestellt in 7A, durch den Befehls-Decodierblock 100 gelesen wird.
  • 8A stellt dar, wie 1-Nibble-Code des Befehls, dargestellt in 7A, ausgerichtet werden, wenn der Befehl in einer Stelle in dem externen Speicher, beginnend von einer Halb-Byte-Grenze aus, gespeichert wird.
  • 8B stellt die Befehls-Pipeline an jedem Taktzyklus dar, wenn der Befehl, dargestellt in 7A, durch den Befehls-Decodierblock 100 gelesen wird.
  • 9 stellt das Format von einem nicht-konditionalen Sprung-Befehl „jmp" dar.
  • 10 zeigt ein Flussdiagramm, das den Betrieb eines Mikroprozessors einer ersten Ausführungsform der vorliegenden Erfindung darstellt, wenn der Befehl „jsr" ausgeführt wird.
  • 11A stellt eine Beziehung zwischen einem Befehl „jsr", gespeichert an einer Stelle in dem externen Speicher, beginnend von einer Byte-Grenze aus, und der Rückführ-Adresse dar.
  • 11B stellt die Beziehung zwischen einem Befehl „jsr", gespeichert an einer Stelle in dem externen Speicher, beginnend von einer Halb-Byte-Grenze aus, und der Rückführ-Adresse dar.
  • 12 zeigt ein Blockdiagramm, das einen Aufbau eines Beispiels eines weiteren Mikroprozessors darstellt.
  • 13 stellt dar, wie Puffer OAB 5, LDB 6, STB 7, IAB 10, und IFB 11 in dem Mikroprozessor verwendet werden.
  • 14A stellt ein übliches Format eines LOAD Befehls und eines STORE Befehls für das PA-Adressieren dar.
  • 14B stellt den LOAD Befehl für das PA-Adressieren dar.
  • 14C stellt den STORE Befehl für die PA-Adressierung dar.
  • 15A stellt ein Programm-Segment für die PA-Adressierung dar.
  • 15B stellt ein Programm-Segment für die PA-Adressierung dar, zwei absolute Adressen spezifizierend.
  • 15C stellt ein Programm-Segment für die PA-Adressierung dar, umfassend einen LOAD Befehl und einen STORE Befehl, unter Verwendung eines Adressen-Registers.
  • 16 zeigt ein Zeitabstimmungsdiagramm, das die Betriebsweise jeder Komponenten, dargestellt in 12, darstellt.
  • 17 zeigt ein Zeitabstimmungsdiagramm, das die Betriebsweise jeder Komponenten, dargestellt in 12, darstellt.
  • 18 zeigt einen vergrößerten Teil der 12, einen Bereich, umfassend OAB 5.
  • 19A stellt den Stapel dar, bevor eine Unterbrechung verarbeitet wird.
  • 19B stellt den Stapel während der Unterbrechungs-Verarbeitung dar.
  • 20 stellt ein OAB-Feld eines weiteren Beispiels eines Mikroprozessors dar.
  • 21A stellt das Format eines Befehls, verwendet in einer PA-Adressierung, dar.
  • 21B stellt mnemonische Darstellungen von LOAD Befehlen, verwendet in einer PA-Adressierung, dar.
  • 22 stellt ein Programm unter Verwendung einer PA-Adressierung dar, die OAB 52 in dem OAB-Feld spezifiziert, und stellt dar, wie das OAB-Feld durch das Programm arbeitet.
  • 23A stellt den Stapel dar, bevor eine Unterbrechung verarbeitet wird, und zwar in einem weiteren Beispiel.
  • 23B stellt den Stapel während der Unterbrechungs-Verarbeitung in dem weiteren Beispiel dar.
  • 24 zeigt eine Anwendung des weiteren Beispiels.
  • BESCHREIBUNG DER BEVORZUGTEN AUSFÜHRUNGSFORM
  • Eine bevorzugte Ausführungsform der vorliegenden Erfindung wird nachfolgend unter Bezugnahme auf die Figuren beschrieben.
  • <Bevorzugte Ausführungsform>
  • (a) Aufbau
  • 3 zeigt ein Blockdiagramm, das einen Aufbau eines Mikroprozessors einer ersten Ausführungsform der vorliegenden Erfindung darstellt. Der Mikroprozessor, der einen externen Adressen-Bus 212 mit 16-Bit und einen externen Daten-Bus 213 mit 8-Bit aufweist, ist in einen Daten-Pfad-Block 200 und einen Befehls-Decodierblock 100 unterteilt. Es ist anzumerken, das ein externer Speicher zum Speichern von Befehlen, die ausgeführt werden sollen, nicht in der Figur dargestellt ist, sondern mit dem Prozessor über die vorstehenden Busse verbunden ist.
  • Der Daten-Pfad-Block 200 zum Transferieren von Daten-Berechnungen weist eine Auswahleinrichtung (SEL) 201, eine Register-Gruppe 202, einen internen Bus A 203, einen internen Bus B 204, einen Decodier-Zähler (DECPC) 205, einen Vorauslese-Zähler (PFC) 206, einen Inkrementer (INC) 207, eine Arithmetik-Logik-Einheit (ALU) 208, einen Adressen-Puffer (ADB) 209, einen Speicher-Daten-Puffer (STB) 210 und einen Lade-Daten-Puffer (LDB) 211 dar, wobei die Zeichen in den Klammern die Abkürzungen angeben. Diese Komponenten besitzen allgemeine Funktionsweisen.
  • Jeder von dem Stapel-Hinweiszeiger (SP) 202a, dem Decodier-Zähler (DECPC) 205, dem Vorauslese-Zähler (PFC) 206, dem Inkrementer (INC) 207 und dem Adressen-Puffer (ADB) 209, die eine Einheit zum Halten von Adressen-Informationen bilden, besitzt 16 Bits in der Größe. Andererseits besitzt jeder von dem Register (REG) für allgemeine Zwecke 202b, dem Speicher-Daten-Puffer (STB) 210 und dem Lade-Daten-Puffer (LDB) 211, die eine Einheit zum Halten von Daten-Informationen bilden, 8 Bits in der Größe. Der Daten-Pfad-Block 200 und der Befehls-Decodierblock 100 sind durch den internen Bus B 204 verbunden.
  • 4 zeigt ein Blockdiagramm, das einen Aufbau des Befehls-Decodierblocks 100 darstellt.
  • Der Befehls-Decodierblock 100 zum Decodieren von Befehlen, ausgelesen von dem externen Speicher, weist einen Befehls-Auslese-Puffer (IFB) 101, einen Befehls-Puffer (IB) 102, eine Befehls-Auswahleinrichtung (SI) 103, ein Befehls-Register (IR) 104, eine Decodiereinheit 105, eine Ausführeinheit 108, eine Steuereinheit 109 und eine Speichereinheit 110 auf.
  • Der IFB 101 ist ein Register zum Speichern eines 1-Wort-Codes, ausgelesen von dem externen Speicher über den externen Daten-Bus 213.
  • Ein „Wort" ist eine Einheit zum Decodieren von Befehlen. Die vorliegende Vorrichtung befasst sich mit einem 8-Bit-Wort, nämlich einem 1-Byte-Wort. In der ersten Ausführungsform speichert der externe Speicher 1-Wort-Code, nämlich 1-Byte-Code, wobei jeder davon durch eine 16-Bit-Adresse angeordnet ist.
  • Ein „Befehl" zeigt eine logische Einheit von Direktionen zu dem Prozessor an, wie beispielsweise „add #4,d0". Andererseits zeigt ein „Code" einen gesamten oder einen Teil eines codierten Befehls an. Zum Beispiel sind sowohl „0c2" als auch „0c" Code, wobei „0c2" einen Befehl „add #4,d0" in einer hexadezimalen Angabe darstellt und „0c" ein Teil von „0c2" ist.
  • IFB 101 weist einen Befehls-Abruf-Puffer hoher Ordnung (IFBH) 101a und einen Befehls-Abruf-Puffer niederer Ordnung (IFBL) 101b auf. Beide speichern einen Nibble (4 Bits) eines ausgelesenen Codes. Es ist anzumerken, dass der Vorauslese-Zähler (PFC) 206 des Daten-Pfad-Blocks 200 eine externe Speicheradresse eines Codes, gehalten durch den IFB 101, hält, wobei die Adresse über die Adressen-Busse verschickt wird.
  • Der IB 102, der ein Register zum Speichern eines Codes, ausgegeben durch IFB 101, ist, weist einen Befehls-Puffer hoher Ordnung (IBH) 102a und einen Befehls-Puffer niederer Ordnung (IBL) 102b auf. Beide speichern einen 1-Nibble-Code. Es ist anzumerken, dass ein Code, der durch den IFB 101 und den IB 102 gehalten worden ist, zu dem internen Bus B 204 über eine Auswahleinrichtung (nicht in der Figur dargestellt) entsprechend einem Befehl von der Ausführeinheit 108 ausgegeben wird und dann zu dem Daten-Pfad-Block 200 überführt wird.
  • Das IR 104, das ein Register zum Speichern eines 1-Byte-Codes, der decodiert werden soll, ist, weist ein Befehls-Register hoher Ordnung (IRH) 104a und ein Befehls-Register niederer Ordnung (IRL) 104b auf. Beide speichern einen 1-Nibble-Code. Es ist anzumerken, dass der DECPC 205 eines Daten-Pfad-Blocks 200 eine externe Speicher-Adresse eines Codes, gehalten durch den IR 104, speichert.
  • Der IFB 101, der IB 102 und das IR 104 bilden eine Befehls-Pipeline. Insgesamt werden drei Bytes an Coden (Lese-Code für zwei Bytes und ein decodierter Code für ein Byte) in dieser Befehls-Pipeline gespeichert:
  • SI 103 weist zwei unabhängige Komponenten auf: eine Befehls-Auswahleinrichtung hoher Ordnung (SIH) 103a zum Überführen eines Nibbles eines Codes, gespeichert in irgendeinem des IBH 102a, des IBL 102b, und des IRL 104b, zu dem IRH 104a; und eine Befehls-Auswahleinrichtung niederer Ordnung (SIL) 103b zum Überführen eines Nibbles eines Codes, gespeichert in irgendeinem von dem IFBL 101b, dem IBH 102a und dem IBL 102b zu dem IRL 104b.
  • Die Speichereinheit 110 speichert einen numerischen Wert, der anzeigt, wie ein Code in dem IB 102 gespeichert ist. Genauer gesagt speichert die Speichereinheit 110 einen numerischen Wert, der irgendeinem von drei Zuständen, dargestellt in 5, entspricht: Zustand S0, der anzeigt, dass dort kein 1-Nibble-Code, gespeichert in dem IBH 102a und dem IBL 102b, vorhanden ist; Zustand S1, der anzeigt, dass ein 1-Nibble-Code in dem IBH 102a gespeichert ist, allerdings nicht in dem IBL 102b; und einen Zustand S2, der anzeigt, dass sowohl IBH 102a als auch IBL 102b einen 1-Nibble-Code speichern.
  • Die Decodiereinheit 105 nimmt auf die Speichereinheit 110 Bezug und decodiert einen 1-Byte-Code, gespeichert in dem IR 104, schickt dann das Ergebnis zu der Ausführeinheit 108 und der Steuereinheit 109. Die Decodiereinheit 105 decodiert als eine allgemeine Funktion, und weist auch eine eine Code-Größe beurteilende Einheit 107 und eine eine Wortausrichtung beurteilenden Einheit 106 auf.
  • Die Code-Größen-Feststelleinheit 107 stellt fest, ob ein Code, der als nächstes decodiert werden soll, ein 1-Nibble-Code oder ein 1-Byte-Code ist, und schickt die Entscheidung zu der Steuereinheit 109.
  • Die Steuereinheit 109 steuert SI 103 basierend auf einer Entscheidung, geschickt von der Code-Größen-Feststelleinheit 107, und einem Zustand, gespeichert in der Speichereinheit 110, und aktualisiert den Zustand, gespeichert in der Speichereinheit 110.
  • Die Wortausrichtungs-Beurteilungseinheit 106 beurteilt, ob ein decodierter Befehl ein Befehl für eine Verzweigung zu einem Unterprogramm ist, der in einer Stelle in dem externen Speicher gespeichert ist, beginnend von einer Halb-Byte-Grenze aus, und schickt die Beurteilung zu der Ausführungseinheit 108. Eine Byte-Grenze ist eine Grenze zwischen zwei benachbarten 1-Byte-Speicherstellen in dem externen Speicher. Eine Halb-Byte-Grenze ist eine Grenze zwischen einem Nibble höherer Ordnung und einem Nibble niederer Ordnung, oder eine Mitte, einer 1-Byte-Speicherstelle in dem externen Speicher.
  • Die Ausführungseinheit 108 steuert die Komponenten des Befehls-Decodierblocks 100 und des Daten-Pfad-Blocks 200 basierend auf den Ausgängen der Decodiereinheit 105 und führt eine Datenübertragung, Berechnungen, usw., durch. Es ist anzumerken, dass die 3 und 4 nicht Steuersignale darstellen, die von der Ausführungseinheit 108 zu jeder der Komponenten geschickt werden. Auch ist anzumerken, dass alle Komponenten, einschließlich der Ausführungseinheit 108, bei jedem Taktzyklus synchron zu einem Taktsignal arbeiten, das nicht in der Figur dargestellt ist.
  • (b) Befehls-Formate
  • Nun werden Befehls-Formate des Mikroprozessors der ersten Ausführungsform beschrieben. 6 stellt zwei Typen von Befehls-Formaten dar. Alle Befehle, die der vorliegende Mikroprozessor decodiert und ausführt, fallen in Format 1 und Format 2, wie dies in den 6A und 6B dargestellt ist.
  • Befehle in dem Format 1 besitzen eine variable Länge und weisen ein 1-Byte-Basis-Befehls-Wort und ein oder mehrere 1-Nibble-Ausführungs-Wort(e) auf. Einige Befehle in Format 1 können irgendwelche Verlängerungs-Worte haben. Das Basis-Befehls-Wort ist ein Operations-Code zum Spezifizieren eines Befehls, und wird durch die Decodiereinheit 105 decodiert. Ein Verlängerungs-Wort zeigt einen Teil von Daten, wie beispielsweise einen Verschiebungs-Wert, einen Zwischenwert, usw., an, der bei der Berechnung, ausgeführt durch einen Befehl, spezifiziert durch das Basis-Befehls-Wort, verwendet wird. Die Erweiterungs-Worte werden nicht durch die Decodiereinheit 105 decodiert.
  • Zum Beispiel wird ein Befehl „add #2,d0", der den Mikroprozessor anweist, einen Zwischenwert 2 zu einem Wert, gespeichert in dem Register d0, hinzu zu addieren, durch einen Code „0c2" (hex) dargestellt. Der Code „0c2" weist ein Basis-Befehls-Wort „0c" (hex) und ein Erweiterungswort „2" auf. Das Basis-Befehls-Wort „0c" zeigt an: „Addiere einen Wert, dargestellt durch ein darauffolgendes 1-Nibble-Erweiterungswort, zu einem Wert, gespeichert in dem Register d0". Während der vorliegende Mikroprozessor nur drei Nibbles, oder 12 Bits, erfordert, erfordert ein herkömmlicher 16 Bits insgesamt für einen Befehl, der den Mikroprozessor anweist, unter Verwendung eines Werts, dargestellt durch einen Nibble, zu berechnen. Dies kommt daher, dass der herkömmliche Mikroprozessor einen Befehl in Einheiten von Bytes erweitert, die das vorstehende Erweiterungswort „02" (hex) darstellen.
  • Dementsprechend besitzen Befehle in einem Format 1 des vorliegenden Mikroprozessors weniger Bits als entsprechende Befehle des herkömmlichen Mikroprozessors.
  • Befehle in einem Format 2 besitzen ein 3-Nibble-Basis-Befehls-Wort und ein 1-Nibble-Erweiterungs-Wort, die eine variable Länge haben. Zum Beispiel wird ein Befehl „XOR #ff,d0", der den Mikroprozessor anweist, eine exklusiv-oder-Operation in Bezug auf einen Zwischenwert ff (hex) durchzuführen, und ein Wert, gespeichert in dem Register d0, durch einen Code „208ff" (hex) dargestellt. Der Code „208ff" weist ein Basis-Befehls-Wort „208" (hex) und ein Erweiterungswort „ff" (hex) auf. Das Basis-Befehls-Wort „208" zeigt an: „Führe eine Exklusiv-Oder-Operation in Bezug auf einen Wert, dargestellt durch darauffolgende zwei 1-Nibble-Erweiterungsworte, und einen Wert, gespeichert in dem Register d0, durch". Wenn dieser Befehl ausgeführt wird, werden nur drei Nibbles des Basis-Befehls-Worts durch die Decodiereinheit 105 decodiert.
  • Es ist definiert, dass der erste 1-Nibble-Code des Basis-Befehls-Worts des Formats 2 „2" oder „3" ist, das bedeutet, das Basis-Befehls-Wort des Formats 2 ist „2- -„ (hex) oder „3- -„ (hex). Durch diese Anordnung ist es möglich zu entscheiden, ob ein Befehl vom Format 1 oder 2 ist, und zwar nur aufgrund des Werts des ersten Nibbles.
  • Auf diese Art und Weise besitzt der vorliegende Mikroprozessor 8, 12, 16, 20, 24, ..., Bits von Befehlen, mit der minimalen Länge von 8 Bits, die in Einheiten von 4 Bits erweitert werden können. Das bedeutet, dass Befehle in Einheiten von 4 Bits erweitert werden können, was kleiner als eine Länge eines Befehls-Decodierers (8 Bits) ist. Demzufolge verringert der vorliegende Mikroprozessor die Programmgröße durch Verringern der Code-Größe.
  • (c) Operation des Mikroprozessors
  • Nun wird die Operation bzw. die Betriebsweise des vorliegenden Mikroprozessors beschrieben.
  • Es ist anzumerken, dass nur charakteristische Operationen des vorliegenden Mikroprozessors erläutert werden, und nicht andere, allgemeine Operationen. Deshalb wird hauptsächlich der Befehls-Decodier-Block 100 erläutert, und nicht der Daten-Pfad-Block 200.
  • <Decodier-Beispiel 1>
  • In diesem Beispiel wird ein 5-Nibble-Befehl, gespeichert an einer Stelle in dem externen Speicher, beginnend von einer Byte-Grenze, decodiert und durch den vorliegenden Mikroprozessor ausgeführt.
  • 7A stellt das Format des Befehls dar, aufweisend einen 3-Nibble-Basis-Befehl und zwei 1-Nibble-Erweiterungs-Worte. Die Zeichen A bis E stellen jeweils die 1-Nibble-Code dar, die den Befehl aufbauen. 7B stellt dar, wie 1-Nibble-Code des Befehls, dargestellt in 7A, ausgerichtet werden, wenn der Befehl an einer Stelle in dem externen Speicher, beginnend von einer Byte-Grenze aus, gespeichert wird. Es ist anzumerken, dass die Ausrichtungs-Reihenfolge für die 1-Nibble-Code des Basis-Befehls-Worts und diejenigen für solche von Erweiterungsworten zueinander unterschiedlich sind.
  • 7C stellt dar, wie die 1-Nibble-Code in IFB 101, IB 102 und IR 104 gespeichert sind, und wie der Zustand der Speichereinheit 110 bei jedem Taktzyklus ist, wenn der Befehl durch den Befehls-Decodier-Block 100 gelesen wird. IFB 101, IB 102 und IR 104 bilden eine Befehls-Pipeline.
  • An einem Taktzyklus 1 werden 1-Nibble-Code B und A in den IFB 101 hinein ausgelesen.
  • An dem Taktzyklus 2 werden 1-Nibble-Code E und C in den IFB 101 hinein ausgelesen und 1-Nibble-Code B und A werden zu IB 102 übertragen. Es ist anzumerken, dass das Auslesen oder Übertragen von Coden entsprechend den Anweisungen, geschickt von der Ausführungseinheit 108 aus bei jedem Taktzyklus, durchgeführt wird. Der Zustand der Speichereinheit 110 an dem Taktzyklus 2 ist S2, da der vorhergehende Befehl decodiert worden ist.
  • An dem Taktzyklus 3 erkennt die Steuereinheit 109 den Zustand der Speichereinheit 110, der S2 ist, und empfängt von der Code-Größen-Entscheidungseinheit 107 eine Entscheidung, dass der nächste Code, der decodiert werden soll, 1 Byte besitzt. Als Folge weist die Steuereinheit 109 die SI 103 an, einen 1-Byte-Code, gespeichert in IB 102 bis IR 104, zu übertragen, und zwar durch Senden eines Auswahlsignals zu SI 103, und schreibt den Zustand, „S2", in die Speichereinheit 110 hinein. Gemäß der Anweisung durch das Auswahlsignal überträgt SIH 103a einen 1-Nibble-Code A, gespeichert in dem IBL 102b, zu dem IRH 104a, und SIL 103b überträgt einen 1-Nibble-Code B, gespeichert in IBH 102, zu IRL 104b.
  • Als eine Folge speichert IR 104 1-Nibble-Code A und B, dann werden die 1-Nibble-Code durch die Decodiereinheit 105 decodiert. Von dem Decodierer-Ergebnis des ersten 1-Nibble-Code A beurteilt die Code-Größen-Entscheidungseinheit 107, dass das Basis-Befehls-Wort 3 Nibble besitzt, und dass der nächste Code, der decodiert werden soll, einen Nibble besitzt, was der Rest des Basis-Befehls-Worts ist.
  • An dem Taktzyklus 4 erkennt die Steuereinheit 109 den Zustand der Speichereinheit 110, der S2 ist, und empfängt von der Code-Größen-Entscheidungseinheit 107 eine Entscheidung, dass der nächste Code, der decodiert werden soll, einen Nibble besitzt. Als Folge weist die Steuereinheit 109 SI 103 an, einen 1-Nibble-Code, gespeichert in IBL 102b bis IRL 104b, zu übertragen, durch Schicken eines Auswahlsignals zu SI 103, und schreibt den Zustand, „S1", in die Speichereinheit 110. Gemäß der Anweisung durch das Auswahlsignal überträgt SIH 103a einen 1-Nibble-Code B, gespeichert in IRL 104b, zu IRH 104a, und SIL 103b überträgt einen 1-Nibble-Code C, gespeichert in IBL 102b, zu IRL 104b.
  • Als Folge speichert IR 104 1-Nibble-Code B und C, dann werden die 1-Nibble-Code durch die Decodiereinheit 105 decodiert. Gemäß dem Decodier-Ergebnis überträgt die Ausführungseinheit 108 Erweiterungsworte D und E, gespeichert in IFB 101 und IB 102, zu einem Daten-Pfad-Block 200 über einen internen Bus B 204. Dann wird, nach einer bestimmten, erforderlichen Datenverarbeitung, die Ausführung des Befehls abgeschlossen.
  • Es ist anzumerken, dass, in diesem Beispiel, definiert ist, dass der erste 1-Nibble-Code A nur weiterleitet, dass das Basis-Befehls-Wort drei Nibble besitzt, und es ist auch definiert, dass die darauffolgenden 1-Nibble-Code B und C den substantiellen Befehl haben, z. B. „Addiere einen Zwischenwert zu einem Wert, gespeichert in dem Register d0". Deshalb führt die Ausführungseinheit 108 den Befehl gemäß dem Decodier-Ergebnis der 1-Nibble-Code B und C aus und erfordert nicht das Decodier-Ergebnis der 1-Nibble-Code A und B. Auf diese Art und Weise decodiert die Decodiereinheit 105 korrekt ein 3-Nibble-Basis-Befehls-Wort, das 1,5-mal so groß wie die Eingangs-Kapazität der Decodiereinheit 105 ist.
  • <Decodier-Beispiel 2>
  • In diesem Beispiel wird ein 5-Nibble-Befehl, gespeichert in einer Stelle in dem externen Speicher, beginnend von einer Halb-Byte-Grenze aus, decodiert und wird durch den vorliegenden Mikroprozessor ausgeführt.
  • Das Format des Befehls ist dasselbe wie dasjenige des Decodier-Beispiels 1. 8A stellt dar, wie 1-Nibble-Code des Befehls, dargestellt in 7A, ausgerichtet werden, wenn der Befehl in einer Stelle in dem externen Speicher gespeichert ist, beginnend von einer Halb-Byte-Grenze aus.
  • 8B stellt, wie 7C in dem Decodier-Beispiel 1, den Datenfluss in der Befehls-Pipeline dar.
  • An dem Taktzyklus 1 wird ein 1-Nibble-Code A in den IFB 101 eingelesen.
  • An dem Taktzyklus 2 werden 1-Nibble-Code B und C in IFB 101 eingelesen und ein 1-Nibble-Code A wird zu IB 102 übertragen. Der Zustand der Speichereinheit 110 an dem Taktzyklus 2 ist S1, da der letzte 1-Nibble-Code des vorhergehenden Befehls an einer Stelle in dem externen Speicher, beginnend von einer Halb-Byte-Grenze aus, gespeichert worden ist.
  • An dem Taktzyklus 3 erkennt die Steuereinheit 109, dass der Zustand der Speichereinheit 110 S1 ist, und empfängt von der Code-Größen-Entscheidungseinheit 107 eine Entscheidung, dass der nächste Code, der decodiert werden soll, ein Byte besitzt. Als Folge weist die Steuereinheit 109 SI 103 an, einen 1-Byte-Code, der aus einem Nibble, gespeichert in IFB 101, und einem anderen Nibble, gespeichert in IB 102, besteht, zu IR 104 zu übertragen, und zwar durch Senden eines Auswahl-Signals zu SI 103, und schreibt den Zustand, „S1 ", in die Speichereinheit 110 hinein. Gemäß der Anweisung durch das Auswahl-Signal überträgt SIH 103a einen 1-Nibble-Code A, gespeichert in IBH 102a, zu IRH 104a, und SIL 103b überträgt einen 1-Nibble-Code B, gespeichert in IFBL 101b, zu IRL 104b.
  • Als Folge speichert IR 104 1-Nibble-Code A und B, dann werden die 1-Nibble-Code durch die Decodiereinheit 105 decodiert. Von dem Decodier-Ergebnis des ersten 1-Nibble-Code A entscheidet die Code-Größen-Entscheidungseinheit 107, dass das Basis-Befehls-Wort drei Nibble besitzt, und dass der nächste Code, der decodiert werden soll, einen Nibble besitzt, was der Rest des Basis-Befehls-Wortes ist.
  • An dem Taktzyklus 4 erkennt die Steuereinheit 109, dass der Zustand der Speichereinheit 110 S1 ist, und empfängt von der Code-Größen-Entscheidungseinheit 107 eine Entscheidung, dass der nächste Code, der decodiert werden soll, einen Nibble besitzt. Als ein Ergebnis weist die Steuereinheit 109 SI 103 an, einen 1-Nibble-Code, gespeichert in IBH 102a, zu IRL 104b zu übertragen, in dem ein Auswahl-Signal zu SI 103 geschickt wird, und schreibt den Zustand, „S2", in die Speichereinheit 110 hinein. Gemäß der Anweisung durch das Auswahl-Signal überträgt SIH 103a einen 1-Nibble-Code B, gespeichert in IRL 104b, zu IRH 104a, und SIL 103b überträgt einen 1-Nibble-Code C, gespeichert in IBH 102a, zu IRL 104b.
  • Als eine Folge speichert IR 104 1-Nibble-Code B und C, dann werden die 1-Nibble-Code durch die Decodiereinheit 105 decodiert. Gemäß dem Decodier-Ergebnis überträgt die Ausführungseinheit 108 Erweiterungs-Worte D und E, gespeichert in IB 102, zu dem Daten-Pfad-Block 200 über den internen Bus B 204. Dann wird, nach einer bestimmten, notwendigen Datenverarbeitung, die Ausführung des Befehls abgeschlossen.
  • Auf diese Art und Weise decodiert der vorliegende Mikroprozessor einen Befehl korrekt und führt ihn aus, sogar dann, wenn der Befehl in einer Stelle in dem externen Speicher gespeichert ist, beginnend von einer Halb-Byte-Grenze aus.
  • <Sprung-Beispiel 1>
  • In diesem Beispiel werden das Format eines Sprung-Befehls und die Operation des vorliegenden Mikroprozessors beschrieben, wenn das Programm zu einer Stelle in dem externen Speicher, beginnend von einer Halb-Byte-Grenze aus, springt.
  • 9 stellt das Format eines nicht-konditionalen Sprung-Befehls „jmp" dar. Dieser Befehl besteht aus einem Basis-Befehls-Wort mit 8 Bits und Erweiterungs-Worten von 16 Bits, die sechs 1-Nibble-Code insgesamt haben.
  • Wie bei dem vorliegenden Mikroprozessor sind 16 Bits nicht genug für einen Sprung-Befehl, um eine Sprung-Target-Adresse zu spezifizieren, da ein Sprung-Target-Befehl in einer Stelle in dem externen Speicher, beginnend von einer Halb-Byte-Grenze aus, gespeichert werden kann. Das bedeutet, dass spezifiziert werden sollte, ob das Programm zu einem Nibble höherer Ordnung oder zu einem Nibble niederer Ordnung in der Stelle, spezifiziert durch die 16-Bit-Adresse, springt. Für diesen Zweck kann ein 7-Nibble-Befehl der einen anderen Nibble zum Spezifizieren einer Sprung-Target-Adresse besitzt, vorgesehen werden.
  • Allerdings würde der 7-Nibble-Befehl unnötige 3 Bits umfassen und die Code-Größe erhöhen.
  • Deshalb wird das am wenigsten signifikante Bit (Least Significant Bit – LSB) des Basis-Befehls-Worts eines Befehls „jmp" verwendet, um anzuzeigen, ob der Sprung-Target-Befehl in einer Stelle in dem externen Speicher gespeichert wird, beginnend von einer Byte-Grenze oder einer Halb-Byte-Grenze aus, wie dies in 9 dargestellt ist. Das bedeutet, dass definiert wird, dass 17 Bits, aufweisend 2 Bytes von Erweiterungs-Worten, und das LSB des Basis-Befehls-Worts, verwendet werden, um eine Sprung-Target-Adresse zu spezifizieren. Mit dieser Definition wird ein nicht-konditionaler Sprung-Befehl „jmp" auf sechs 1-Nibble-Code von sieben 1-Nibble-Coden komprimiert. Dies verhindert die Verwendung von unnötigen Bits für die Code.
  • Nun wird beschrieben, wie der vorliegende Mikroprozessor arbeitet, wenn ein Befehl „jmp" ausgeführt wird.
  • Es wird angenommen, dass der Befehl „jmp" von dem externen Speicher ausgelesen worden ist, und dass die 1-Nibble-Code in IFB 101, IB 102 und IR 104 gespeichert sind.
  • Die Decodiereinheit 105 schickt nur Informationen eines LSB des Basis-Befehls-Worts, gespeichert in IR 104, zu der Steuereinheit 109. Die Steuereinheit 109 schreibt einen Zustand „S1" in eine Speichereinheit 110, wenn die empfangene Information „1" ist, und „S2", falls sie „0" ist.
  • Dann decodiert die Decodiereinheit sieben Bits höherer Ordnung des Basis-Befehls-Worts, gespeichert in IR 104, und schickt eine Entscheidung zu der Ausführungseinheit 108, dass der Befehl ein nichtkonditionaler Sprung-Befehl ist. Beim Empfang der Entscheidung überträgt die Ausführungseinheit 108 eine Sprung-Target-Adresse von 16 Bits, gespeichert in IFB 101 und IB 102, zu dem Daten-Pfad-Block 200, und gibt die Adresse zu dem externen Adressen-Bus 212 aus. Als eine Folge wird ein Befehl, gespeichert in einer Stelle in dem externen Speicher, spezifiziert durch eine Adresse, geschickt über den externen Adressen-Bus 212, in den Befehls-Decodier-Block 100 in Einheiten von Bytes eingelesen.
  • Nachdem das erste Byte des Befehls zu IB 102 übertragen ist, steuert die Steuereinheit 109 SI 103, basierend auf dem Zustand der Speichereinheit 110, so dass ein Code, der bei dem nächsten Taktzyklus decodiert werden soll, bestimmt wird.
  • Genauer gesagt weist die Steuereinheit 109 SI 103 an, einen 1-Byte-Code, gespeichert in IB 102, zu IR 104 zu übertragen, falls der Zustand der Speichereinheit 110 S2 ist. Diese Anweisung ist dieselbe wie diejenige, die in dem Taktzyklus 3 in dem Decodier-Beispiel 1 dargestellt ist, durch den ein Befehl, gespeichert in einer Stelle in dem externen Speicher, beginnend von einer Byte-Grenze, decodiert wird. Das bedeutet, dass diese äquivalent zu einem Sprung zu der Byte-Grenze ist.
  • Andererseits weist die Steuereinheit 109 SI 103 an, einen 1-Byte-Code, der aus einem Nibble, gespeichert in IFB 101, und einem anderen Nibble, gespeichert in IB 102, besteht, zu IR 104 zu übertragen, falls der Zustand der Speichereinheit 110 S1 ist. Diese Anweisung ist dieselbe wie diejenige, die in dem Taktzyklus 3 in dem Decodier-Beispiel 2 dargestellt ist, indem ein Befehl, gespeichert in einer Stelle in dem externen Speicher, beginnend von einer Halb-Byte-Grenze aus, decodiert wird. Das bedeutet, sie ist äquivalent zu einem Sprung zu der Halb-Byte-Grenze.
  • In diesem Beispiel endet ein Sprung zu einer Byte-Grenze oder einer Halb-Byte-Grenze, ausgeführt durch einen nichtkonditionalen jump Befehl mit 3-Byte, „jmp".
  • <Sprung-Beispiel 2>
  • Nachfolgend wird die Operation des vorliegenden Mikroprozessors beschrieben, wenn ein Sprung-Unterprogramm-Befehl (nachfolgend Befehl „jsr") ausgeführt wird, und ein Befehl, gespeichert in einer Stelle in dem externen Speicher, beginnend von einer Halb-Byte-Grenze aus, nach der Ausführung des Befehls „jsr" ausgeführt werden sollte.
  • Der Befehl „jsr" ist ein Sprung-Befehl, der eine Adresse sichert, die der Adresse des Befehls „jsr" folgt, und zwar in einen Speicherabschnitt (nachfolgend Stapel bzw. Stack), spezifiziert durch einen Stack-Hinweiszeiger (SP) 202a, bevor der Sprung ausgeführt wird. Die gesicherte Adresse wird auch als eine Rückführ-Adresse bezeichnet. Der Befehl „jsr" und ein Rückführ-Befehl, der verwendet wird, um das Ende eines Unterprogrammes anzuzeigen, werden zusammen als ein Satz verwendet. Wenn der Befehl „jsr" ausgeführt wird, wird ein Rückführ-Befehl auch ausgeführt, wobei dann eine Rückführ-Adresse, gespeichert in dem Stack, gelesen wird, und ein Befehl, gespeichert in einer Stelle, spezifiziert durch die Rückführ-Adresse, ausgeführt wird.
  • Dabei sind, wie in dem Sprung-Beispiel 1 beschrieben ist, mindestens 17 Bits erforderlich, um eine Rückführ-Adresse zu spezifizieren, falls der Befehl in einer Stelle in dem externen Speicher, beginnend von einer Halb-Byte-Grenze aus, gespeichert ist. Dementsprechend erfordert ein Code zum Spezifizieren einer Rückführ-Adresse drei Bytes. Das bedeutet, dass auf den Stack drei Mal zu jedem Zeitpunkt zugegriffen wird, zu dem ein Befehl „jsr" oder ein Rückführ-Befehl ausgeführt wird.
  • Wenn sich die Zahl von Zugriffen auf den Stack erhöht, verringert sich der Durchsatz des Mikroprozessors. Genauer gesagt haben Programme, geschrieben in der C Sprache, häufig Zugriffe auf den Stack. Dies beeinflusst den Durchsatz des Mikroprozessors.
  • Der vorliegende Mikroprozessor verringert die Code-Größe. Der vorliegende Mikroprozessor kann eine Rückführ-Adresse mit nur zwei Bytes auch dann spezifizieren, wenn der Befehl „jsr" an einer Stelle in dem externen Speicher, beginnend von einer Halb-Byte-Grenze aus, gespeichert werden soll.
  • Das Format des Befehls „jsr" ist dasselbe wie dasjenige des nichtkonditionalen Sprung-Befehls „jmp", wie dies in 9 dargestellt ist. Das bedeutet, dass der Befehl ein Basis-Befehls-Wort von 8 Bits und Erweiterungs-Worte von 16 Bits aufweist. Eine Sprung-Adresse wird durch den LSB des Basis-Befehls-Worts und von Erweiterungs-Worten mit 16 Bits spezifiziert. Deshalb wird ein Sprung entsprechend wie in dem Sprung-Beispiel 1 ausgeführt, wenn das Programm zu einer Byte-Grenze oder zu einer Halb-Byte-Grenze in dem externen Speicher springt.
  • Nun wird beschrieben, wie der vorliegende Mikroprozessor arbeitet, wenn ein Befehl „jsr" ausgeführt wird, und zwar unter Bezugnahme auf 10.
  • 10 zeigt ein Flussdiagramm, das einen Prozess des vorliegenden Mikroprozessors beim Ausführen eines Befehls „jsr" darstellt.
  • Nachdem das Basis-Befehls-Wort eines Befehls „jsr" in IR 104 gespeichert ist, identifiziert die Wort-Ausrichtungs-Entscheidungseinheit 106 den Befehl, beurteilt, ob der Befehl in einer Stelle in dem externen Speicher, beginnend von einer Byte-Grenze aus oder von einer Halb-Byte-Grenze aus, gespeichert worden ist, und zwar unter Bezugnahme auf den Zustand der Speichereinheit 110, und schickt die Beurteilung zu der Ausführungseinheit 108 (Schritt S81).
  • Beim Empfangen einer Entscheidung, dass der Befehl in einer Stelle, beginnend von einer Byte-Grenze aus, gespeichert worden ist, erkennt die Ausführungseinheit 108 die Länge des Befehls als 6 Nibbles (Schritt S82), sichert in den Stack einer 16-Bit-Adresse, die der Adresse des Befehls folgt, und spezifiziert eine Byte-Grenze (Schritt S84). 11A stellt die Beziehung zwischen einem Befehl „jsr", gespeichert in einer Stelle, beginnend von einer Byte-Grenze aus, und der Rückführ-Adresse, dar.
  • Andererseits erkennt, beim Empfangen einer Entscheidung, dass der Befehl in einer Stelle, beginnend von einer Halb-Byte-Grenze aus, gespeichert worden ist, die Ausführungseinheit 108 die Länge des Befehls als 7 Nibbles (Schritt S83), sichert in den Stack eine 16-Bit-Adresse hinein, die der Adresse des 7-Nibble-Befehls folgt, und spezifiziert die Byte-Grenze (Schritt S84). Genauer gesagt liest die Ausführungseinheit 108 eine Adresse des Befehls von DECPC 205, schickt die Adresse zu ALU 208, berechnet eine Rückführ-Adresse unter der Annahme, dass die Länge des Befehls 7 Nibbles ist, und steuert in Bezug stehende Komponenten so, dass die erhaltene Rückführ-Adresse an dem Stack geschrieben wird. 11B stellt die Beziehung zwischen dem Befehl „jsr", gespeichert in einer Stelle, beginnend von einer Halb-Byte-Grenze aus, und der Rückführ-Adresse dar.
  • Nachdem die Rückführ-Adresse in dem Stack gesichert ist, arbeitet der Mikroprozessor so, wie in dem Sprung-Beispiel 1. Die Ausführungseinheit 108 springt zu einem Unterprogramm, spezifiziert durch 17 Bits niederer Ordnung des Befehls (Schritt S85).
  • Auf diese Art und Weise erfordert eine Rückführ-Adresse, die in dem Stack gespeichert werden soll, nur 2 Bytes, ob der Befehl „jsr" in einer Stelle in dem externen Speicher, beginnend von einer Byte-Grenze oder von einer Halb-Byte-Grenze, gespeichert ist.
  • Wenn ein Rückführ-Befehl ausgeführt wird, nachdem die Ausführung des Unterprogramms abgeschlossen ist, liest die Ausführungseinheit 108 die Rückführ-Adresse von dem Stack, speichert die Adresse in ADB 209 und weist betroffene Komponenten an, einen Befehl, gespeichert in einer Stelle in dem externen Speicher, spezifiziert durch die Rückführ-Adresse, auszuführen.
  • Um die vorstehenden Operationen zu realisieren, müssen der Befehl „jsr" und der nächste Befehl in dem externen Speicher entsprechend den vorstehenden Operationen ausgerichtet werden. Das bedeutet, dass der Befehl „jsr" so betrachtet werden sollte, dass er 7 Nibbles besitzt, wenn er in einer Stelle in dem externen Speicher, beginnend von einer Halb-Byte-Grenze aus, gespeichert wird. Dies wird durch ein Adressen-Zuordnungs-Programm vorgenommen, das als eine Verknüpfungseinrichtung (linker) bezeichnet wird. Die Betriebsweise der Verknüpfungseinrichtung wird hier nicht erläutert, da sie nicht zu dem Gegenstand der vorliegenden Erfindung in Bezug steht.
  • Wie anhand der vorstehenden Beschreibung verständlich ist, speichert der vorliegende Mikroprozessor eine Rückführ-Adresse von nur zwei Bytes, ob ein Befehl in einer Stelle in dem externen Speicher, beginnend von einer Byte-Grenze oder von einer Halb-Byte-Grenze, gespeichert ist. Dementsprechend wird die Verarbeitungszeit verringert.
  • Es ist anzumerken, dass die Einheiten, definiert durch die vorliegende Ausführungsform, geändert werden können. Zum Beispiel kann ein Wort 12 Bits, anstelle von 8 Bits, haben. In diesem Fall werden alle Komponenten eines Befehls-Decodier-Blocks 100 und eines Daten-Pfad-Blocks 200 so eingestellt werden, um 12 Bits zu behandeln, und die Code werden auch entsprechend eingestellt werden.
  • Es ist auch anzumerken, das die Speichereinheit 110 Informationen, andere als den Zustand von IB 102, speichern kann. Zum Beispiel kann die Speichereinheit 110 die Zustände von IFB 101 und IB 102 speichern. Mit dieser Anordnung sind spezifischere Steuerungen bzw. Kontrollen verfügbar.
  • Es ist auch anzumerken, dass die Anzahl von Stufen in der Befehls-Pipeline nicht auf „3" beschränkt ist, was in der vorliegenden Ausführungsform mit den Stufen IFB 101, IB 102 und IR 104 dargestellt ist.
  • <Beispiel>
  • (a) Aufbau
  • 12 zeigt ein Blockdiagramm, das einen Aufbau eines Beispiels eines weiteren Mikroprozessors darstellt.
  • Der Mikroprozessor weist einen Befehls-Puffer 1, ein Befehls-Register 2, einen Treiber 3, eine ALU 4, einen Operanden-Adressen-Puffer 5, einen Lade-Puffer 6, einen Speicher-Puffer 7, einen Treiber 8, einen Treiber 9, einen Befehls-Adressen-Puffer 10, einen Befehls-Auslese-Puffer 11, einen Decodierer 12, ein Mikro-Befehls-Register 13, ein Status-Register 14, einen Vorauslese-Zähler 15, einen Inkrementer 16, einen Decodier-Programm-Zähler 17, einen Ausführungs-Programm-Zähler 18, eine Register-Gruppe 19, ein Programm-Status-Wort 20, eine Unterbrechungs-Empfangseinheit 21, einen Selektor 23, einen Selektor 24, einen Selektor 25, einen internen Bus 30, einen internen Bus 31, einen internen Bus 32, einen Adressen-Bus 33, einen Daten-Bus 34, einen ROM 35, einen RAM 36, eine periphere Schaltung 37, einen Pfad 41, einen Pfad 42, einen Pfad 43 und einen Pfad 44 auf. In 12 speichern der ROM 35 und der RAM 36 jeweils Befehle und Daten. Auch umfasst die periphere Schaltung 37 I/O-Vorrichtungen, wie beispielsweise einen Zeitgeber, einen seriellen Port, usw.. Jeder I/O-Vorrichtung ist eine Speicher-Adresse zugeordnet (was als eine speicher-aufgelistete I/O bezeichnet wird).
  • Der Befehls-Puffer 1 (nachfolgend IB1, wie er in der Figur dargestellt ist) speichert vorab einen Befehl, ausgelesen von dem ROM 35, bevor der Befehl ausgeführt wird.
  • Das Befehls-Register 2 (nachfolgend IR 2, wie es in der Figur dargestellt ist), speichert einen Befehl, der durch den Decodierer 12 decodiert werden soll.
  • Der Treiber 3 ist ein Drei-Zustands-Treiber zum Ausgeben der Daten, gespeichert in dem IB 1, zu B2BUS 32. Genauer gesagt werden, falls absolute Adressen oder Operanden-Werte in IB 1 gespeichert sind, die Daten unter der Steuerung des Mikro-Befehls-Registers 13 ausgegeben.
  • Die ALU 4, gesteuert durch den Decodierer 12, führt allgemeine Berechnungen, Adressen-Berechnungen, usw., durch. Zum Beispiel berechnet, bei einer Adressen-Berechnung, falls eine indirekte Adresse mit einer Verschiebung durch einen Operanden in einen Befehl spezifiziert wird, die ALU die Target-Speicher-Adresse von einem Wert, gespeichert in einem Adressen-Register in einer Register-Gruppe 19, und einen Verschiebungs-Wert (disp) gespeichert in IB 1, und gibt die berechnete Adresse zu dem Operanden-Adressen-Puffer 5 aus. Falls eine absolute Adresse durch einen Operanden in einem Befehl spezifiziert ist, überträgt die ALU 4 die absolute Adresse von IB 1 zu dem Operanden-Adressen-Puffer 5.
  • Der Operanden-Adressen-Puffer 5 (nachfolgend OAB 5) ist ein Puffer mit 16 Bits zum Speichern einer Target-Speicher-Adresse. Speicher, auf die zugegriffen werden soll, sind ROM 35, RAM 36 und die periphere Schaltung 37.
  • Der Lade-Puffer 6 (nachfolgend LDB 6) ist ein Puffer mit 16 Bits zum Speichern von Daten der Target-Speicher-Adresse, gespeichert in OAB 5.
  • Der Speicher-Puffer 7 (nachfolgend STB 7) ist ein Puffer mit 16 Bits zum Speichern von Daten, die zu einer Stelle in einem Speicher, spezifiziert durch eine Adresse, gespeichert in OAB 5, geschrieben werden sollen.
  • Der Treiber 8 ist ein Drei-Zustands-Treiber zum Schicken von Daten, gespeichert in OAB 5, zu ABUS 30, und zwar unter der Steuerung des Decodierers 12 und des MIR 13, wenn eine Unterbrechung verarbeitet wird.
  • Der Treiber 9 ist Drei-Zustands-Treiber zum Ausgeben von Daten, gespeichert in OAB 5, zu einem Adressen-Bus 33 unter der Steuerung des Decodierers 12 und von MIR 13, wenn auf einen Speicher zugegriffen wird. Das bedeutet, ein Wert, gespeichert in OAB 5, wird zu dem ROM 35, dem RAM 36 und zu der peripheren Schaltung 37 als eine Speicher-Adresse geschickt.
  • Der Befehls-Adressen-Puffer 10 (nachfolgend IAB 10) speichert eine 16-Bit-Adresse einer Stelle in dem ROM 35, in der ein Befehl, der ausgelesen werden soll, gespeichert ist.
  • Der Befehls-Auslese-Puffer 11 (nachfolgend IFB 11) speichert einen 16-Bit-Befehl, ausgelesen von dem ROM 35.
  • Der Decodierer 12 decodiert einen Befehl, gespeichert in IR 2, und Daten in dem Status-Register 14, und gibt einen Mikro-Befehl zum Ausführen des Befehls aus.
  • Das Mikro-Befehls-Register 13 (nachfolgend MIR 13) schickt ein Steuersignal, entsprechend zu einem Mikro-Befehl, ausgegeben von dem Decodierer 12.
  • Das Status-Register 14 (nachfolgend SR 14) speichert Status-Zeichen bzw. -Flags, die zum Decodieren von Befehlen verwendet werden.
  • Der Vorauslese-Zähler 15 (nachfolgend PFC 15) und der Inkrementer 16 bilden das, was als ein Programm-Zähler bezeichnet wird, der, unter der Steuerung des Decodierers 12, sequenziell Adressen von Befehlen, die ausgelesen werden sollen, erzeugt.
  • Der Decodier-Programm-Zähler 17 (nachfolgend DECPC 17) speichert eine Adresse eines Befehls, der sich in der Befehls-Decodier-Stufe befindet.
  • Der Ausführungs-Programm-Zähler 18 (nachfolgend EXPC 18) speichert eine Adresse eines Befehls, der sich in der Befehls-Ausführungs-Stufe befindet.
  • Die Register-Gruppe 19 weist vier Daten-Register D0 bis D3, vier Adressen-Register A0 bis A3 und einen Stapel-Hinweiszeiger, von denen jeder 16 Bits hat, auf.
  • Ein Programm-Status-Wort 20 (nachfolgend PSW 20) speichert Zeichen zum Anzeigen der internen Zustände des Mikroprozessors.
  • Eine Unterbrechungs-Empfangseinheit 21 empfängt Unterbrechungs-Signale IPT 0 bis IPT 6 und gibt Unterbrechungs-Pegel-Signale entsprechend den Pegeln von empfangenen Unterbrechungs-Signalen aus. Die Unterbrechungs-Signale IPT 0 bis IPT 6 zeigen Unterbrechungs-Anforderungen an, geschickt von externen I/O Vorrichtungen aus. Ein Unterbrechungs-Pegel-Signal, das irgendwelche Prioritäts-Pegel IRQ 0 bis IRQ 6 besitzt, fordert einen Decodierer 12 an, um eine Unterbrechung entsprechend dem Pegel zu verarbeiten. Wenn eine nicht-maskierbare Unterbrechung (nachfolgend NMI) empfangen ist, gibt die Unterbrechungs-Empfangseinheit 21 die NMI zu dem Decodierer 12 so aus, wie sie ist. Eine NMI ist eine Unterbrechung, die eine Priorität gegenüber Unterbrechungs-Signalen IPT 0 bis IPT 6 annimmt und nicht durch Software maskiert werden kann.
  • Ein Selektor 23 überträgt selektiv Daten von sowohl dem internen Bus 30, dem internen Bus 32 als auch der ALU 4 zu einem Eingangs-Port der ALU 4.
  • Ein Selektor 24 überträgt selektiv Daten von sowohl dem internen Bus 31 als auch dem internen Bus 32 zu dem anderen Eingangs-Port der ALU 4.
  • Der interne Bus 30 (nachfolgend ABUS 30), der interne Bus 31 (nachfolgend B1 BUS) und der interne Bus 32 (nachfolgend B2BUS 32) sind interne Busse des Mikroprozessors.
  • Nun werden Funktionen von verschiedenen Puffern erläutert. 13 stellt dar, wie Puffer OAB 5, LDB 6, STB 7, IAB 10 und IFB 11 in dem Mikroprozessor verwendet werden.
  • Wie in der Figur dargestellt ist, hält der OAB 5 eine Target-Adresse des RAM's 36, wie dies durch einen Pfeil j 1 angezeigt ist. Der LDB 6 hält Daten, gelesen von einer Stelle in dem RAM 36, spezifiziert durch die Target-Adresse, wie dies durch einen Pfeil j 3 angezeigt ist. Der STB 7 hält Daten, die zu derselben Stelle in dem RAM 36 geschrieben werden sollen, wie dies durch einen Pfeil j 2 angezeigt ist.
  • Andererseits hält der IAB 10 eine Target-Adresse des ROM's35, wie dies durch einen Pfeil j 4 angezeigt ist, und der IFB 11 hält einen Befehl, gelesen von einer Stelle in dem ROM 35, spezifiziert durch die Target-Adresse, wie dies durch einen Pfeil j 5 angezeigt ist.
  • Wenn der Programm-Zähler aktualisiert wird, wird der Wert, gespeichert in dem IAB 10, auch aktualisiert, wie dies durch Rechtecke j 6 und j 7 in unterbrochener Linie angezeigt ist. Das bedeutet, dass der Wert zu jedem Zeitpunkt aktualisiert wird, zu dem der Programm-Zähler aktualisiert wird. Andererseits wird der Wert, gespeichert in dem OAB 5, aktualisiert, wenn eine Adresse berechnet wird oder wenn eine absolute Adresse spezifiziert wird, wie dies durch Rechtecke j 8 und j 9 in unterbrochener Linie angezeigt ist. Das bedeutet, dass der Wert nicht aktualisiert wird, ohne dass eine Adresse berechnet wird oder ohne dass eine absolute Adresse spezifiziert wird.
  • (b) PA-Adressierung
  • Der vorliegende Mikroprozessor verwendet Befehle, die einen Wert spezifizieren, gespeichert in einem OAB, und zwar als eine Target-Speicher-Adresse. In diesem Dokument wird ein solches Adressierverfahren als die Adressierung der vorherigen Adresse (Previous Address – PA) bezeichnet.
  • 14A stellt ein übliches Format eines LOAD Befehls und eines STORE Befehls für das PA-Adressieren dar.
  • Eine Spezifikation der Target-Speicher-Adresse wird durch Spezifizieren von „PA" (eine mnemonische Darstellung) für einen Operanden in einem Befehl realisiert.
  • Wie in 14A dargestellt ist, umfasst das Format des LOAD/STORE Befehls ein Feld d1, das einen Befehls-Typ (LOAD Befehle, STORE Befehle, usw.) anzeigt, ein Feld d2 eines Bits, das das PA-Adressieren für Maschinen-Sprach-Code anzeigt, und ein Feld d3 von zwei Bits zum Spezifizieren irgendwelcher der Daten-Register D0 bis D3 einer Register-Gruppe 19.
  • Das Feld d1 spezifiziert, ob der Befehl LOAD oder STORE ist, ob die Operation eine Addition, eine Subtraktion, eine Multiplikation, eine Division oder eine Verschiebung ist, und ob der Befehl Daten von 8-Bit oder Daten von 16-Bit verwendet.
  • Das Feld d2 spezifiziert, ob die PA-Adressierung verwendet wird: „1" für „verwendet"; und „0" für „nicht verwendet".
  • Das Feld d3 spezifiziert ein Register, dessen Wert als Operand verwendet wird: „00" für Register D0, „01" für D1, „10" für D2 und „11" für D3.
  • 14B stellt den LOAD Befehl für das PA-Adressieren dar; und 14C stellt den STORE Befehl dar.
  • „LD (PA), DN" in der Figur zeigt einen LOAD Befehl für das PA-Adressieren an. Während ein allgemeiner LOAD Befehl Daten von einem Speicher liest und die Daten in ein Register speichert, liest ein LOAD Befehl für das PA-Adressieren Daten von einer Stelle in einen Speicher an einer Adresse, die in dem Operanden-Adressen-Puffer gespeichert ist.
  • Zum Beispiel ist in derselben Figur die Adresse „0043" in dem Operanden-Adressen-Puffer gespeichert. Hierbei werden, falls ein Operand (PA) in dem LOAD Befehl spezifiziert ist, Daten, gespeichert in einer Stelle an einer Adresse „0043", gelesen und zu dem Daten-Register Dn übertragen, wie dies durch einen Pfeil in unterbrochener Linie angezeigt ist.
  • „ST Dn,(PA)" in 14C zeigt einen STORE Befehl der PA-Adressierung an. Ein allgemeiner STORE Befehl liest Daten von einem Register und speichert die Daten an einer Stelle in einem Speicher. Ein STORE Befehl der PA-Adressierung speichert die Daten zu einer Stelle in einem Speicher, spezifiziert durch eine Adresse, gespeichert in OAB.
  • Zum Beispiel wird, in 14C, eine Adresse „0043" in OAB gespeichert. Hierbei werden, falls ein Operand (PA) in dem STORE Befehl spezifiziert ist, Daten, gespeichert in dem Daten-Register Dn, zu einer Stelle in einem Speicher, spezifiziert durch eine Adresse „0043", übertragen, wie dies durch einen Pfeil in unterbrochener Linie angezeigt ist.
  • In den 15A und 15B wird ein PA-Adressier-Programm (15A) mit Programmen der herkömmlichen Techniken (15B) verglichen, die von den 2A und 2B herangezogen sind. Es ist anzumerken, dass diese Programme den Mikroprozessor instruieren, einen Wert, gespeichert in einem Speicher, zu lesen, mit diesem Wert zu berechnen und das Berechnungsergebnis in dem Speicher zu speichern.
  • 15A stellt ein Programm zum Lesen/Schreiben von Daten von/in einen Speicher mit der PA-Adressierung dar. 15B stellt ein Programm für dasselbe mit Spezifikation von zwei absoluten Adressen dar. 15C stellt ein Programm für dasselbe mit der Verwendung eines Adressen-Registers dar.
  • Das Programm der 15A überträgt Daten von einem Speicher zu einem Register durch Spezifizieren einer absoluten Adresse. Bis hier ist es dasselbe wie das Programm der 15B (Befehl a1 und a2). Allerdings spezifiziert, während das Programm der 15B eine absolute Adresse erneut spezifiziert, um Daten von dem Register zu dem Speicher zu übertragen (Befehl a3), das Programm der 15A die vorherige Adresse (PA) (Befehl a4). Dementsprechend ist ersichtlich, dass die Spezifikation der absoluten Adresse, eingekreist durch ein Rechteck a5 in unterbrochener Linie, nicht erforderlich ist, wenn das Programm durch das PA-Adressieren codiert ist.
  • Nun wird 15A mit 15C verglichen. Das Programm der 15C umfasst einen Befehl b1, der eine absolute Adresse zu einem Adressen-Register überträgt, einen Befehl b2, der ein LOAD Befehl ist, der das Adressen-Register verwendet, und einen Befehl b4, der ein STORE Befehl ist, der das Adressen-Register verwendet. Im Gegensatz dazu umfasst das Programm der 15A nicht irgendwelche Befehle, die ein Adressen-Register verwenden.
  • Nun werden diese Programme miteinander im Hinblick auf die Code-Größe verglichen. Das Programm der 15A ist kleiner als das Programm der 15B um zwei Bytes, und ist kleiner als das Programm der 15C um ein Byte. Deshalb ist ersichtlich, dass eine große Anzahl von Lese/Schreib-Vorgängen von Daten von und in Speicher, periphere Schaltungen, usw., durch die reduzierte Code-Größe geschrieben werden können.
  • (c) Operation
  • Nun wird die Operation bzw. Betriebsweise des Mikroprozessors dieses Beispiels beschrieben. Es wird angenommen, dass das laufende Programm die Befehle umfasst, die nachfolgend dargestellt sind, wobei Befehle (2) bis (4) dieselben wie drei Befehle des Programms der 15A sind.
    • (1) LD (d8,An), Dn
    • (2) LD (abs16), Dn
    • (3) ADD Dm, Dn
    • (4) ST Dn, (PA).
  • (c)-1
  • die 16 und 17 sind Zeitabstimmungsdiagramme, die die Betriebsweise der Komponenten, dargestellt in 12, darstellen. Es wird angenommen, dass der Befehl „LD (An),Dn" vor der Zeit t1 ausgeführt worden ist.
  • Zu der Zeit t1 hält OAB 5 einen Wert „An", gespeichert in dem Adressen-Register An, das ein Adressen-Wert ist, umfasst in dem Quellen-Operanden des Befehls „LD (An),Dn". Auch wird ein Operations-Code eines Befehls „LD (d8,An),Dn" von IB 1 zu IR 2 übertragen. Der Operations-Code wird durch einen Decodierer 12 decodiert.
  • Zu der Zeit t2 schickt, beim Empfang des decodierten Operations-Codes, MIR 13 ein Steuersignal so, dass eine Adressen-Berechnung „Adr.calc" durchgeführt wird. MIR 13 gibt einen Wert „An", gespeichert in einem Adressen-Register einer Adressen-Gruppe 19, zu ABUS30 (Pfeil y 1) aus. MIR 13 weist einen Treiber 3 an, einen Verschiebungs-Wert (disp 8), gespeichert in IB 1, zu B2BUS 32 (Pfeil y 2) auszugeben.
  • Zu der Zeit t3 erscheint ein Wert „An" in ABUS 30, und B2BUS 32 besitzt einen Verschiebungs-Wert von 8-Bit (disp 8). MIR 13 schickt ein Steuersignal so, dass eine Auswahleinrichtung (23 oder 24) zu der anderen umgeschaltet wird, und die ALU 4 führt eine add-Operation (Addier-Operation) unter Verwendung des Werts, gespeichert in dem Adressen-Register, und eines Verschiebungs-Werts mit 8-Bit (disp 8), durch.
  • Zu der Zeit t4 schickt MIR 13 ein Steuersignal so, dass „load" („laden") durchgeführt wird. Dann wird das Ergebnis der add-Operation „An+disp8" von ALU 4 zu OAB 5 übertragen (Pfeil y 3).
  • OAB 5 hält die vorherige Target-Speicher-Adresse, „An", während einer Zeit t1 bis t4, hält dann „An+disp8" zu der Zeit t5.
  • Zu der Zeit t6 schickt MIR 13 ein Steuersignal so, dass ein Treiber 9 einen Wert „An+disp8" von OAB 5 zu dem Adressen-Bus 33 überträgt. Auch schickt MIR 13 ein Steuersignal so, dass Daten von dem RAM 36 geladen werden (Pfeil y 6). Als Ergebnis werden Daten, gespeichert in einer Stelle in dem RAM 36, spezifiziert durch eine Adresse „An+disp8", zu LDB 6 über einen Daten-Bus 34 übertragen. Dann werden Daten von LDB 6 zu einem Daten-Register Dn der Register-Gruppe 19 über eine Auswahleinrichtung 25 übertragen (Pfeil y7).
  • (c)-2
  • Zu einer Zeit t5 wird ein Operations-Code eines Befehls „LD (abs16),Dn" von IB 1 zu IR 2 übertragen. Der Operations-Code wird durch einen Decodierer 12 decodiert.
  • Zu der Zeit t6 schickt, beim Empfang des decodierten Operations-Codes, MIR 13 ein Steuersignal so, dass eine Adressen-Berechnung „adr.calc" durchgeführt wird. MIR 13 schickt ein Steuersignal so, dass ein Treiber 3 eine absolute Adresse mit 16-Bit (abs16) von IB 1 zu B2BUS 32 überträgt (Pfeil y 4). Als eine Folge wird die absolute Adresse zu OAB 5 über B2BUS 32 über ALU 4 (Pfeil y 5) übertragen.
  • OAB 5 hält eine Target-Speicher-Adresse „An+disp8" eines Befehls „LD (d8,An),Dn" während einer Zeit t5 bis t8, und hält dann „abs16" zu der Zeit t9.
  • Zu der Zeit t9 schickt MIR 13 ein Steuersignal so, dass ein Treiber 3 einen Wert „abs16" von OAB 5 zu dem Adressen-Bus 33 überträgt. Auch schickt MIR 13 ein Steuersignal so, dass Daten von dem RAM 36 aus geladen werden (Pfeil y 8). Als Folge werden Daten, gespeichert in einer Stelle in dem RAM 36, spezifiziert durch eine Adresse „abs16" zu LDB 6 über einen Daten-Bus 34 übertragen. Dann werden die Daten von LDB 6 zu einem Daten-Register Dn einer Register-Gruppe 19 über eine Auswahleinrichtung 35 übertragen (Pfeil y 9).
  • (c)-3
  • Zu der Zeit t9 wird ein Operations-Code eines Befehls „ADD Dm,Dn" von IB 1 zu IR 2 übertragen. Der Operations-Code wird durch den Decodieren 12 decodiert. MIR 13 schickt ein Steuersignal so, dass die Daten von dem Daten-Register Dn zu ABUS 30 und B2BUS 32 übertragen werden. Dann führt die ALU 4 eine Operation unter Verwendung der Daten durch. Das Ergebnis wird zu einem Daten-Register Dn einer Register-Gruppe 19 über ABUS 30 übertragen (Pfeile y 10 und y 11).
  • Es ist anzumerken, dass OAB 5 noch „abs16" während einer Zeit t9 bis t11 hält, da auf den Speicher nicht während dieser Periode zugegriffen wird.
  • (c)-4
  • Zu der Zeit t11 wird ein Operations-Code eines Befehls „ST Dn,(PA)" von IB 1 zu IR 2 übertragen. Der Operations-Code wird durch einen Decodierer 12 decodiert. Zu diesem Zeitpunkt hat das PA-Adressierungs-Bit eines Befehls „ST Dn,(PA)" den Wert „1". Beim Erfassen des PA-Adressierungs-Bits von „1" weist der Decodierer 12 das MIR 13 an, ein Steuersignal so zu schicken, dass ein Wert von dem Register Dn zu einem Speicher mit der PA-Adressierung übertragen wird.
  • Zu der Zeit t13 schickt MIR 13 ein Steuersignal so, dass ein Wert von dem Register Dn einer Register-Gruppe 19 zu STB 7 über ABUS 30 übertragen wird. Dann schickt MIR 13 ein Steuersignal so, dass ein Treiber 9 einen Wert „abs16" von OAB 5 zu einem Adressen-Bus 33 überträgt (Pfeil y 12), dass allerdings eine Adressen-Berechnung nicht durchgeführt wird. MIR 13 schickt ein Steuersignal so, dass Daten in dem RAM 36 gespeichert werden. Als eine Folge wird ein Wert, gespeichert in STB 7, in einer Stelle in dem RAM 36, spezifiziert durch eine Adresse, gespeichert in OAB 5, nämlich „abs16", gespeichert.
  • Auf diese Art und Weise wird die vorherige Target-Speicher-Adresse in dem PA-Adressier-Verfahren verwendet.
  • (d) Unterbrechung
  • Die vorstehende Beschreibung in (c) ist auf der Annahme basierend, dass die Werte, gespeichert in OAB 5, nicht zerstört sind. In der Realität können allerdings die Werte durch Unterbrechungen zerstört sein. Das vorliegende Beispiel präpariert eine Gegenmaßnahme für einen solchen Fall, nämlich einen Sicherungspfad, wie dies in 18 dargestellt ist.
  • 18 zeigt einen vergrößerten Teil der 12, und zwar einen Bereich, umfassend OAB 5. Wie durch eine unterbrochene Linie in der Figur angezeigt ist, bilden Pfade 41, 42, 43 und 44 und ABUS 30 den Sicherungspfad, verwendet für ein Sichern eines Werts in OAB 5 in einen Speicher hinein. Wenn der Treiber 8 aktiviert wird, wird der Wert in einem Stack in einem Speicher durch den Sicherungspfad gesichert.
  • Nun wird beschrieben, wie ein Wert, gespeichert in OAB 5, durch einen Decodierer 12 und MIR 13 in den Stack hinein über den Sicherungspfad gesichert wird, und zwar unter Bezugnahme auf 19. 19A stellt den Stack dar, bevor eine Unterbrechung bearbeitet ist. 19B stellt den Stack während der Unterbrechungs-Verarbeitung dar.
  • (d)-1: NMI-Unterbrechung
  • Wenn eine Unterbrechungs-Empfangseinheit 21 ein NMI-Unterbrechung empfängt, weist der Decodierer 12 MIR 13 an, ein Steuersignal so zu schicken, dass ein Stack-Hinweiszeiger bzw. Stack-Pointer in der Register-Gruppe 19 aktualisiert wird (SP-6→SP). Nach der Aktualisierung weist der Decodierer 12 MIR 13 an, ein Steuersignal so zu schicken, dass der Treiber 8 den Sicherungspfad einstellt. Dann wird ein Wert, gespeichert in OAB 5, zu einer Stelle in dem Stack, spezifiziert durch den Stack-Hinweiszeiger, über den Sicherungspfad (OAB 5→(SP+4)) übertragen. Ein Wert, gespeichert in EXPC 18, wird zu dem Stack (EXPC→(SP+2)) übertragen, gefolgt durch einen Wert, gespeichert in PSW 20 (PSW→(SP)).
  • 19B stellt den Stack dar, nachdem Daten über die vorstehenden drei Stufen gesichert worden sind.
  • Wenn Daten gesichert worden sind, um die Unterbrechung zu verarbeiten, wird die Start-Adresse der NMI-Unterbrechung in IAB 10 und PFC 15 gespeichert.
  • Nun wird beschrieben, wie die gesicherten Daten wiederhergestellt werden.
  • Zuerst wird der Wert, gespeichert in der ersten Stelle des Stacks, zu PSW 20 ((SP)→PSW) übertragen. Dann wird der Wert, gespeichert in der zweiten Stelle, zu dem Programm-Zähler 18 übertragen ((SP+2)→EXPC). Schließlich wird der Wert, gespeichert in der dritten Stelle, zu OAB 5 über ABUS 30 und ALU 4 übertragen ((SP+4)→OAB 5).
  • (d)-2: IRQn Unterbrechung
  • Eine IRQn Unterbrechung wird nahezu in derselben Art und Weise wie eine NMI Unterbrechung verarbeitet mit der Ausnahme, dass (1) ein Unterbrechungs-Pegel in das IMSK Feld von PSW 20 geschrieben wird, und dass (2) eine Unterbrechungs-Target-Adresse basierend auf einem Level n von IRQn erhalten wird.
  • Wie anhand der vorstehenden Beschreibung ersichtlich wird, greift der Mikroprozessor dieses Beispiels mit einer PA-Adressierung auf einen Speicher ohne eine absolute Adressierung zu, kann Daten von einem Speicher lesen/in diesen hinein schreiben, ohne Verwendung von Adressen-Registern. Auch werden, gerade dann, wenn eine Menge von I/O-Zugriffen zu I/O-Ports in einer in dem Speicher aufgelisteten I/O vorhanden sind, die Adressen-Register nicht belegt. Als Folge verwendet der Mikroprozessor Adressen-Register effektiv.
  • <Weiteres Beispiel>
  • Ein weiteres Beispiel bezieht sich auf einen Mikroprozessor, der ein Mehrzahl von Operanden-Adressen-Puffer (OABs) aufweist. Ein Block, umfassend solche OABs, wird als ein OAB-Feld bezeichnet.
  • 20 stellt das OAB-Feld dieses weiteren Beispiels dar. Das OAB-Feld weist OABs 50 bis 54 und eine Eingangs-Auswahleinrichtung 60 auf. Der OAB 50 der 20 ist in derselben Art und Weise wie der OAB 5 aufgebaut, und ihm folgen vier Puffer (OAB 51 bis 54), auch aufgebaut in derselben Art und Weise wie OAB 5. Die fünf Puffer speichern jeweils die vorherige Target-Speicher-Adresse zu der Adresse fünf Mal vorher.
  • Die Eingangs-Auswahleinrichtung 60 gibt selektiv einen von Werten, gespeichert in OABs 50 bis 54, entsprechend einem empfangenen OABSEL Signal 63 aus.
  • Das OABSFT Signal 61 ist ein Steuersignal zum Verschieben von Daten, gespeichert in dem OAB-Feld. Wenn das Steuersignal ausgegeben wird, werden die Werte, ge speichert in OABs 50 bis 54, zu den nächsten OABs nach unten verschoben. Dann wird ein Wert, gespeichert in dem letzten OAB 54, ausgesondert. Das OABSFT Signal 61 wird durch MIR 13 ausgegeben, wenn der Decodierer 12 einen LOAD Befehl oder einen STORE Befehl decodiert. Dementsprechend werden Daten, gespeichert in dem OAB-Feld, zu jedem Zeitpunkt verschoben, zu dem der Decodierer 12 einen LOAD Befehl oder einen STORE Befehl decodiert.
  • Ein OABW Signal 62 ist ein Steuersignal zum Übertragen von Daten von der ALU 4 zu dem OAB 50. Der OAB 50 hält eine Target-Speicher-Adresse, ausgegeben von ALU 4, zu jedem Zeitpunkt, zu dem er ein OABW Signal 62 empfängt, nachdem die vorherigen Daten zu OAB 51 verschoben sind, und zwar durch die Ausgabe des OABSFT Signals 61.
  • Das OABSEL Signal 63 enthält Informationen zum Spezifizieren irgendwelcher OABs 50 bis 54. Die Auswahleinrichtung 60 gibt einen Wert von einem spezifiziert OAB aus.
  • In diesem Beispiel wird ein Operations-Code verwendet, um einen OAB in dem OAB-Feld zu spezifizieren. Nun wird ein PA-Adressieren dieses Beispiels unter Bezugnahme auf die 21A und 21B beschrieben. 21A stellt das Format des Befehls, verwendet in dem PA-Adressieren, dar. 21B stellt mnemonische Darstellungen von STORE Befehlen, verwendet in einem PA-Adressieren, dar.
  • Wie in 21A dargestellt ist, umfasst der Befehl für eine PA-Adressierung ein Feld d1 zum Anzeigen eines Befehls-Typs (LOAD Befehl, STORE Befehl, usw.), ein Feld d2 (1 Bit) zum Spezifizieren der PA-Adressierung für Maschinen-Sprach-Code, ein Feld d3 von zwei Bits zum Spezifizieren eines Daten-Registers unter D0 bis D3 in der Register-Gruppe 19, ein Feld d4 (1 Bit) zum Spezifizieren entweder von OAB 50 oder irgendeines der OABs 51 bis 54 mit „0" und „1 ", und ein Feld 5 (2 Bits) zum Spezifizieren irgendeines der OABs 51 bis 54.
  • Das Feld d4 spezifiziert OAB 50 mit „0" und irgendeinen der OABs 51 bis 54 mit „1". Das Feld d5 spezifiziert OAB 51 mit „00", OAB 52 mit „01", OAB 54 mit „10" und OAB 54 mit „11".
  • Wie in 21B dargestellt ist, spezifiziert, in einer mnemonischen Darstellung, „(PA)" eine PA-Adressierung, und „(PA1)" spezifiziert eine PA-Adressierung und zeigt auch an, dass ein Wert, gespeichert in dem OAB 51, als eine Target-Speicher-Adresse verwendet wird. Ähnlich bezieht sich „(PA2)" auf OAB 52, „(PA3)" bezieht sich auf OAB 54 und „(PA4)" bezieht sich auf OAB 54.
  • 22 stellt ein Programm dar, das eine PA-Adressierung verwendet, die einen OAB des OAB-Felds spezifiziert, und wie das OAB-Feld mit dem Programm arbeitet.
  • (1) Befehl „LD (adr1),D0"
  • IB 1 speichert „LD (adr1),D0". Ein Operations-Code von „LD (adr1),D0" wird von IB 1 zu IR 2, und weiter zu einem Decodierer 12, übertragen. Der Decodierer 12 decodiert den Operations-Code. Da der Operations-Code einen LOAD Befehl anzeigt, weist der Decodieren 12 MIR 13 an, das OABSFT Signal 61 auszugeben. Beim Empfang des OABSFT Signals 61 verschiebt das OAB-Feld die Daten, und MIR 13 gibt „adr1" zu OAB 50 aus. Die Adresse „adr1", ein Quellen-Operand eines Befehls „LD(adr1),D0", wird zu OAB 50 über ALU 4 übertragen. MIR 13 gibt ein OABSEL Signal 63 aus, und eine Adresse „adr1" wird zu einem Adressen-Bus 33 ausgegeben. Dann wird ein Laden von Daten von dem RAM 36 zugelassen. Ein Wert, gespeichert in einer Adresse „adr1", wird von dem RAM 36 in den LDB 6 über den Daten-Bus 34 geladen. Der Wert wird dann in dem Daten-Register Dn in der Register-Gruppe 19 gespeichert.
  • (2) Befehl „ST D0,(adr2)"
  • IB 1 speichert „ST D0,(adr2)". Ein Operations-Code von „ST D0,(adr2)" wird von IB 1 zu IR 2, und weiter zu dem Decodierer 12, übertragen. Der Decodierer 12 decodiert den Operations-Code. Da der Operations-Code einen STORE Befehl anzeigt, weist der Decodieren 12 MIR 13 an, ein OABSFT Signal 61 auszugeben. Beim Empfang des OABSFT Signals 61 verschiebt das OAB-Feld die Daten, und die Adresse „adr1" wird von OAB 50 zu OAB 51 verschoben. Die Adresse „adr2", ein Bestimmungs-Operand eines Befehls „ST D0,(adr2)", wird zu OAB 50 über ALU 4 übertragen. Da der Operations-Code des Befehls nicht ein PA-Adressieren spezifiziert, wird „adr2" von OAB 50 zu dem Adressen-Bus 33 durch das OABSEL Signal 63 ausgegeben. Da dies ein STORE Befehl ist, wird ein Wert, gespeichert in dem Daten-Register Dn in der Register-Gruppe 19, zu STB 7 über B2BUS 32 übertragen. Nachdem der Wert in STB 7 gespeichert ist, schickt das MIR 13 ein Steuersignal zu dem RAM 36, so dass ein Speichern von Daten in den RAM 36 hinein zugelassen wird. Dann wird der Wert von STB 7 zu einer Stelle in dem RAM 36, spezifiziert durch eine Adresse „adr2", übertragen.
  • (3) Befehl „LD (adr3),D0"
  • IB 1 speichert „LD (adr3),D0". Ein Operations-Code von „LD (adr3),D0" wird von IB 1 zu IR 2, und weiter zu einem Decodierer 12, übertragen. Der Decodierer 12 decodiert den Operations-Code. Da der Operations-Code einen LOAD Befehl anzeigt, weist der Decodieren 12 MIR 13 an, das OABSFT Signal 61 auszugeben.
  • Beim Empfangen des OABSFT Signals 61 verschiebt das OAB-Feld die Daten. Eine Adresse „adr1" wird von OAB 51 zu OAB 52 verschoben, und eine Adresse „adr2" wird von OAB 50 zu OAB 51 verschoben. Eine Adresse „adr3", ein Quellen-Operand eines Befehls „LD(adr3),D0", wird zu OAB 50 über ALU 4 übertragen. Da der Operations-Code des Befehls nicht ein PA-Adressieren spezifiziert, wird „adr3" von OAB 50 zu dem Adressen-Bus 33 durch das OABSEL Signal 63 ausgegeben. MIR 13 schickt ein Steuersignal so, dass ein Laden von Daten von dem RAM 23 zugelassen wird. Dann wird ein Wert, gespeichert in einer Stelle in dem RAM 36, spezifiziert durch die Adresse „adr3", zu dem LDB 6 über den Daten-Bus 34 geladen. Der Wert wird in dem Daten-Register Dn in der Register-Gruppe 19 gespeichert.
  • (4) Befehl „ADD D0,D1"
  • IB 1 speichert „ADD D0,D1". Ein Operations-Code von „ADD D0,D1" wird von IB 1 zu IR 2 übertragen, und wird weiter zu dem Decodierer 12 übertragen. Der Decodierer 12 decodiert den Operations-Code. Da der Operations-Code eine ADD-Operation anzeigt, weist der Decodierer 12 nicht das MIR 13 an, das OABSFT Signal 61 auszugeben.
  • Der Decodierer 12 weist die ALU 4 an, eine Operation unter Verwendung eines Werts, gespeichert in Registern D0 und D1, durchzuführen, das bedeutet „adr1" und „adr3". Da das Register D1 als eine Bestimmung in dem Befehl „ADD D0,D1" spezifiziert ist, speichert der Decodierer 12 das Operations-Ergebnis in dem Register D1.
  • (5) Befehl „ST D1,(PA2)"
  • Ein Operations-Code von „ST D1,(PA2)" ist in dem IR 2 gespeichert. Der Decodieren 12 decodiert den Operations-Code, da der Operations-Code ein PA-Adressieren, und OAB 52, spezifiziert. Der Decodierer 12 schickt ein OABSEL Signal 63 zu der Auswahleinrichtung 60, so dass eine Ausgabe-Bestimmung von OAB 50 zu OAB 52 geändert wird. Da dies ein STORE Befehl ist, wird ein Wert von dem Daten-Register D1 in der Register-D1-Gruppe 19 zu STB 7 über B2BUS 32 übertragen. Nachdem der Wert in STB 7 gespeichert ist, schickt MIR 13 ein Steuersignal zu dem RAM 36, so dass ein Speichern von Daten in den RAM 36 hinein zugelassen wird. Dann wird der Wert von STB7 zu einer Stelle in dem RAM 36, spezifiziert durch eine Adresse „adr2", übertragen, die in dem OAB 52 gespeichert wird (ein schraffierter Kasten in 22), wie durch einen Pfeil in unterbrochener Linie angezeigt ist.
  • (6) Unterbrechung
  • Entsprechend wie in dem vorherigen Beispiel sollten Daten, gespeichert in OABs 50 bis 54, gesichert werden, wenn eine Unterbrechung auftritt. Wie Daten gesichert werden, wird nachfolgend unter Bezugnahme auf 23 beschrieben. 23A stellt den Stack dar, bevor eine Unterbrechung in diesem Beispiel verarbeitet wird. 23B stellt den Stack dar, während die Unterbrechung in diesem Beispiel verarbeitet wird.
  • Wenn eine Unterbrechungs-Empfangseinheit 21 eine NMI Unterbrechung empfängt, aktualisiert der Decodierer 12 einen Stack-Hinweiszeiger (SP-14→SP).
  • Nach der Aktualisierung aktiviert der Decodierer 12 einen Treiber 8, um den Sicherungspfad für OAB 50 einzustellen. Der Decodierer 12 schickt ein OABSEL Signal 63, das OAB 50 spezifiziert, und zwar zu der Eingangs-Auswahleinrichtung 60, so dass ein Wert, gespeichert in OAB 50, ausgegeben wird. Der Wert wird zu STB 7 über ABUS 30 übertragen, und dann zu dem Stack.
  • Nachdem Daten von OAB 50 ausgegeben sind, schickt der Decodierer 12 ein OABSFT Signal 61, das OAB 51 spezifiziert, zu der Eingangs-Auswahleinrichtung 60, so dass ein Wert, gespeichert in OAB 51, ausgegeben wird. Der Wert wird ähnlich zu dem Stack über den Sicherungspfad des Treibers 9 ABUS 30 – STB 7 übertragen. Dann schickt der Decodierer 12 Steuersignale, die OABs 52, 53 und 54 spezifizieren, zu einer Eingangs-Auswahleinrichtung 60 in Folge, so dass Werte, gespeichert in OABs, zu dem Stack übertragen werden.
  • Nachdem Daten, gespeichert in dem OAB-Feld, gesichert sind, werden Daten, gespeichert in EXPC 18, gesichert (EXPC→(SP+2)), Daten, gespeichert in PSW 20, werden gesichert (PSW→(SP)), und die Steuerung geht weiter zu einer Unterbrechungs-Target-Adresse. Der Inhalt des Stacks, wie dies in 23A dargestellt ist, ändert sich zu demjenigen, wie dies in 23B dargestellt ist, nachdem die vorstehenden Prozesse abgeschlossen sind. Eine IRQn Unterbrechung wird nahezu in derselben Art und Weise wie eine NMI Unterbrechung verarbeitet, mit der Ausnahme, dass (1) ein Unterbrechungs-Pegel in das IMSK Feld von PSW 20 hinein geschrieben wird, und dass (2) eine Unterbrechungs-Target-Adresse basierend auf einem Level n von IRQn erhalten wird.
  • Die gesicherten Daten werden durch Verarbeiten der vorstehenden Schritte rückwärts wieder erhalten.
  • Wie aus der vorstehenden Beschreibung ersichtlich ist, verwendet der Mikroprozessor dieses Beispiels vorherige Speicher-Zugriffe selektiv und verringert das Verhältnis einer Adressen-Register-Belegung und der Code-Größe.
  • (7) Anwendung
  • In diesem Beispiel werden Daten, gespeichert in dem OAB-Feld, zu jedem Zeitpunkt verschoben, zu dem ein LOAD Befehl oder ein STORE Befehl ausgeführt wird. Allerdings muss diese Anordnung nicht für die Ausführung des STORE Befehls notwendig sein, da es selten ist, Daten in dieselbe Stelle wiederholt zu speichern. Nachfolgend wird eine Anwendung dieses Beispiels für einen solchen Fall unter Bezugnahme auf 24 beschrieben.
  • In dem vorstehenden Beispiel wird die Adresse „adr1" von OAB 50 zu OAB 51 verschoben, wenn ein Befehl „ST DC,(adr2)" ausgeführt wird. Allerdings wird das OABSEL Signal 63 nicht ausgegeben, wenn ein Befehl „ST DC(adr2)" decodiert wird. Deshalb fährt OAB 50 fort, eine Adresse „adr1" zu halten, nachdem ein Befehl „ST D0,(adr2)" ausgeführt ist. Die Adresse „adr1" wird von OAB 50 zu OAB 51 verschoben, wenn ein Befehl „LD (adr3),D1" ausgeführt wird. Dann hält OAB 50 die Adresse „adr3".
  • Ein Operations-Code eines Befehls „ST D1, (PA1)" wird gespeichert, nachdem der Befehl „ADD D0,D1" ausgeführt ist. Da der Operations-Code ein PA-Adressieren spezifiziert, schickt der Decodierer 12 ein OABSEL Signal 63 zu der Eingangs-Auswahleinrichtung 60, so dass ein Daten-Ausgabe-Target von OAB 50 zu OAB 51 umgeschaltet wird. Da OAB 51 eine Adresse „adr1" speichert, wird eine Adresse „adr1" zu einem Adressen-Bus 33 ausgegeben. MIR 13 schickt ein Steuersignal so, dass ein Laden von Daten von dem RAM 36 zugelassen wird. Als Folge wird ein Wert, gespeichert in einer Stelle in dem RAM 36, spezifiziert durch die Adresse, gespeichert in OAB 51, in LDB 6 über den Daten-Bus 34 geladen. Dann werden die Daten zu dem Daten-Register Dn in der Register-Gruppe 19 übertragen.
  • Anwendungen dieser Erfindungen sind in verschiedenen Formen möglich, soweit die dafür notwendigen Merkmale beibehalten werden. Zum Beispiel kann ein Befehl eine relative Adresse zu einem Wert, gespeichert in OAB, spezifizieren.
  • Auch kann ein Operand eines Befehls einer Addition, einer Subtraktion oder einer Verschiebe-Operation einen Wert, gespeichert in OAB, spezifizieren.
  • OABs 50 bis 54, verbunden in Reihe in diesem Beispiel, können parallel miteinander verbunden sein. Auch kann die Anzahl von OABs in dem OAB-Feld auf 9, 10, ... usw., erhöht werden oder auf 2, 3 oder 4 zum Beispiel verringert werden.
  • Obwohl die vorliegende Erfindung vollständig anhand von Beispielen unter Bezugnahme auf die beigefügten Zeichnungen beschrieben worden ist, sollte angemerkt werden, dass verschiedene Änderungen und Modifikationen für Fachleute auf dem betreffenden Fachgebiet ersichtlich werden. Deshalb sollten, ohne dass solche Änderungen und Modifikationen außerhalb des Schutzumfangs der vorliegenden Erfindung liegen, sie dahingehend ausgelegt werden, dass sie darin umfasst sind.

Claims (8)

  1. Mikroprozessor, der die Verringerung der Größe von Programmcodes unterstützt und umfasst: eine Decodiereinrichtung, die Befehle decodiert, die eine Länge "w" haben, die durch den Ausdruck w = a + nbdargestellt wird, und einen Decodierer (105) sowie eine Steuereinrichtung enthält, wobei "a" eine Länge von Code, die die Decodiereinrichtung bei jedem Decodieren decodieren kann, "n" eine ganze Zahl größer oder gleich 0 und "b" eine positive ganze Zahl kleiner als "a" darstellt, wobei die Befehle wenigstens einen Befehl, dessen Länge "a" beträgt, sowie einen Befehl enthalten, dessen Länge "(a + b)" beträgt, und die Steuereinrichtung das Teilen eines zu decodierenden Befehls in einen oder mehrere Codes der Länge "a" steuert, die durch den Decodierer zu decodieren ist, und, wenn die Länge des zu decodierenden Befehls nicht ein ganzzahliges Vielfaches von "a" ist, wenigstens ein Teil des Befehls in mehr als einen Code der Länge "a", die von der Decodiereinrichtung zu decodieren ist, integriert wird, damit der Befehl durch die Decodiereinrichtung in Codes der Länge "a" decodiert wird, und wobei der Mikroprozessor des Weiteren umfasst: eine Ausführeinrichtung (108), die Daten auf Basis von Informationen verarbeitet, die aus den durch die Decodiereinrichtung decodierten Befehlen gewonnen werden.
  2. Mikroprozessor nach Anspruch 1, wobei "b" eine Bitlänge darstellt, die als Halbwort bezeichnet wird, wenn "a" eine Bitlänge darstellt, die als Wort bezeichnet wird, wobei ein Halbwort ein halbes Wort lang ist.
  3. Mikroprozessor nach Anspruch 2, der des Weiteren umfasst: einen Befehls-Puffer (102), der einen vorausgelesenen Befehl hält; ein Befehls-Register (104), das einen Code hält, der ein Wort lang ist und durch den Decodierer zu decodieren ist, und einen Code empfängt, der von dem Befehls-Puffer übertragen wird und entweder ein Halbwort oder ein Wort ist; eine Speichereinrichtung (110), die einen Zustand des in dem Befehls-Puffer gehaltenen Befehls für jedes Halbwort speichert; und eine erste Feststelleinrichtung (107), die auf Basis von Informationen, die aus einem durch den Decodierer decodierten Befehl gewonnen werden, feststellt, ob ein als nächstes von dem Befehls-Puffer zu dem Befehls-Register zu übertragender Code ein Halbwort oder ein Wort lang ist; wobei die Steuereinrichtung (109) so betrieben werden kann, dass sie den Befehls-Puffer auf Basis der von der ersten Feststelleinrichtung festgestellten Länge und dem in der Speichereinrichtung gespeicherten Zustand so steuert, dass ein Code des in dem Befehls-Puffer gespeicherten Befehls, der entweder ein Halbwort oder ein Wort lang ist, zu dem Befehls-Register übertragen wird, und den in der Speichereinrichtung gespeicherten Zustand aktualisiert und den Decodierer so steuert, dass er den in dem Befehls-Register gespeicherten Code decodiert.
  4. Mikroprozessor nach Anspruch 3, wobei: das Befehls-Register (104) umfasst: ein Befehls-Register (104) höherer Ordnung, das ein Halbwort eines Codes höherer Ordnung speichert; und ein Befehls-Register (104b) niederer Ordnung, das ein Halbwort des Codes niederer Ordnung speichert; wobei: der Befehls-Puffer (102) umfasst: ein erstes Register (101), das einen zuletzt ausgelesenen Wortcode speichert; ein zweites Register (102), das einen Wortcode speichert, der dem in dem ersten Register gespeicherten Code vorangeht; und eine Auswähleinrichtung (103), die auf Basis einer Anweisung von der Steuereinrichtung selektiv einen Code zu dem Befehls-Register (104) überträgt; wobei: das erste Register (101) umfasst: ein erstes Register (101a) höherer Ordnung, das ein Halbwort eines Codes höherer Ordnung speichert; und ein erstes Register (101b) niederer Ordnung, das ein Halbwort des Codes niederer Ordnung speichert; wobei: das zweite Register (102) umfassst: ein zweites Register (102a) höherer Ordnung, das ein Halbwort eines Codes höherer Ordnung speichert; und ein zweites Register (102b) niederer Ordnung, das ein Halbwort des Codes niederer Ordnung speichert; wobei: die Auswähleinrichtung (103) umfasst: eine Auswähleinrichtung (103a) höherer Ordnung, die einen Code von dem zweiten Register (102a) höherer Ordnung, dem zweiten Register (102b) niederer Ordnung oder dem Befehls-Register (104b) niederer Ordnung selektiv zu dem Befehls-Register (104a) höherer Ordnung überträgt; und eine Auswähleinrichtung (103b) niederer Ordnung, die einen Code von dem zweiten Register (102a) höherer Ordnung, dem zweiten Register (102b) niederer Ordnung oder dem ersten Register (101b) niederer Ordnung selektiv zu dem Befehls-Register (104b) niederer Ordnung überträgt; und wobei: die Speichereinrichtung (110) einen ersten Zustand, der anzeigt, dass das zweite Register (102a) höherer Ordnung oder das zweite Register (102b) niederer Ordnung keinen Code speichert, einen zweiten Zustand, der anzeigt, dass das zweite Register (102a) höherer Ordnung einen Code speichert und das zweite Register (102b) niederer Ordnung keinen Code speichert, oder einen dritten Zustand speichert, der anzeigt, dass das zweite Register (102a) höherer Ordnung und das zweite Register (102b) niederer Ordnung einen Code speichern.
  5. Mikroprozessor nach Anspruch 4, wobei: die Steuereinrichtung (109) die Auswähleinrichtung (103) so steuert, dass die Auswähleinrichtung (103a) höherer Ordnung einen Code von dem zweiten Register (102a) höherer Ordnung zu dem Befehls-Register (104a) höherer Ordnung überträgt, und die Auswähleinrichtung (103b) niederer Ordnung einen Code von dem ersten Register (101b) niederer Ordnung zu dem Befehls-Register (104b) niederer Ordnung überträgt, wenn die Speichereinrichtung (110) den zweiten Zustand speichert und die erste Feststelleinrichtung (107) feststellt, dass ein nächster zu übertragender Code ein Wort lang ist.
  6. Mikroprozessor nach Anspruch 4, wobei: die Steuereinrichtung (109) die Auswähleinrichtung (103) so steuert, dass die Auswähleinrichtung (103a) höherer Ordnung einen Code von dem Befehls-Register (104b) niederer Ordnung zu dem Befehls-Register (104a) höherer Ordnung überträgt, und die Auswähleinrichtung (103b) niederer Ordnung einen Code von dem zweiten Register (102b) niederer Ordnung zu dem Befehls-Register (104b) niederer Ordnung überträgt, wenn die Speichereinrichtung (110) den dritten Zustand speichert und die erste Feststelleinrichtung (107) feststellt, dass ein nächster zu übertragender Code ein Halbwort lang ist, und den in der Speichereinrichtung gespeicherten Zustand von dem dritten Zustand auf den zweiten Zustand aktualisiert.
  7. Mikroprozessor nach Anspruch 4, wobei: die Steuereinrichtung (109) die Auswähleinrichtung (103) so steuert, dass die Auswähleinrichtung (103a) höherer Ordnung einen Code von dem Befehls-Register (104b) niederer Ordnung zu dem Befehls-Register (104a) höherer Ordnung überträgt, und die Auswähleinrichtung (103b) niederer Ordnung einen Code von dem zweiten Register (102a) höherer Ordnung zu dem Befehls-Register (104b) niederer Ordnung überträgt, wenn die Speichereinrichtung (110) den zweiten Zustand speichert und die erste Feststelleinrichtung (107) feststellt, dass ein nächster zu übertragender Code ein Halbwort lang ist, und den in der Speichereinrichtung (110) gespeicherten Zustand von dem zweiten Zustand auf den dritten Zustand aktualisiert.
  8. Mikroprozessor nach Anspruch 3, der des Weiteren umfasst: eine zweite Feststelleinrichtung (106), die auf Basis des in der Speichereinrichtung (110) gespeicherten Zustandes und von aus dem decodierten Befehl gewonnenen Informationen feststellt, ob ein durch den Decodierer (105) decodierter Befehl ein Sprung-Unterprogramm-Befehl ist, der an einer Stelle in einem externen Speicher gespeichert ist, die an einer Halbwort-Position endet, wobei: wenn die zweite Feststelleinrichtung feststellt, dass ein durch den Decodierer decodierter Befehl ein Sprung-Unterprogramm-Befehl ist, der an einer Stelle in einem externen Speicher gespeichert ist, die an einer Halbwort-Position endet, die Ausführeinrichtung (108) ein Unterprogramm ausführt, nachdem eine Rücksprungadresse des Unterprogramms angegeben wurde, die bestimmt wird, indem ein Halbwort zu der Halbwortposition addiert wird.
DE69630416T 1995-05-31 1996-05-30 Mikroprozessor zur Ausführung von Befehlen mit variablen Längen Expired - Lifetime DE69630416T2 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
JP13328195A JP3199603B2 (ja) 1995-05-31 1995-05-31 コードサイズ縮小化マイクロプロセッサ
JP13407895 1995-05-31
JP13407895A JP3199604B2 (ja) 1995-05-31 1995-05-31 プロセッサ
JP13328195 1995-05-31

Publications (2)

Publication Number Publication Date
DE69630416D1 DE69630416D1 (de) 2003-11-27
DE69630416T2 true DE69630416T2 (de) 2004-07-29

Family

ID=26467675

Family Applications (2)

Application Number Title Priority Date Filing Date
DE69632970T Expired - Lifetime DE69632970T2 (de) 1995-05-31 1996-05-30 Mikroprozessor mit reduzierten Programmcodes
DE69630416T Expired - Lifetime DE69630416T2 (de) 1995-05-31 1996-05-30 Mikroprozessor zur Ausführung von Befehlen mit variablen Längen

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE69632970T Expired - Lifetime DE69632970T2 (de) 1995-05-31 1996-05-30 Mikroprozessor mit reduzierten Programmcodes

Country Status (5)

Country Link
US (2) US5966514A (de)
EP (2) EP0745932B1 (de)
KR (1) KR100436015B1 (de)
CN (2) CN1114153C (de)
DE (2) DE69632970T2 (de)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6219779B1 (en) * 1997-06-16 2001-04-17 Matsushita Electric Industrial Co., Ltd. Constant reconstructing processor which supports reductions in code size
DE69823642T2 (de) * 1998-03-27 2005-04-21 Motorola Inc System und Verfahren zur Umwandlung von Befehlen
FR2777370B1 (fr) * 1998-04-09 2000-06-23 Sgs Thomson Microelectronics Architecture de dsp optimisee pour les acces memoire
US6178496B1 (en) 1999-02-17 2001-01-23 Motorola, Inc. System for converting instructions, and method therefore
KR100308211B1 (ko) 1999-03-27 2001-10-29 윤종용 압축 명령을 갖는 마이크로 컴퓨터 시스템
KR100619682B1 (ko) * 1999-12-22 2006-09-08 엘지전자 주식회사 이아이에스씨 프로세서
US6721875B1 (en) * 2000-02-22 2004-04-13 Hewlett-Packard Development Company, L.P. Method and apparatus for implementing a single-syllable IP-relative branch instruction and a long IP-relative branch instruction in a processor which fetches instructions in bundle form
KR100353814B1 (ko) * 2000-08-18 2002-09-27 주식회사 하이닉스반도체 확장된 램 억세스 명령어를 억세스하는 시간을 향상시킨램 억세스 장치
US6934936B2 (en) * 2001-02-01 2005-08-23 International Business Machines Corporation Apparatus and method for adaptive address-based historical utilization recording
JP2005050208A (ja) * 2003-07-30 2005-02-24 Matsushita Electric Ind Co Ltd マルチタスクシステムにおけるメモリ管理方式およびタスク制御装置
WO2010084379A1 (en) * 2009-01-21 2010-07-29 Freescale Semiconductor, Inc. Microprocessor architecture and method of instruction decoding
CN113138800B (zh) * 2021-03-25 2023-05-09 沐曦集成电路(上海)有限公司 定长指令集的编解码方法及计算***
CN115878187B (zh) * 2023-01-16 2023-05-02 北京微核芯科技有限公司 支持压缩指令的处理器指令处理装置和方法

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS54122043A (en) * 1978-03-15 1979-09-21 Toshiba Corp Electronic computer
US4245304A (en) * 1978-12-11 1981-01-13 Honeywell Information Systems Inc. Cache arrangement utilizing a split cycle mode of operation
US4336602A (en) * 1979-09-24 1982-06-22 Control Data Corporation Network for generating modified microcode addresses
AU553416B2 (en) * 1984-02-24 1986-07-17 Fujitsu Limited Pipeline processing
JPS61138333A (ja) * 1984-12-10 1986-06-25 Nec Corp 演算モジユ−ル
JPS61282932A (ja) * 1985-06-07 1986-12-13 Fujitsu Ltd アドレスカウンタ制御方式
JPS63245522A (ja) * 1987-03-31 1988-10-12 Toshiba Corp マイクロプロセツサ
US5101483A (en) * 1988-01-27 1992-03-31 Oki Electric Industry Co., Ltd. Instruction decoder simplification by reuse of bits to produce the same control states for different instructions
US5249273A (en) * 1989-01-17 1993-09-28 Fujitsu Limited Microprocessor having a variable length instruction format
KR0163179B1 (ko) * 1989-03-31 1999-01-15 미다 가쓰시게 데이타 프로세서
JPH03201133A (ja) * 1989-12-28 1991-09-03 Sanyo Electric Co Ltd 情報処理装置
JPH03233630A (ja) * 1990-02-08 1991-10-17 Nec Corp 情報処理装置
JPH04104350A (ja) * 1990-08-23 1992-04-06 Hitachi Ltd マイクロプロセッサ
US5367648A (en) * 1991-02-20 1994-11-22 International Business Machines Corporation General purpose memory access scheme using register-indirect mode
US5428786A (en) * 1991-03-07 1995-06-27 Digital Equipment Corporation Branch resolution via backward symbolic execution
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
US5452423A (en) * 1991-06-13 1995-09-19 Chips And Technologies, Inc. Two-ROM multibyte microcode address selection method and apparatus
JPH0527970A (ja) * 1991-07-18 1993-02-05 Seikosha Co Ltd 演算装置
JP2970821B2 (ja) * 1991-08-21 1999-11-02 松下電器産業株式会社 データ処理装置
DE69325826T2 (de) * 1992-01-06 2000-02-24 Hitachi, Ltd. Rechner mit einer Parallelverarbeitungsfähigkeit
US5542058A (en) * 1992-07-06 1996-07-30 Digital Equipment Corporation Pipelined computer with operand context queue to simplify context-dependent execution flow
US5590358A (en) * 1994-09-16 1996-12-31 Philips Electronics North America Corporation Processor with word-aligned branch target in a byte-oriented instruction set

Also Published As

Publication number Publication date
KR100436015B1 (ko) 2004-09-16
DE69632970D1 (de) 2004-08-26
CN1492318A (zh) 2004-04-28
EP1143333A3 (de) 2001-10-31
DE69630416D1 (de) 2003-11-27
CN1144359A (zh) 1997-03-05
KR960042329A (ko) 1996-12-21
EP1143333A2 (de) 2001-10-10
DE69632970T2 (de) 2004-12-16
EP0745932A3 (de) 1998-09-09
CN1114153C (zh) 2003-07-09
CN1286004C (zh) 2006-11-22
US5966514A (en) 1999-10-12
US6253305B1 (en) 2001-06-26
EP0745932B1 (de) 2003-10-22
EP0745932A2 (de) 1996-12-04
EP1143333B1 (de) 2004-07-21

Similar Documents

Publication Publication Date Title
DE69723286T2 (de) Echtzeitprogramm-sprachbeschleuniger
DE3685913T2 (de) Vektorenverarbeitung.
DE69630416T2 (de) Mikroprozessor zur Ausführung von Befehlen mit variablen Längen
DE68928340T2 (de) Fliessband-Datenprozessor
DE19735348B4 (de) Vektorprozessor zur Einzelbefehl-Mehrdaten-Verarbeitung unter Verwendung von mehreren Bänken von Vektorregistern und zugehöriges Verfahren zum Betreiben desselben
DE69619885T2 (de) Datenverarbeitungsanordnung mit Koprozessor
DE69126166T2 (de) Programmierbare Steuerungsvorrichtung
DE69625256T2 (de) Mikrorechner
DE69233361T2 (de) Ein-Chip-Mikrocomputer
DE19735350B4 (de) Vektorprozessor zum Ausführen paralleler Operationen und Verfahren hierfür
DE69515339T2 (de) Rechnersystem
DE69729974T2 (de) Datenverarbeitungsschaltung, Mikrocomputer und elektronische Einrichtung
DE69033131T2 (de) Logikvorrichtung und Verfahren zur Verwaltung einer Befehlseinheit in einer Pipeline-Verarbeitungseinheit
DE3650602T2 (de) Datenverarbeitungssystem
DE3851746T2 (de) Sprungvorhersage.
DE19735871A1 (de) Verfahren zum effizienten Sicherstellen und Wiederherstellen von Kontext in einer Multitasking-Rechensystemumgebung
DE2846495A1 (de) Digitales datenverarbeitungssystem
DE69616718T4 (de) Vorrichtung und verfahren zur bestimmung von adressen fehlausgerichteter daten
DE69616867T2 (de) Prozessor, der schnell von Unterprogrammen zurückkehrt, und Programmübersetzungsgerät, das Maschinenprogramme erzeugt, die schnell von Unterprogrammen zurückkehren
DE60009496T2 (de) Mikroprozessor mit reduziertem kontextumschaltungsaufwand und verfahren
DE69231237T2 (de) Datenverarbeitungsvorrichtung
DE69524379T2 (de) Verarbeitungssystem mit ausgerichtetem wortverzweigungsziel
DE69718485T2 (de) Registeraddressierung in einer datenverarbeitungsvorrichtung
DE3854853T2 (de) Datenprozessor mit erweiterten Operationsfunktionen
EP0825540A1 (de) Prozessor mit Pipelining-Aufbau

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8327 Change in the person/name/address of the patent owner

Owner name: PANASONIC CORP., KADOMA, OSAKA, JP