Von-Neumann-Architektur im Rückblick
In der letzten Einheit hast du den Von-Neumann-Rechner kennengelernt: ein Computermodell, bei dem Daten und Befehle im selben Speicher liegen. Bevor wir in die Digitaltechnik eintauchen, fassen wir die wichtigsten Punkte noch einmal zusammen – und stoßen dabei auf eine Spur, die uns direkt zum nächsten Thema führt.
Die vier Bereiche des Rechners
John von Neumann teilte den Computer in vier funktionale Bereiche ein: das Rechenwerk (ALU, beherrscht die vier Grundrechenarten), das Steuerwerk (CU, steuert den Programmablauf), das Speicherwerk und die Ein-/Ausgabewerke. Rechen- und Steuerwerk bilden zusammen die CPU; verbunden sind alle Bereiche über ein gemeinsames Bus-System.
Der Befehlssatz des Modellrechners
| Binärcode | Mnemonic | Wirkung |
|---|---|---|
| 000000000000 | READ | AC ← Eingabe |
| 000100000000 | Ausgabe ← AC | |
| 0010adr | LOAD adr | AC ← DS[adr] |
| 0011adr | LOADI adr | AC ← DS[DS[adr]] |
| 0100num | LOADNUM num | AC ← num |
| 0101adr | STORE adr | DS[adr] ← AC |
| 0110adr | STOREI adr | DS[DS[adr]] ← AC |
| 0111adr | ADD adr | AC ← AC + DS[adr] |
| 1000adr | SUB adr | AC ← AC − DS[adr] |
| 1010adr | JUMP adr | BZ ← adr |
| 1011adr | JUMPE adr | Falls AC = 0: BZ ← adr |
| 1100adr | JUMPG adr | Falls AC > 0: BZ ← adr |
| 110100000000 | HALT | Programmende |
Übung: Verfolge den Programmdurchlauf
Auf dem Eingabeband steht die Zahl 2. Vervollständige BZ und AC nach jedem Befehl (nutze die Tabelle oben zum Decodieren).
| Speicher-Adresse | Befehl | BZ (neu) | AC (neu) | Zelle 1000 0000 | Ausgabe |
|---|---|---|---|---|---|
| 00000000 | 0100 0000 0100 → LOADNUM 4 | – | – | ||
| 00000001 | 0101 1000 0000 → STORE 1000 0000 | 4 | – | ||
| 00000010 | 0000 0000 0000 → READ (Eingabe: 2) | 4 | – | ||
| 00000011 | 0111 1000 0000 → ADD 1000 0000 | 4 | – | ||
| 00000100 | 0001 0000 0000 → PRINT | 4 | 6 | ||
| 00000101 | 1101 0000 0000 → HALT | – | 6 | 4 | 6 |
Die Bedeutung des Binärsystems
Warum überhaupt binär?
Elektronische Schaltungen lassen sich zuverlässig nur auf zwei klar unterscheidbare Zustände auslegen: Spannung liegt an, oder sie liegt nicht an. Zehn fein abgestufte Spannungspegel wären technisch denkbar, aber extrem störanfällig – schon kleine Schwankungen würden zu Fehlern führen. Zwei Zustände dagegen lassen sich robust und günstig erzeugen. Das Binärsystem ist also keine willkürliche Wahl der Informatik, sondern eine direkte Folge der Elektrotechnik dahinter.
Die Speicher-Adressen und BZ-Werte aus der Von-Neumann-Übung (z. B. 00000011) sind beispielsweise letztlich nichts anderes als Dualzahlen – man kann sie also genauso gut als ganz normale Dezimalzahl lesen. Wie das genau geht, schauen wir uns jetzt an.
Das Stellenwertsystem
Im gewohnten Dezimalsystem hat jede Ziffernposition einen Stellenwert – eine Zehnerpotenz: ..., 1000, 100, 10, 1. Das Binärsystem funktioniert genauso, nur mit Zweierpotenzen: ..., 16, 8, 4, 2, 1.
Addiere die Stellenwerte, an denen eine 1 steht: 64 + 16 + 8 + 2 = 90.
So wandelst du Dezimal in Binär um
- Teile die Zahl fortlaufend ganzzahlig durch 2 und notiere jeweils den Rest (0 oder 1).
- Wiederhole das mit dem Ergebnis der Division, bis 0 erreicht ist.
- Lies die notierten Reste von unten nach oben – das ist die gesuchte Bitfolge.
Übung: Bitmuster → Dezimalwert
| Bitmuster (8 Bit) | Dezimalwert |
|---|---|
00000101 | |
00010000 | |
01100100 | |
11111111 |
Übung: Dezimalwert → Bitmuster
| Dezimalwert | Bitmuster (8 Bit) |
|---|---|
| 10 | |
| 33 | |
| 200 | |
| 255 |
Binäre Codierung als Prinzip der Informationsverarbeitung
Bits haben keine Bedeutung an sich
Ein Bitmuster ist zunächst nur eine Folge elektrischer Zustände. Erst eine festgelegte Codierungsvorschrift legt fest, was ein bestimmtes Muster bedeuten soll. Dasselbe Muster kann – je nach Vorschrift – völlig verschiedene Dinge darstellen.
Beispiel: dasselbe Byte, zwei Bedeutungen
- Als Dualzahl interpretiert: 64 + 2 = 66.
- Als ASCII-Zeichen interpretiert (siehe Tabelle unten): der Buchstabe 'B'.
Kleiner ASCII-Ausschnitt
| Dezimal | Binär | Zeichen |
|---|---|---|
| 32 | 00100000 | (Leerzeichen) |
| 48 | 00110000 | '0' |
| 65 | 01000001 | 'A' |
| 66 | 01000010 | 'B' |
| 67 | 01000011 | 'C' |
| 97 | 01100001 | 'a' |
Übung: Bitmuster als ASCII decodieren
| Bitmuster | Dezimal | ASCII-Zeichen |
|---|---|---|
01000011 | ||
01100001 | ||
00110000 |
Dieselben Bits als Von-Neumann-Befehl
Auch ein 12-Bit-Muster wie 010000000101 lässt sich unterschiedlich lesen:
- Als reine 12-Bit-Dualzahl: 1029.
- Nach der Aufteilung des Modellrechners aus Modul 1 (4 Bit Anweisungsnummer + 8 Bit Zahl):
0100= LOADNUM,00000101= 5 → der Befehl LOADNUM 5.
Ob der Prozessor diese zwölf Bit als Zahl 1029 oder als Befehl „LOADNUM 5“ behandelt, hängt einzig davon ab, an welcher Stelle im Programm sie stehen – nicht von den Bits selbst.
Ein Bild aus Bits
Auch Bilder sind nur Bitmuster: Bei einem einfachen Schwarz-Weiß-Bild steht jedes Bit für einen Bildpunkt (1 = schwarz, 0 = weiß). Zeile für Zeile ergibt das ein Byte pro Reihe:
00111100
01111110
11111111
00011000
00011000
00011000
00011000
Dieselben acht Bytes könnte man genauso gut als acht Dezimalzahlen (24, 60, 126, 255, 24, 24, 24, 24) oder – aneinandergereiht – als eine einzige riesige Dualzahl lesen. Erst die Codierungsvorschrift „ein Bit = ein Pixel, zeilenweise“ macht daraus einen Pfeil.
Byte, Bit und Binärpräfixe
Ein Bit ist die kleinste Speichereinheit (0 oder 1). Acht Bit bilden ein Byte – die kleinste Einheit, die ein Rechner üblicherweise einzeln adressiert. Genau in ein Byte passt z. B. ein ASCII-Zeichen aus Modul 3.
Wie viele Bitmuster passen in n Bit?
Mit n Bit lassen sich genau 2n verschiedene Bitmuster darstellen.
| n Bit | Anzahl Muster (2ⁿ) | Wertebereich (unsigned) |
|---|---|---|
| 4 | 16 | 0 – 15 |
| 8 (1 Byte) | 256 | 0 – 255 |
| 16 | 65 536 | 0 – 65 535 |
Binärpräfixe: kB vs. KiB
Für große Mengen an Byte gibt es zwei parallele Präfix-Systeme: die SI-Präfixe (Zehnerpotenzen, wie im Alltag) und die IEC-Binärpräfixe (Zweierpotenzen, wie sie zum Speicher tatsächlich passen).
| SI-Präfix | Symbol | Wert (10er) | Binärpräfix | Symbol | Wert (2er) |
|---|---|---|---|---|---|
| Kilo | kB | 10³ = 1 000 | Kibi | KiB | 2¹⁰ = 1 024 |
| Mega | MB | 10⁶ | Mebi | MiB | 2²⁰ = 1 048 576 |
| Giga | GB | 10⁹ | Gibi | GiB | 2³⁰ = 1 073 741 824 |
| Tera | TB | 10¹² | Tebi | TiB | 2⁴⁰ |
Übung: Einheiten umrechnen
| Aufgabe | Ergebnis |
|---|---|
| 2 KiB = ? Byte | |
| 1 MiB = ? KiB | |
| 3 GiB = ? MiB | |
| 0,5 KiB = ? Byte |
Positive und negative Ganzzahlen im Bitmuster
In Modul 4 hast du gesehen: n Bit stellen 2n Muster dar, meist gelesen als Zahlen von 0 bis 2n − 1. Aber wie stellt man mit reinen Bitmustern auch negative Zahlen dar – es gibt schließlich kein Minuszeichen in der Hardware?
Erster Versuch: Vorzeichen-Betrag
Naheliegende Idee: Das höchstwertige Bit (MSB) dient nur als Vorzeichen-Flag (0 = positiv, 1 = negativ), der Rest bleibt der normale Betrag. Beispiel (8 Bit): +5 = 00000101, −5 = 10000101.
Das Verfahren hat zwei Probleme: Es gibt zwei Bitmuster für die Null (00000000 und 10000000), und die normale Bit-für-Bit-Addition liefert bei gemischten Vorzeichen falsche Ergebnisse. Für Hardware ist das unpraktisch.
Die Lösung: das Zweierkomplement
Reale Prozessoren nutzen stattdessen das Zweierkomplement: Positive Zahlen werden ganz normal dual dargestellt (MSB = 0). Für eine negative Zahl wird das Zweierkomplement des positiven Betrags gebildet:
- Schreibe den Betrag der Zahl als Dualzahl, mit führenden Nullen auf die volle Bitbreite.
- Invertiere alle Bits (0 ↔ 1) – das Ergebnis heißt Einerkomplement.
- Addiere 1 zum Einerkomplement – das Ergebnis ist das gesuchte Zweierkomplement.
Beispiel: −5 in 8 Bit
+5 = 00000101 invertiert = 11111010 + 1 = 11111011 ← das ist −5
Rückwärts lesen: Stellenwerttabelle mit negativem Vorzeichenbit
Ein Zweierkomplement-Muster lässt sich direkt decodieren, wenn man das höchstwertige Bit mit einem negativen Stellenwert versieht:
Summe der gesetzten Stellenwerte: −128 + 64 + 32 + 16 + 4 + 2 = −10.
Übung: Zweierkomplement decodieren
| Bitmuster (8 Bit) | Dezimalwert (Zweierkomplement) |
|---|---|
00000111 | |
11111111 | |
10000000 | |
11101000 |
Übung: Zweierkomplement bilden
| Dezimalzahl | Zweierkomplement (8 Bit) |
|---|---|
| −3 | |
| −16 | |
| −100 | |
| −1 |
Dualzahlen addieren und subtrahieren
Schriftliche Addition im Dualsystem
Die Regeln für die binäre Addition sind denkbar einfach: 0+0=0, 0+1=1, 1+0=1, 1+1=10 (0 schreiben, 1 Übertrag).
Beispiel: 83 + 38 (8 Bit)
Übertrag: 00001100
01010011 (83)
+ 00100110 (38)
-----------
01111001 (121)
11111111 (255) + 00000001 (1) ergibt eigentlich 256 – das passt nicht mehr in 8 Bit. Das Ergebnis „kippt“ auf 00000000 zurück, der Übertrag aus dem MSB geht verloren. Man spricht von einem Overflow.
Übung: Dualzahlen addieren (4 Bit)
| Aufgabe | Summe (4 Bit, dual) |
|---|---|
| 0011 + 0101 | |
| 0110 + 0001 | |
| 1001 + 0010 |
Subtraktion durch Addition: A − B = A + (−B)
Weil jede negative Zahl im Zweierkomplement einfach ein weiteres Bitmuster ist, kann die ALU Subtraktion auf Addition zurückführen: Sie bildet das Zweierkomplement von B und addiert es zu A. Ein zusätzlicher „Subtrahierer“ ist gar nicht nötig – deshalb kommt der SUB adr-Befehl aus Modul 1 in echter Hardware oft ganz ohne eigene Schaltung aus.
Beispiel: 12 − 5 (8 Bit)
12 = 00001100
Zweierkomplement von 5 = 11111011 (= −5)
00001100
+ 11111011
-----------
1 00000111 ← führende 1 fällt aus dem 8-Bit-Register heraus
00000111 = 7
Übung: Subtraktion über das Zweierkomplement (8 Bit)
| Aufgabe | Ergebnis (8 Bit, dual) |
|---|---|
| 20 − 7 | |
| 9 − 9 | |
| 6 − 10 |
Wissenstest: Teste dein Verständnis
Neun Fragen von der Von-Neumann-Architektur bis zur Dualzahl-Subtraktion. Beantworte alle Fragen und werte sie am Ende gemeinsam aus.