Allgemeine Grundlagen der Programmierung
Dieses Buch ist unter einer Creative Commons-Lizenz lizensiert.
Als Programmierer beschäftigen Sie sich hauptsächlich mit Software. Sie erstellen Programmabläufe, in denen Informationen verarbeitet werden. Tatsache ist, dass für diese Informationsverarbeitung Software alleine nicht ausreicht. Man benötigt eine physikalische Maschine, auf der die Software laufen kann: Die Hardware.
Die Hardware arbeitet wie eine ganze Menge anderer Geräte auch mit Strom. Während beispielsweise Lampen Strom ausschließlich als Energiequelle verwenden, bedient sich der Computer des Stroms auch als Informationsträger. Er unterscheidet hierbei zwei Zustände: Strom und kein Strom.
An dieser Stelle sollte Ihnen sofort das Binärsystem in den Sinn kommen. Strom und kein Strom, an und aus, 1 und 0. Sie haben bereits gesehen, dass man mit dem Binärsystem eine ganze Menge machen kann. Durch bitweise Operatoren können Zahlen verändert werden, sprich Informationen verarbeitet werden. Das ist nur deswegen möglich, weil es eben physikalisch ein Äquivalent zu den Zahlenspielereien gibt. Durch die Unterscheidung zwischen Strom und kein Strom kann das Binärsystem abgebildet werden, und damit ist der Grundstein für mathematische Berechnungen gelegt.
Dass der Zustand "kein Strom" den Wert 0 im Binärsystem bedeuten kann und der Zustand "Strom" den Wert 1 ist zwar ganz nett, aber wie kann man nun damit zu rechnen anfangen? Bis hin zum richtigen Rechnen ist es noch ein etwas längerer Weg. Und er beginnt mit den digitalen Grundschaltungen.
Die UND-Schaltung ist ein Stromkreis mit einer Batterie, einer Lampe und zwei Schaltern A und B, die in Serie geschaltet sind. Dieser Stromkreis heißt UND-Schaltung, weil die Lampe nur dann brennt, wenn der Schalter A und der Schalter B geschlossen ist. Ist auch nur einer der beiden Schalter geöffnet (oder beide gleichzeitig), brennt die Lampe nicht - der Stromkreis ist unterbrochen. Die Logik des Schaltkreises ist recht einfach zu verstehen. Er wird nun in ein Modul gepackt, den UND-Schalter. Dieses Modul hat zwei Eingänge und einen Ausgang. Der Ausgang liefert nur dann Strom, wenn beide Eingänge Strom liefern.
Erinnern Sie sich noch an die bitweisen Operatoren? An den &
-Operator in Javascript? Dieser Operator wird auf der Hardware-Ebene genau durch die UND-Schaltung ausgeführt: Ein Bit im Ergebnis ist dann gesetzt, wenn in beiden Variablen die Bits gesetzt sind. Das entspricht der UND-Schaltung.
Die ODER-Schaltung funktioniert so, dass die Lampe brennt, wenn mindestens ein Schalter im Stromkreis geschlossen ist. Die beiden Schalter A und B sind dazu parallel geschaltet. Der Stromkreis ist also geschlossen, wenn auch nur ein Schalter geschlossen ist. Diese Logik wird nun ebenfalls in ein Modul gepackt, das ODER-Schalter genannt wird. Der Ausgang dieses Moduls liefert dann Strom, wenn mindestens einer der zwei Eingänge Strom liefert.
Diese ODER-Schaltung ist äquivalent zum |
-Operator. Vergleichen Sie die Arbeitsweise des Operators mit der Schaltung: Wenn mindestens ein Bit gesetzt ist, ist im Ergebnis an gleicher Stelle auch das Bit gesetzt.
Ein Schaltkreis, in dem die Lampe leuchtet, wenn der Schalter nicht geschlossen ist, nennt man NICHT-Schaltung. Technisch besteht dieser Schaltkreis genaugenommen aus zwei Schaltkreisen, wobei sich der Schalter im ersten und die Lampe im zweiten Schaltkreis befindet. Beide Schaltkreise sind über ein Relais, eine Art Magnet, verbunden. Die Logik dieses Schaltkreises wird in einen NICHT-Schalter gepackt, der einen Ein- und einen Ausgang besitzt. Ist der Eingang auf Strom gesetzt, ist der Ausgang ohne Strom - und andersrum.
Der NICHT-Schalter entspricht dem bitweisen Operator ~
.
Die EXKLUSIVE-ODER-Schaltung, der der bitweise Operator ^
entspricht, macht die Schaltkreise komplett.
Die Technik, die in den Schaltern steckt, besteht natürlich in Wirklichkeit nicht aus Batterien und Lampen, sondern aus Transistoren. Es handelt sich hierbei um einen der wichtigsten Bausteine überhaupt, die in der Prozessortechnologie eingesetzt werden. So ist die Anzahl der Transistoren, die zum Beispiel auf einem Chip untergebracht sind, ein Leistungsmerkmal. Dabei gilt im Allgemeinen: Je mehr Transistoren, umso leistungsfähiger. Während zum Beispiel der Pentium III von Intel aus 28 Millionen Transistoren besteht, sind auf dem Nachfolgeprozessor Pentium 4 mehr als 42 Millionen Transistoren untergebracht.
So simpel die digitalen Grundschaltungen scheinen - es lassen sich durch Kombination der Module größere Schaltungen erstellen, die erstaunliches beherrschen. Die Kombination der Schaltungen sieht hierbei so aus, dass Ein- und Ausgänge der UND-, ODER- und NICHT-Schalter miteinander verknüpft werden.
Der Halbaddierer ist ein Baustein, der aus zwei NICHT-Schaltern, drei UND-Schaltern und einem ODER-Schalter besteht. Das fertige Modul hat zwei Eingänge A und B und zwei Ausgänge S und Ü. Wenn ein Eingang gesetzt wird, wird der Ausgang S auch gesetzt. Wenn beide Eingänge gesetzt sind, wird lediglich Ü gesetzt.
Wenn Sie sich wundern, was das soll - sie haben soeben einen Baustein kennengelernt, der eine Addition mit den Zahlen 0 und 1 durchführen kann. Die Zahl 1 entspricht dabei einem gesetzten Eingang, die Zahl 0 einem nicht gesetzten. Die Addition wird hierbei im Binärsystem durchgeführt.
Die Ausgänge heißen deswegen S und Ü, weil S für Summe und Ü für Überlauf steht. Da nach einer Addition von 1 und 1 der Wert 2 im Binärsystem nicht durch ein einziges Zeichen ausgedrückt werden kann, sondern auf eine zweite Stelle zurückgegriffen werden muss, spricht man davon, dass ein Überlauf stattfindet.
So wie Sie aus den digitalen Grundschaltungen einen Halbaddierer aufgebaut haben, lassen sich mit Halbaddierern weitere Schalter aufbauen. Für einen Volladdierer benötigen Sie zwei Halbaddierer und einen ODER-Schalter. Der Volladdierer hat im Gegensatz zum Halbaddierer drei Eingänge A, B und C, ansonsten aber auch nur die beiden Ausgänge S und Ü.
Der Volladdierer arbeitet wie folgt: Ist lediglich einer der drei Eingänge gesetzt, ist auch nur S gesetzt. Sind genau zwei Eingänge gesetzt, ist Ü gesetzt. Sind alle drei Eingänge gesetzt, sind S und Ü gesetzt. Der Volladdierer stellt also eine Schaltung dar, die drei binäre Zahlen addieren kann.
Sie werden es wahrscheinlich schon vermutet haben: Durch die Kombination von mehreren Volladdierern lassen sich weitere Schaltungen erstellen. Mit Volladdierern können Sie bereits beliebig große Binärzahlen addieren. Wieviel Volladdierer Sie benötigen hängt hierbei ganz alleine von der Größe der Binärzahlen ab, die Sie addieren möchten.
Für die Addition von Binärzahlen, die aus jeweils vier Stellen bestehen, brauchen Sie einen Halbaddierer und drei Volladdierer. Durch Kombination dieser Schalter ist es bereits möglich, im Binärsystem Zahlen zwischen 0000 und 1111 zu addieren (entspricht 0 und 15 im Dezimalsystem). Müssen Sie größere Zahlen addieren, verwenden Sie einfach mehr Volladdierer.
Durch Kombination von digitalen Grundschaltungen können Schalter erstellt werden, die wiederum miteinander kombiniert in größere Module gesteckt werden, die wiederum in noch größere Module gepackt werden können. Das Zusammenstellen in Module ist ein ganz wichtiger Prozess, verringert er doch wesentlich die Komplexität des gesamten Gebildes. Dieser Prozess gilt auch für die Software-Entwicklung, in der Anweisungen zu Funktionen und Funktionen zu Bibliotheken zusammengepackt werden.
Packt man sehr viele Schalter zusammen, erhält man irgendwann ein Rechenwerk. Das Rechenwerk ist der Bestandteil eines Prozessors, der für das Rechnen zuständig ist. Das Rechenwerk enthält letztendlich zwei wesentliche Elemente: Akku und ALU. Der Akku ist eine Art Speicherelement. Die ALU ist die Arithmetical Logical Unit und führt die eigentlichen Berechnungen aus. Die ALU kann selber intern eine Zahl speichern. Da für Addition und Subtraktion jedoch zwei Zahlen notwendig sind, wird die zweite Zahl jeweils aus dem Akku gelesen. Hat die ALU die Berechnung durchgeführt, wird das Ergebnis wieder im Akku gespeichert.
Der Akku selber ist über einen Datenbus mit einem Speicher verbunden. In diesem Speicher liegen zum Beispiel eine ganze Menge Zahlen, die addiert werden sollen. Über den Datenbus werden die Zahlen an das Rechenwerk weitergegeben. Die ALU führt mit Hilfe des Akkus die Rechenoperation durch und speichert das Ergebnis wieder im Akku. Damit im Akku Platz für die nächste Zahl aus dem Speicher ist, wird über den Datenbus aus dem Akku das Ergebnis in den Speicher übertragen, damit es nicht verloren geht. Danach kann aus dem Speicher über den Datenbus die nächste Zahl an das Rechenwerk weitergegeben werden. Die Verbindung zwischen Rechenwerk und Speicher erfolgt also über einen Datenbus.
Der Kern des PCs, der Prozessor, besteht aus dem Rechenwerk und dem Befehlswerk. Während im Rechenwerk mit Akku und ALU Berechnungen durchgeführt werden, wird über das Befehlswerk gesteuert, was für Berechnungen eigentlich durchgeführt werden sollen, wo die entsprechenden Zahlen im Speicher zu finden sind und so weiter. Rechenwerk und Befehlswerk sind intern im Prozessor über Daten- und Steuerbus verbunden.
Der Prozessor als Gehirn des Computers ist extern über Daten-, Steuer- und Adreßbus mit dem Speicher und einer Ein- und Ausgabeeinheit verbunden. Die Ein- und Ausgabeeinheit kann wiederum mit externen Peripheriegeräten verbunden sein.
Bekannte Prozessoren sind die Pentium-Chips von Intel. Der Speicher wird normalerweise als RAM abgekürzt, was für Random Access Memory steht (also sowohl les- als auch beschreibbarer Speicher). Ein- und Ausgabeeinheiten sind die Tastur, Monitor, Maus, aber auch beispielsweise die Festplatte.
Sie können die Lösungen zu allen Aufgaben in diesem Buch als ZIP-Datei erwerben.
Erstellen Sie aus den digitalen Grundschaltern einen Baustein mit vier Eingängen A, B, C und D und einem Ausgang Y. Der Ausgang Y soll dann gesetzt sein, wenn mindestens A oder B gesetzt ist und zusätzlich mindestens C oder D.
Erstellen Sie aus den digitalen Grundschaltern einen Baustein mit drei Eingängen A, B und C und einem Ausgang Y. Der Ausgang Y soll dann gesetzt sein, wenn A nicht gesetzt ist oder wenn B gesetzt und gleichzeitig C nicht gesetzt ist.
Erstellen Sie aus den digitalen Grundschaltern eine EXKLUSIVE-ODER-Schaltung.
Erstellen Sie aus den digitalen Grundschaltern eine Schaltung mit zwei Eingängen A und B und einem Ausgang Y. Der Ausgang Y soll nur dann gesetzt sein, wenn A und B nicht gesetzt sind oder wenn sowohl A als auch B gesetzt sind.
Für Experten: Erstellen Sie aus digitalen Grundschaltern, Halb- und Volladdierern eine Schaltung, die eine Subtraktion zwischen zwei 3-bit Zahlen durchführen kann. Eine Subtraktion wird technisch wie folgt realisiert: Von der zu subtrahierenden Zahl wird das Zweier-Komplement gebildet wird. Das Zweier-Komplement ist eine mit dem NICHT-Operator negierte Zahl (Einser-Komplement), der der Wert 1 hinzuaddiert wird. Dann wird das Zweier-Komplement zur ersten Zahl hinzuaddiert. Das Ergebnis ist die Differenz der beiden Zahlen. Überprüfen Sie die Funktionsweise, indem Sie die Differenz von 7 und 2 anhand Ihrer Schaltung nachvollziehen.
Die Aufgabe hört sich schwieriger an als sie ist. Sie müssen lediglich das Zweier-Komplement wie beschrieben bilden. Wenn Sie das Zweier-Komplement erst haben, führen Sie eine Addition durch. Dazu verwenden Sie wie im Kapitel beschrieben Halb- und Volladdierer. Der Trick ist, dass eine Subtraktion eben nichts anderes ist als eine Addition, wenn man nur erst das Zweier-Komplement gebildet hat.
Copyright © 2001-2010 Boris Schäling