Register (Prozessor) - de.LinkFang.org

Register (Prozessor)


(Weitergeleitet von Register_(Computer))


Dieser Artikel ist nicht hinreichend mit Belegen (beispielsweise Einzelnachweisen) ausgestattet. Angaben ohne ausreichenden Beleg könnten demnächst entfernt werden. Bitte hilf Wikipedia, indem du die Angaben recherchierst und gute Belege einfügst.

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 Rechenwerke. In einem Prozessorkern stehen Register an der Spitze der Speicherhierarchie und sind daher die schnellste Möglichkeit Daten zu manipulieren, da der Zugriff unabhängig vom Daten- oder Adressbus erfolgt.

Viele Architekturen, insbesondere RISC-Architekturen, erlauben Rechenwerken nur die Verarbeitung von Daten in Registern; andere Architekturen erlauben zumindest teilweise auch die Nutzung von Nicht-Registerinhalten aus dem RAM oder aus Hardware-Registern.

Die Registersätze verschiedener Prozessorarchitekturen unterscheiden sich in der Größe, der Anzahl, und der Art der zur Verfügung stehenden Register:

Inhaltsverzeichnis

Registertypen in einem CPU-Kern


Nach Charakteristik

Bei alten CPUs (Z80, Intel 486) sind Hardware- und Architektur-Register identisch, bei moderneren CPUs (IBM System/360 Model 91, Pentium Pro, AMD K5, Intel Core) handelt es sich um unterschiedliche Dinge.

Nach Anzahl der enthaltenen Datenwerte

Nach Anwendungsfunktion

Datenregister, Akkumulator

Datenregister werden benutzt, um Operanden für die ALU und deren Resultate zu speichern. Bei älteren Prozessorarchitekturen gab es teilweise nur ein einziges solches Register, den Akkumulator; Prozessorkerne neuerer Generation besitzen oft mehrere Datenregister mit Akkumulatorfunktion.

In der Regel ist die Größe des Datenregisters zusammen mit der Breite des Datenbusses mit ausschlaggebend für die Einordnung einer Prozessorarchitektur als 8-, 16-, 32- oder 64-Bit-Architektur. Mit 8-Bit-Datenbus und 8-Bit-Datenregistern wird sie als 8-Bit-Architektur bezeichnet, z. B. MOS Technology 6502 oder Zilog Z80. Prozessoren mit unterschiedlicher Größe von Datenbus und Datenregistern werden häufig entsprechend bezeichnet, z. B. der Motorola 68000, der mit 16-Bit-Datenbus und 32-Bit-Datenregistern als 16-/32-Bit-Prozessor bezeichnet wird. Die derzeit (2013) neuesten Prozessoren sind meistens 64-Bit-Prozessoren, z. B. AMD Opteron bzw. AMD Bulldozer, oder Intel-Prozessoren mit EM64T sowie (bereits selten) Itanium und Alpha AXP.

Bei 8-Bit-Prozessoren waren Adressbus und -register meistens 16 Bit groß. Bei den meisten heutigen Prozessoren sind die Adressregister genauso groß wie die Datenregister, der Adressbus meistens gleich groß oder kleiner.

Meistens sind die Datenregister nur mit der ALU verbunden, nicht jedoch mit der FPU. D. h., in den meisten Prozessorkernen können Datenregister nicht als Operanden für FPU-Operationen verwendet werden. In diesem Fall müssen Operanden für die FPU in speziell dafür vorgesehenen Registern gespeichert werden, den Gleitkommaregistern.

Frei verwendbare Register

In modernen RISC-CPUs, so PowerPC oder Sun SPARC, heißen die Datenregister allgemeine oder frei verwendbare Register (englisch GPR für General Purpose Register), da sie sich als Daten- oder als Adressregister einsetzen lassen. Der Motorola 68000 verfügt in ähnlicher Weise über acht gleichwertige Datenregister.

Die 32-Bit-Prozessoren der Intel-x86-Familie entstammen einer CISC-Architektur und besitzen daher weitgehend die Eigenschaften ihrer 8- und 16-Bit-Vorgängergenerationen. So besitzen sie nur vier allgemeine Register, die auch noch mit den Namen aus jener Zeit bezeichnet werden (Akkumulator, Basisregister, Zählregister, Datenregister). Auch kann ein Prozessorkern nach wie vor gewisse Operationen nicht auf allen Registern durchführen (z. B. können Divisionen nur im Akkumulator stattfinden).

Adressregister

Die Adressregister spielen eine wichtige Rolle in der Adressarithmetik. Sie werden genutzt, um Speicheradressen von Operanden oder Befehlen zu berechnen, und haben Verbindung mit dem internen Datenbus und dem Adressbus.

