Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

Register (Prozessor)

Register in Prozessoren sind Speicherbereiche für Daten, auf die Prozessoren besonders schnell zugreifen können. Sie befinden sich direkt in der Nähe der …

Inhalt5 Abschnitte
  1. 1. Grundprinzip und Aufbau
  2. 2. Daten-, Vektor- und Adressregister
  3. 3. Spezial- und Stapelregister
  4. 4. Eingabe und Ausgabe
  5. 5. Entwicklung und Verwendung in Programmiersprachen

Grundprinzip und Aufbau

Register sind besonders schnelle Speicherbereiche innerhalb oder unmittelbar nahe bei den Rechenwerken eines Prozessors. Sie stehen an der Spitze der Speicherhierarchie und ermöglichen die schnellste Datenverarbeitung, weil ihr Zugriff unabhängig vom Daten- oder Adressbus erfolgt.

Viele Prozessorarchitekturen, besonders Reduced Instruction Set Computer (RISC), erlauben den Rechenwerken nur die Verarbeitung von Daten aus Registern. Andere Architekturen können teilweise auch Inhalte aus dem Arbeitsspeicher oder aus Hardware-Registern direkt verwenden.

Registersätze unterscheiden sich je nach Architektur in Größe, Anzahl und Funktion. Einzelne Register haben heute meist eine Wortbreite von 8, 16, 32, 64, 128, 256 oder 512 bit. Pro Prozessorkern können zwischen fünf und mehreren hundert Registern vorhanden sein.

Hardware-Register sind physisch vorhandene, für die Software namenlose Speicherplätze. Architektur-Register sind dagegen für die Software sichtbar. Bei älteren Prozessoren wie dem Zilog Z80 und dem Intel i486 waren beide Gruppen identisch. Bei moderneren Prozessoren wie dem System/360 Model 91, dem Intel Pentium Pro, dem AMD K5 und dem Intel Core unterscheiden sie sich.

Daten-, Vektor- und Adressregister

Skalare Register enthalten einen einzelnen Datenwert, meistens eine Ganzzahl (Integer), die auch als Speicheradresse verwendet werden kann. Vektor-Register enthalten mehrere Datenwerte, üblicherweise zwei bis 64. Die einzelnen Werte können jeweils 8 bis 64 bit groß sein und als Ganz- oder Gleitkommazahlen vorliegen.

Datenregister speichern Operanden für die Arithmetisch-logische Einheit (ALU) sowie deren Ergebnisse. Ältere Prozessoren besaßen teilweise nur ein Datenregister, den Akkumulator. Moderne Prozessorkerne haben häufig mehrere Datenregister mit Akkumulatorfunktion.

Die Größe der Datenregister und des Datenbusses beeinflusst die Bezeichnung einer Prozessorarchitektur. Ein Prozessor mit 8-bit-Datenbus und 8-bit-Datenregistern gilt als 8-bit-Architektur, beispielsweise der MOS Technology 6502 oder der Zilog Z80. Der Motorola 68000 besitzt einen 16-bit-Datenbus und 32-bit-Datenregister und wird deshalb als 16-/32-bit-Prozessor bezeichnet. Zu den derzeit neuesten Prozessoren zählen meist 64-bit-Prozessoren, etwa AMD Ryzen und Intel Core i.

Bei 8-bit-Prozessoren waren Adressbus und Adressregister meistens 16 bit breit. Bei den meisten heutigen Prozessoren sind Adressregister so groß wie Datenregister; der Adressbus ist meist gleich groß oder kleiner. Datenregister sind gewöhnlich nur mit der ALU und nicht mit der Gleitkommaeinheit (FPU) verbunden. FPU-Operanden müssen dann in speziellen Gleitkommeregistern liegen.

In modernen RISC-Prozessoren wie PowerPC und SPARC heißen frei einsetzbare Datenregister allgemeine Register (General Purpose Register, GPR). Sie können als Daten- oder Adressregister dienen. Der Motorola 68000 besitzt ebenfalls acht gleichwertige Datenregister. Die 32-bit-Prozessoren der Intel-x86-Familie sind dagegen aus der CISC-Architektur hervorgegangen. Sie besitzen nur vier allgemeine Register, die traditionell als Akkumulator-, Basis-, Zähl- und Datenregister bezeichnet werden. Bestimmte Operationen, zum Beispiel Divisionen, sind dort nicht auf allen Registern möglich.

