Wikipedia · einfach zusammengefasst · Stand
Arithmetisch-logische Einheit
Eine arithmetisch-logische Einheit (englisch arithmetic logic unit, daher oft abgekürzt ALU) ist ein elektronisches Rechenwerk, welches in Prozessoren zum …
Inhalt6 Abschnitte
Was ist eine ALU?
Eine arithmetisch-logische Einheit (englisch arithmetic logic unit, kurz ALU) ist ein elektronisches Rechenwerk, das in Prozessoren zum Einsatz kommt. Sie berechnet arithmetische und logische Funktionen und ist damit ein zentraler Bausteil jedes Prozessors. Eine ALU kann zwei Binärwerte mit gleicher Stellenzahl n miteinander verknüpfen; man spricht daher von n-Bit-ALUs. Typische Werte für n sind 8, 16, 32 und 64. Begriffe wie 32-Bit- oder 64-Bit-CPU entstammen der Breite der Arbeitsregister der Prozessorarchitektur, die meist der ALU-Breite entspricht. Eine Ausnahme ist der Z80, der mit einer 4-Bit-ALU arbeitet.
Funktionen einer ALU
Jede ALU beherrscht mindestens folgende Minimaloperationen: arithmetisch die Addition (ADD) und logisch die Negation (NOT), die Konjunktion (AND, Und-Verknüpfung) sowie die Rechtsverschiebung oder -rotation (im Gegensatz zur Linksverschiebung extrem aufwendig nachzubilden). Üblich sind darüber hinaus viele weitere Operationen, die sich aber auch durch die Minimaloperationen auf Kosten der Rechenzeit (in mehreren Takten) nachbilden lassen: Inkrement und Dekrement, Addition mit Übertrag (ADC), Subtraktion (SUB), Subtraktion mit Übertrag (SBB), Vergleich (CMP), Multiplikation (MUL), Division, Decimal adjust after addition (Dezimal-Angleichung nach Addition), Disjunktion (OR), Kontravalenz (XOR bzw. EOR), Test-Befehl, Rechts- und Linksverschiebung (ASR, ASL, LSR, LSL), Links- und Rechtsrotation (ROL, ROR), Register- und Bit-Manipulationen (Bits setzen, löschen, testen) sowie Umsortieren von Bits und Bytes, AES-Befehle und CRC-Befehle. In älteren Prozessoren (bis etwa zum 8086) war die ALU zusätzlich für das Inkrementieren des Programmzählers, Berechnen relativer Sprünge (JR), die Manipulation des Stackpointers (CALL, RET, PUSH, POP) und Adressberechnungen ([IX+n]) verantwortlich. Alle ALUs verarbeiten Festkommazahlen; Gleitkommabefehle sind in vielen aktuellen CPUs Standard, außer in kleineren Mikrocontrollern mit geringer Stromaufnahme oder geringen Herstellkosten. Der Trend der letzten 15 Jahre (Stand 2015) ist die Umstellung von ALUs auf Vektor-Verarbeitung.
Steuertabelle einer n-Bit-ALU
Welche Operation die ALU ausführt, wird über die Steuerbits F3 bis F0 (einen Steuervektor) ausgewählt. Ein Auszug aus einer Steuertabelle für eine n-Bit-ALU mit Ergebnis R, wobei A und B die beiden Operanden sind: 0000 → 0, 0001 → A, 1001 → NOT A, 0100 → A AND B, 0101 → A OR B, 0110 → A XOR B, 0111 → A + B, 1111 → B − A. (Die 1 steht hier jeweils für logisch wahr, 0 für logisch falsch.)
Aufbau und Funktionsweise
Vor dem Erfolg integrierter Mikroprozessoren waren ALUs als eigene Bausteine mit geringerem Integrationsgrad verbreitet, zum Beispiel die 4-Bit-ALU SN74S181 aus der 74xx-Reihe von Texas Instruments; auch der 1-Bit-Prozessor MC14500B von Motorola ist historisch erwähnenswert (dessen Einheit nennt sich allerdings nur LU, Logic Unit). Eine n-Bit-ALU ist meist aus einzelnen 1-Bit-ALUs zusammengesetzt. Jede dieser 1-Bit-ALUs reicht an die höherwertige ALU ein Carry-Bit weiter, mit dem ein Übertrag an der jeweiligen Stelle gekennzeichnet wird. Zur Beschleunigung werden häufig andere Verfahren wie Carry-Look-Ahead eingesetzt (siehe Carry-Ripple-Addierer). Jede 1-Bit-ALU hat außer den Eingängen für die zu verknüpfenden Werte und das Carry-Bit einen Eingang für einen Steuervektor (Op.-Code), der die Verknüpfungsart festlegt. In einem Prozessor werden diese Steuereingänge gemeinsam vom Steuerregister (Operationsregister, OR) des Prozessors versorgt.
Das Statusregister
Die gesamte n-Bit-ALU hat außer dem Ausgangsvektor für das Ergebnis noch einen Bedingungsvektor, der ihren Zustand signalisiert. In einem Prozessor wird dieser Bedingungsvektor im Statusregister (englisch condition code register) abgelegt. Maschinensprachebefehle können diese Werte abfragen und so den Programmverlauf beeinflussen, zum Beispiel durch bedingte Sprünge. Das Statusregister enthält meistens vier Statusbits: das Übertragsbit (C, carry bit) zeigt den Übertrag bei Addition der höchsten Stelle an und dient als Kennzeichen für Bereichsüberschreitung bei vorzeichenlosen Zahlen; bei Rechnung im 2er-Komplement spielt es für die Bereichsüberschreitung keine direkte Rolle. Das Überlaufbit (V, overflow bit, auch OF oder O) zeigt eine Zahlenbereichsüberschreitung bei 2er-Komplement-Rechnung an (Übertrag der zweithöchsten Stelle). Das Nullbit (Z, zero bit) wird 1, wenn das Ergebnis der Operation bzw. der Inhalt des Akkumulatorregisters 0 ist. Das Negativbit (N) wird gesetzt, wenn das Ergebnis als negative Zahl interpretierbar ist (oberstes Bit des Akkumulatorregisters = 1). Je nach ALU-Typ gibt es weitere Flags, zum Beispiel das Half carry bit (H), das einen Übertrag zwischen nieder- und höherwertigem Halbbyte anzeigt und für die Dezimalkorrektur bei der Umwandlung in BCD-Darstellung wichtig ist, sowie das Paritätsbit (P), das je nach Prozessor eine gerade oder ungerade Parität des Akkumulatorregisters anzeigt (gerade bzw. ungerade Anzahl der Bits mit dem Wert 1).
Verwandte Systeme
Parallel Logic Units (PLUs) sind speziell auf Bitmanipulation zugeschnittene ALUs. Sie können parallel, also gleichzeitig mit anderen Rechenwerken, auf die Daten zugreifen und sind deshalb über einen eigenen Datenpfad mit dem Arbeitsspeicher verbunden. PLUs sind Bestandteil einiger Signalprozessor-Typen, die als Hochgeschwindigkeits-Controller eingesetzt werden.