Bei indizierter Adressierung, beispielsweise beim Intel 8086, werden zwei Typen von Adressregistern unterschieden:

Bei linearer Adressierung, etwa beim Motorola 68000, gibt es keine solche Unterscheidung. Es gibt dort eine Adressierungsart, bei der ein Adress- und ein Datenregister addiert werden. Beim Motorola 68020 kann das Datenregister dabei zusätzlich mit einer fixen Wortbreite multipliziert werden.

Bei anderen Prozessorarchitekturen bezeichnet man als Indexregister auch das einzige an der Adressbildung beteiligte Register: beim Motorola 6800 und beim Zilog Z80 wird eine Konstante addiert, beim MOS Technology 6502 werden ein 16-Bit-Wert und ein 8-Bit-Indexregister addiert. Beim 6502 gibt es zusätzlich eine Adressierungsart, bei der eines von mehreren Basisadressregistern per Indexregister aus einer Tabelle ausgewählt werden kann, die im RAM abgelegt ist. Die genaue Benennung der einzelnen Adressierungsarten ist uneinheitlich und prozessorspezifisch.

Spezialregister

Neben allgemeinen Registern gibt es auch Spezialregister, die den Betriebszustand des Prozessorkerns speichern und Hilfsfunktionen für ihn erfüllen. Mit ihnen lassen sich nur Spezialoperationen ausführen (z. B. Division) oder sie haben ganz spezielle Funktionen (Interrupt descriptor table IDT, Seitentabelle …)

Spezialregister sind nur teilweise vom Anwender programmierbar.

Bei den meisten Architekturen sind folgende Spezialregister anzutreffen:

Der Refreshzähler der Z80, ein automatischer Zähler, der die Refresh-Adressen des Speichers generiert und von einigen Programmen als Pseudo-Zufallszahlengenerator verwendet wird, gehört ebenfalls in diese Kategorie.

Einige Mikrocontroller (Intel-MCS-51-Familie sowie Siemens-C167-Familie) organisieren diese Spezialregister und die Register zur Kontrolle der internen I/O-Ports in Form einer Registerbank, die sich mittels Memory Mapped I/O mit den gewöhnlichen Befehlen für den Arbeitsspeicherzugriff ansprechen lässt. Der durch diese Registerbank verdeckte Arbeitsspeicher lässt sich entweder gar nicht oder nur indirekt ansprechen.

Stapelregister

Die Stapelregister (auch Stapelzeiger oder Stackpointer, aus englisch stack pointer, kurz SP) sind Adressregister zur Verwaltung von Stapelspeichern, auch Kellerspeicher oder nur Stack genannt.

Ein Stapelspeicher wird von einem Stapelregister nach dem LIFO-Prinzip organisiert und kann mit Push- oder Pop-Operationen gefüllt oder geleert werden. Dabei zeigt das Stapelregister immer auf die Speicheradresse am Ende des Stapelspeichers, je nach Architektur auf oder zumeist hinter das letzte Element.

Auf den meisten heutigen Architekturen existieren:

Nach elektrischer Typisierung

Ein-/Ausgaberegister


Neben Pufferplätzen in der Zentraleinheit des Rechnersystems können Register auch in der Elektronik angeschlossener Peripheriegeräte oder -chips auftreten, aber auch die CPU selbst kann über integrierte Ein-/Ausgaberegister verfügen. Sie lassen sich in der Regel in die gleichen Unterkategorien einteilen wie die o. g. reinen CPU-Register. Ein paar repräsentative Beispiele:

Diese I/O-Register sind häufig über Portnummern als I/O-Ports auch vom Programm der Zentraleinheit erreichbar oder werden in den Adressraum des Hauptspeichers eingeblendet (Memory Mapped I/O). Je nach Sichtweise hat sich dabei dennoch die begriffliche Unterscheidung von Speicherplätzen in den RAM-Speicherbanken und Registerplätzen an Logikbausteinen erhalten.

Geschichte


Bereits beim ersten Computer, der Zuse Z3 von 1941, und ihrem Vorgänger, der Zuse Z1 von 1938, sind als Operanden für die arithmetischen Operationen im „Rechenwerk“ zwei Speicherstellen „R1“ und „R2“ in der Wortgröße der Maschine vorhanden. Zum Datenaustausch (Laden und Speichern) zwischen diesen Registern und dem vom Rechenwerk getrennt zu sehenden Speicherwerk sind spezielle Maschinenbefehle implementiert.