Adressregister berechnen Speicheradressen von Operanden oder Befehlen und sind mit internem Datenbus und Adressbus verbunden. Bei indizierter Adressierung, etwa beim Intel 8086, gibt es Basisadress- beziehungsweise Segmentregister und Indexregister, die den Offset zu einer Basisadresse speichern. Bei linearer Adressierung, etwa beim Motorola 68000, wird diese Unterscheidung nicht verwendet. Beim Motorola 68020 kann ein Datenregister zusätzlich mit einer festen Wortbreite multipliziert werden. Beim Motorola 6800 und Zilog Z80 wird eine Konstante addiert; beim MOS Technology 6502 werden ein 16-bit-Wert und ein 8-bit-Indexregister addiert. Die Bezeichnungen der Adressierungsarten sind prozessorspezifisch.

Spezial- und Stapelregister

Spezialregister speichern den Betriebszustand des Prozessorkerns oder übernehmen besondere Hilfsfunktionen. Sie sind nur teilweise durch Anwenderprogramme programmierbar. Zu den verbreiteten Spezialregistern gehören:

  • Der Befehlszähler beziehungsweise Programmzähler (Program Counter, PC) oder Befehlszeiger (Instruction Pointer, IP; bei 32 bit Extended Instruction Pointer, EIP) enthält die Adresse des aktuellen oder nächsten Befehls. Sprunganweisungen setzen ihn auf einen neuen Wert.
  • Das Befehlsregister speichert den aktuellen Befehl und ist für Programmierer nicht zugänglich.
  • Ein Basisregister kann beispielsweise die Basisvektortabelle bestimmen und von einem Benutzerprogramm neu gesetzt werden.
  • Segmentregister der x86-Plattform enthalten die oberen 16 bit einer 20-bit-Adresse. Ihr Inhalt wird mit 16 multipliziert und zu einem segmentinternen Offset addiert. Dadurch konnten mit 16-bit-Registerladebefehlen 20 bit beziehungsweise 1 MiB Adressraum angesprochen werden.
  • Das Statusregister, auch Zustandsregister, Condition Code Register (CCR) oder Programmstatuswort (PSW), enthält Zustände nach Befehlsausführung, etwa Zero-Flag und Vorzeichen-Flag.
  • Ein Interrupt-Steuerregister legt bei komplexeren Prozessoren fest, auf welche Interrupts und mit welcher Priorität reagiert wird. Software kann Interrupts auslesen oder vorübergehend sperren.

Der Refreshzähler des Zilog Z80 erzeugt automatisch Refresh-Adressen für den Speicher und wurde von einigen Programmen als Pseudo-Zufallszahlengenerator verwendet. Bei Mikrocontrollern der Intel-MCS-51- und Infineon-C167-Familie werden Spezialregister und Register zur Steuerung interner E/A-Ports als Registerspeicher organisiert. Sie sind über Memory Mapped I/O mit gewöhnlichen Speicherbefehlen erreichbar; der dadurch verdeckte Arbeitsspeicher ist gar nicht oder nur indirekt zugänglich.

Stapelregister, auch Stapelzeiger oder Stackpointer (SP), verwalten einen Stapelspeicher. Dieser arbeitet nach dem Last-In-First-Out-Prinzip und wird mit Push- und Pop-Operationen gefüllt oder geleert. Der Stapelzeiger zeigt auf die Speicheradresse am Ende des Stapels, je nach Architektur auf oder meist hinter das letzte Element. Üblich sind ein System-Stack für die Sicherung und Wiederherstellung des Prozessorstatus bei Prozessumschaltungen und ein Anwender- beziehungsweise Aufrufstapel. Beim Aufruf eines Unterprogramms wird dort die Rücksprungadresse gespeichert; zusätzlich können Bereiche für Aufrufdaten, Rückgabedaten und lokale Variablen angelegt und nach Ende des Unterprogramms freigegeben werden.

Elektrisch bestehen die meisten Register aus einfachen Latches, die einzelne Bits speichern. Mehrbit-Zählerregister können ihren Inhalt auf einen Impuls hin um 1 erhöhen oder verringern; Beispiele sind Programmzähler, Stapelregister und Timer-Register. Schieberegister kommen vor allem in der ALU oder einem numerischen Koprozessor vor und unterstützen unter anderem Multiplikationen und Divisionen.

Eingabe und Ausgabe

Register gibt es nicht nur als Puffer in der Zentraleinheit, sondern auch in Peripheriegeräten, angeschlossenen Chips und im Hauptprozessor selbst. E/A-Register lassen sich meist in Daten-, Status-, Adress- und ähnliche Unterkategorien einteilen.

Bei Steuerwerken externer Massenspeicher enthalten Status- und Datenregister Informationen zum Gerät; Adressregister beziehen sich heute meist auf Sektornummern. Video-Chips verwenden Statusregister beispielsweise zur Auswahl von Video-Modi und Datenregister zur Speicherung von Sprite-Daten. Bei parallelen Schnittstellen enthalten Datenregister die Druckdaten und Statusregister Bits zur Datenflusssteuerung. Ein zusätzliches Data Direction Register (DDR) kann die Datenrichtung der Leitungen, also Ein- oder Ausgang, festlegen.