Die Entwicklung der Register ist also eng verknüpft mit der technischen Entwicklung des Arbeitsspeichers der frühesten Computer: Die ersten Computer hatten gar keinen Arbeitsspeicher im heutigen Sinne. Sämtliche Daten und das Programm selbst waren auf gänzlich anderen Medien, wie zum Beispiel mechanische Speicher, Lochkarten und magnetischen Trommelspeichern, abgelegt. Damit das Rechenwerk eine Operation ausführen konnte, mussten vom Massenspeicher Worte in die Pufferstellen des Rechenwerks übertragen werden, die einen Wert in die Schaltlogik abgeben konnten. Der am Ausgang der Schaltlogik entstehende Wert musste wieder gepuffert werden, bis er auf den Massenspeicher ausgeschrieben werden konnte. Ebendiese Pufferplätze nannte man Register (von lateinisch: regesta; aus regerere eintragen).

Schon früh erkannte man, dass der Programmablauf optimiert werden konnte, wenn man Zwischenwerte auch über einige wenige Operationen hinweg puffern konnte, und etwa in der übernächsten Operation aufaddieren konnte. So wurden aus Einzelregistern ein Registersatz, die zuerst ebenfalls noch aus Röhren oder Relais bestanden, mit fortschreitender technischer Entwicklung dann aber durch Ferritkernspeicher ersetzt wurden. Die damit mögliche Adressberechnung für den Kernspeicher führte zu einer Aufspaltung der Begriffe – die Nennung als Register meint weiterhin Pufferplätze, deren Ort im Befehlscode des Rechenwerks hart codiert ist, während der Kernspeicher über Indexregister indirekt adressiert wird.

Zur Zeit der Kernspeicher waren die Datenwerte im Arbeitsspeicher noch direkt mit dem Rechenwerk verknüpft. Ein Befehlscode enthielt neben Rechenregistern, deren Wert direkt in die Rechenlogik einging, die codierte Angabe von Indexregistern, deren Wert auf die Adressleitungen des Kernspeichers gelegt wurde, und der ausgehende Wert der Ferritkerne dann in die Rechenlogik geführt wird. Der Kernspeicher konnte dabei einige tausend Plätze umfassen. Mit immer schnellerem Rechenwerk und dem Übergang zu billigerem aber langsameren Hauptspeicher auf Basis von Kondensatoren (dynamischer RAM) wurden wieder Pufferplätze notwendig, bei dem Werte aus dem Hauptspeicher erst in Registerplätze am Rechenwerk kopiert werden, um von dort verarbeitet zu werden.

Benutzung in Hochsprachen

Einige Hochsprachen wie C sahen die explizite Benutzung von Registern für Variablen vor, die laut Vorstellungen des Programmierers besonders häufig benutzt werden. Moderne Compiler (seit Mitte der 1990er Jahre) ignorieren diese Attribute und überlassen die Zuweisung von Konstanten, Variablen oder Teilausdrücken dem Optimierer.

Weblinks


Commons: Prozessorregister  – Sammlung von Bildern, Videos und Audiodateien



Kategorien: Digitaltechnik | Rechnerarchitektur



Quelle: Wikipedia - https://de.wikipedia.org/wiki/Register (Prozessor) (Autoren [Versionsgeschichte])    Lizenz: CC-by-sa-3.0


Veränderungen: Alle Bilder und die meisten Designelemente, die mit ihnen in Verbindung stehen, wurden entfernt. Icons wurden teilweise durch FontAwesome-Icons ersetzt. Einige Vorlagen wurden entfernt (wie „Lesenswerter Artikel“, „Exzellenter Artikel“) oder umgeschrieben. CSS-Klassen wurden zum Großteil entfernt oder vereinheitlicht.
Wikipedia spezifische Links, die nicht zu Artikeln oder Kategorien führen (wie „Redlink“, „Bearbeiten-Links“, „Portal-Links“) wurden entfernt. Alle externen Links haben ein zusätzliches FontAwesome Icon erhalten. Neben weiteren kleinen Designanpassungen wurden Media-Container, Karten, Navigationsboxen, gesprochene Versionen & Geo-Mikroformate entfernt.


Stand der Informationen: 04.05.2020 10:48:15 CEST - Wichtiger Hinweis Da die gegebenen Inhalte zum angegebenen Zeitpunkt maschinell von Wikipedia übernommen wurden, war und ist eine manuelle Überprüfung nicht möglich. Somit garantiert LinkFang.org nicht die Richtigkeit und Aktualität der übernommenen Inhalte. Sollten die Informationen mittlerweile fehlerhaft sein oder Fehler in der Darstellung vorliegen, bitten wir Sie darum uns per zu kontaktieren: E-Mail.
Beachten Sie auch : Impressum & Datenschutzerklärung.