E/A-Register sind häufig über Portnummern als E/A-Ports erreichbar oder werden mittels Memory Mapped I/O in den Adressraum des Hauptspeichers eingeblendet. Trotz dieser technischen Verbindung unterscheidet man begrifflich weiterhin zwischen Speicherplätzen in RAM-Speicherbänken und Registerplätzen in Logikbausteinen.

Entwicklung und Verwendung in Programmiersprachen

Bereits der Zuse Z1 von 1938 und der Zuse Z3 von 1941 besaßen im Rechenwerk zwei Speicherstellen R1 und R2 in der Wortgröße der Maschine. Spezielle Maschinenbefehle übertrugen Daten zwischen diesen Registern und dem getrennten Speicherwerk.

Frühe Computer hatten keinen Arbeitsspeicher im heutigen Sinn. Programme und Daten lagen auf mechanischen Speichern, Lochkarten oder magnetischen Trommeln. Werte mussten zur Verarbeitung in Pufferplätze des Rechenwerks übertragen und anschließend wieder zwischengespeichert werden. Durch das Puffern von Zwischenwerten über mehrere Operationen entstanden aus einzelnen Registern Registersätze. Zunächst bestanden sie aus Elektronenröhren oder Relais, später aus Kernspeichern.

Mit der Adressberechnung für Kernspeicher wurde zwischen direkt im Befehlscode festgelegten Registern und indirekt über Indexregister adressiertem Speicher unterschieden. Kernspeicher konnte einige tausend Plätze umfassen. Als schnelle Rechenwerke später mit billigem, aber langsamerem dynamischem RAM verbunden wurden, wurden Register erneut als schnelle Puffer zwischen Hauptspeicher und Rechenwerk notwendig.

In höheren Programmiersprachen wie C konnten Programmierer Variablen, die besonders häufig verwendet werden, ausdrücklich als Registervariablen kennzeichnen. Moderne Compiler ignorieren solche Attribute seit Mitte der 1990er Jahre meist und überlassen die Registerzuweisung dem Optimierer. In C++ ist die Deklaration mit dem Schlüsselwort „register“ seit C++11 veraltet; seit C++17 wird sie nicht mehr unterstützt.

Lernvideos zu Register (Prozessor)

Weiterlesen

Prozessor Aufbau und Funktionale Einheiten · Hauptprozessor (CPU) und Mehrprozessorkerne · Steuer- bzw. Leitwerk · Rechenwerk und Register · Datenleitungen · Caches und MMU. Prozessorkern Enthält ein Prozessor nur einen Kern, wird dieser teilweise gleichbedeutend als Central Processing Unit (CPU) bezeichnet. Inhaltsverzeichnis. 1 Komponenten … Speicherhierarchie In der Informatik bezeichnet Speicherhierarchie die Anordnung von Speichern in einer Rechnerarchitektur aus Sicht des Hauptprozessors, geordnet nach … Prozessorarchitektur Die Prozessorarchitektur bezieht sich auf die spezifische Struktur und Organisation eines Prozessors, der ein wesentlicher Bestandteil von Computern und … Arbeitsspeicher Zugriffe auf den Arbeitsspeicher durch den Hauptprozessor werden zumeist über ein oder mehrere Pufferspeicher oder Cache-RAMs (kurz „Cache“) optimiert. Im Cache … Registersatz Als Registersatz (englisch Register Set) bezeichnet man die Menge aller Register eines Mikroprozessors. Die Menge derjenigen Register, welche durch … Skalar (Mathematik) Im Gegensatz zur Skalarmultiplikation ist das Skalarprodukt eine Verknüpfung, die zwei Vektoren einen Skalar als Wert zuordnet. Der Begriff Skalar geht … Integer (Datentyp) Als grundlegender arithmetischer Datentyp werden Ganzzahlen von der Hardware fast aller Rechenanlagen nativ unterstützt und sind in nahezu jeder … Vektor Addition und Subtraktion · Multiplikation mit einem Skalar · Skalarprodukt · Kreuzprodukt · Spatprodukt · Länge/Betrag eines Vektors · Dyadisches Produkt. Gleitkommazahl Gleitkommazahlen bestehen aus einer festen Anzahl von Ziffern, die gemäß dem Stellenwertsystem den Wert der Zahl angeben, sowie der Angabe, um wie viele Stellen … Arithmetisch-logische Einheit Eine arithmetisch-logische Einheit (englisch arithmetic logic unit, daher oft abgekürzt ALU) ist ein elektronisches Rechenwerk, welches in Prozessoren zum … Adressierung (Rechnerarchitektur) Adressierung ist in der Programmierung das Festlegen, auf welche Operanden (z. B. Datenfelder) sich ein Maschinenbefehl bezieht. Die Operanden können auf …