Computer-Basiswissen 1
von Otmar Feger
Einleitung
Das
folgende Bild zeigt das bekannte prinzipielle Schema. Mittels Programm
führt der Computer das Programm aus und leistet das beabsichtigte
Ergebnis. Die Programm besteht aus eine Liste einzelner Anweisungen
(Befehlen) die der Reihe abgearbeitet werden. Das bedeutet, dass jede
Aufgabe in einzelne nacheinander auszuführende Anweisungen zerlegt
werden müssen. Man spricht dabei von Programmen bzw. von
Programmsprachen. Im Abschnitt Software wir noch ausführlicher
darauf eingegangen In der Menschensprache reihen sich Wörter
nacheinander und sind auch meistens auch verständlich wenn ein
Wort fehlt oder verstümmelt ist, In einer Programmsprache werden
solche Fehler nicht toleriert. Syntaxfehler werden zwar erkannt und
sind zu korrigieren. Weitere redundante Verfahren sind
künftigen Entwicklungen vorbehalten.
Soll
zum Beispiel aus einer Zahlenreihe die Größte ausgesucht
werden so ist die erst Zahl in der Liste mit der zweiten zu
vergleichen, dazu benötigt man schon mehrer Befehle – erste
Zahl aus dem ersten Platz in der ZahlenReihe holen, Abfrage ob der
nächste Reihenplatz schon mit dem Ende der Reihe identisch ist,
wenn ja Programmende und Fehlermeldung, dass die Liste nur aus einer
Zahl besteht. Sonst nächste Zahl aus der Reihe holen, vergleichen
mit der vorher reservierten Zahl, ist sie größer, dann
reservieren, sonst das das Spiel so lange wiederholen bis das
Reihen-Ende erreicht ist. Das Beispiel soll nur zeigen, dass Aufgabe,
die ein Programm leisten muss vorher in einzelne Schritte zerlegt
werden soll.
Literatur über Computer bezieht sich meistens
auf Eigenschaften und Handhabung von Programmen sowie auf Leistung der
Hardware. Was einen Computer befähigt Programme zu verarbeiten und
wie Programme aufgebaut sind ist Inhalt dieses Beitrags.
Hardware
Mikrocontroller
sind Computer die vollständig auf einem Siliziumscheibchen (Chip)
integriert sind und überwiegend für Steuerungen aber auch
für Applikationen wie Datalogger oder Wetterstationen eingesetzt
werden. Prinzipiell unterscheiden sie sich jedoch nicht von PC oder
Großcomputer. An Mikrocontroller lassem sich die Grundlagen
jedoch einfacher darzustellen.
Grundlage
eines Computers ist der Schalter (Bild 3). Jeder kennt einen
Lichtschalter. Dieser hat die Funktion einen Stromkreis zu
schließen und den Zustand halten (speichern) bist er wieder
betätigt wird.
Es ist oft wünschenswert einen
Schalter nicht mechanisch sondern elektrisch zu Aktivieren. Die ersten
Produkte dazu gab es schon vor mehr als 100 Jahren. Das Relais. Man
schickt Strom durch eine Spule. Das dadurch entstehende Magnetfeld zog
eine Metallzunge an die den Kontakt schloss. Relais werden auch Heute
noch vielfach in industriellen Produkten eingesetzt.
Ohne
Mechanik kommt die Elektronikröhre aus. Sie verstärkt ein
Signal und ermöglicht dadurch die Schalfunktion. Entsprechendes
gilt für den auf Halbleiterbasis arbeitenden Transistor.
Transistoren werden inzwischen in großer Zahl (bis zu mehreren
Milliarden) auf einem Silizium-Chip integriert.
Relais und
Elektronikröhren spielten in der Computertechnik nur am Anfang
eine Rolle. Röhren und Transistoren können Signale
verstärken was z. B. den Bau von Verstärker, Rundfunksender
und –empfänger ermöglichte.
Die wichtigsten
Schaltungen sind die logische Verknüpfungen zweier oder mehrerer
Signal zur UND- (englisch AND) und ODER- Funktion (englisch OR).
Bild 4 zeigt beiden Bausteintypen in symbolischer Darstellung.
Praktisch war es gelegentlich auch nützlich invertierte
Signalausgänge herauszuführen (NAND und NOR). Am
Symbolausgang markierte dies ein Punkt.
Wie
Transistoren zum Speichern des Schaltzustands zu bewegen sind zeigt
Bild 4. Durch gegenseitige Rückkopplung erreicht man, dass die
beiden Ausgänge (Q und Q-quer) immer unterschiedliche Signale
aufweisen, NULL und EINS bzw. 0 und 1, die sich durch entsprechende
Eingangssignale kippen lassen. Diese Schaltung nennt man Flip-Flop. Die
symbolische Darstellung zeigt ebenfalls Bild 4. Durch eine
Schaltungserweiterung kann man ein Flip-Flop auch zum Schwingen
bringen. So einen Generator erzeugt Rechtecksignale. Um stabilere
Frequenzen zu erzeugen eignet sich besser eine
Transistorschaltung mit einem Quarz. Ein Taktgenerator ist das Herz des
Computers. Er bestimmt die Verarbeitungsgeschwindigkeit und den Ablauf
der internen Komponenten. Der Taktgenerator ist integriert, lediglich
der Quarz wird extern angeschlossen.
Anfang der 60 Jahren wurden
hunderte Halbleiterbausteine mit den verschiedensten Eigenschaften
entwickelt. Die bekanntesten ist die 74xxx-Serie. Außer den
Logik-Bausteinen und Flip-Flops gibt es viele Schaltungsvarienten wie
Arithmetikeinheiten, Speicher, Zähler, Multiplexe und
Demultiplexer und viele andere mehr. Damit wurden Maschinensteuerungen
aber auch die ersten Groß- und Kleincomputer entwickelt.
Da
die 74XXX-Serie (auch TTL genannt) die Vorläufer der
Mikrocontroller waren und damit auch solche aufgebaut wurden, sei noch
kurz darauf eingegangen. In Bild 5 sind zwei TTL-Bausteine dargestellt
der 74HC00 enthält 4 NAND-Schaltungen. Über dem Symbol die
Abbildung des Bausteins in zwei Bausteinformen. „HC“ im
Nahmen bedeutet HIGH CMOS, eine schnellere Variante der CMOS
Technologie.
Daneben, der 74HC74 enthält zwei Flip-Flops.
Außer den zwei Ein- und Ausgängen gibt es noch einen
Lösch- (Clear-) und Setz-Anschluss (PR\ = Pre Set). So kann man
den Inhalt unabhängig vom momentanen Zustand löschen oder
setzen. Die Eingänge sind mit Takt (Clock) und Daten (Data)
bezeichnet. Mit dem Takt-Signal wird der Signalpegel am Data-Eingang
übernommen.
Bild
6 zeigt den 74HC193, ein 4 bit Vorwärts und
Rückwärts-Binär-Zähler. Die vier Flip-Flops
können auch gleichzeitig mit einem 4-Bit-Wort geladen oder
gelöscht wer-den. Durch die zwei Ausgänge für den
Über- oder Unterlauf sind 74HC193 beliebig hintereinander zu
schalten. Übrigens der 74HC192 hat gleiche Eigenschaften, nur
zählt er bis 10 statt der 74HC193, der bis 16 zählt
Zuletzt
noch ein etwas komplexeres Beispiel. Der 74HC138 ist eine 3 zu 8
Multiplexer (Bild 7). Das bedeutet 3 Signaleingänge adressieren 8
Ausgänge. Das Eingangssignal wird auf immer auf den Ausgang
durchgeleitet, der durch die Signaleingänge adressiert ist.
In
Computer spielen Register eine große Rolle, beispielsweise
für die Ein-/Ausgabe. Deshalb zeigt Bild 8 ein bidirektionales
8-bit-Register das mit dem 74HC245 realisiert ist.
Mit
zunehmender Integrationsdichte brachte man einen Computerkern auf einem
Chip. Diese Bausteine nannte man Mikroprozessoren. Mikroprozessoren
benötigen noch externe Bausteine, wie Speicher und
Taktgeneratoren. Der englische Begriff Controller bedeutet nicht
Kontrollieren sondern Steuern.
Daten werden meistens paarweise
übertragen. Dabei ist die kleinste Einheit einer Verbindung ein
bit. Damit sind die Zustände 0 oder 1 zu übertragen. Mit vier
parallelen Leitungen lassen sie die Zahlen 0 bis 16 darstellen.
0000 = 0
0001 = 1
0010 = 2
0011 = 3
.......
1111 = 15 (0 ist auch eine Zahl)
8
bit parallel erlauben 256 Zeichen. Damit sind Zahlen oder das Alphabet
oder andere Dinge darstellbar. Die Datenbreite von 8 bit nennt man
Byte, die Einheit byte. Die ersten Mikrocontroller verarbeiteten 4 bit
parallel. Diese wurden hauptsächlich in Quarzuhren und
Taschenrechnern eingesetzt.
Nun die internen Funktionen eines Mikrocontrollers.
Reiht
man Flip-Flops in Serie kann man damit einen Zähler realisieren.
Die Flop-Flops werden getaktet und bei jedem Takt übernimmt das
folgende Flip-Flop den Schaltzustand des Vorangegangenen. Die
parallelen Ausgänge aller Flip-Flops ergeben dann binäre
Zahlen, wie sie rechts des Zählers in Bild 9 dargestellt ist. Da
die Digitaltechnik nur die Zustände AUS und EIN bzw. 0 und 1 kennt
werden alle Daten (Ziffern und Buchstaben) zweiwertig (binär)
dargestellt. Der Querstrich über einem Signalnamen bedeutet dass
das Signal negiert ist. Auf der rechten Bildseite ist das
Funktions-Diagramm des Bausteins abgebildet.
Der Mensch rechnet
normalerweise im Zehnersystem das sich vermutlich wegen der zehn Finger
entwickelt hat. Man kann jedoch Zahlensysteme auf Basis jeder Zahl
bilden. Für die Computertechnik ist das System auf der Basis zwei,
das Binär-System, wegen dem Aufbau auf Schaltern ideal.
Inzwischen
gibt es Verarbeitungsbreiten mit 4 bit und 8, 16, 32, 64, bit. 8 bit
hat die Einheit byte; also 1, 2, 4, 8 und 16 byte.
Unabhängig von der Bit-Zahl spricht man auch von Worten. Je mehr
Byte gleichzeitig verarbeitet werden, umso einfacher und schneller ist
es größere Zahlen und Datenmengen zu verarbeiten. Die
Chipgrößen wurden dadurch immer größer und
teurer. Mit der Zeit gelang es die Strukturen auf dem Silizium zu
verkleinern so dass immer größere Verarbeitungsbreiten
wirtschaftlich zu fertigen waren. Große Zahlen lassen sich auch
mit 4-bit-Controller verarbeiten, Die Programme sind jedoch sehr viel
länger was entsprechend mehr Rechenzeit und Speicherplatz
erfordert. Spielt Rechenzeit und Speicherplatz eine untergeordnete
Rolle, wie zum Beispiel beim Taschenrechner oder Quarzuhren, so kann
man auch mit 4 bit Controllern nahezu alles berechnen.
Um
binäre Daten in großen Mengen Speichern zu können hat
man viele 1000 modifizierte Flip-Flops zu in rechteckigen Feldern
(Arrays) angeordnet. Auf der linken Seite des Arrays (in 9 rechts)
führt die aktuelle Zahl des Zählers in das das Array hinein
und adressiert genau ein Wort. Auf der unteren Seite des Arrays lieg
ein Wort das in die adressierte Speicherzelle abgelegt werden
solle oder aus im auszulesen ist. Es gibt Speicher die
sowohl Daten, Befehle als auch Programme, die den inneren
Funktionsablauf des Controllers steuern, enthalten.
Der
steigende Leistungshunger an solche Systeme führte zu mehr
Geschwindigkeit, Speicherplatz, Verarbeitungsbreite usw.. Man denke nur
was Programme die inzwischen in Handys oder Digitalkameras arbeiten. In
machen Autos gibt es inzwischen mehr als 50 Controller.
Die
ersten leistungsfähigeren 8-bit- Mikrocontroller brachten Intel
Ende der 70er Jahren mit dem 8051 und Motorola mit dem 6800 mit
heraus. Zusätzliche Schaltungserweiterungen sind für viele
Anwendungen nützlich. Zähler, Speicher und serielle
Schnittstellen. Sie wurden deshalb schon in die ersten
Controllern mit übernommen.
Den
generellen Aufbau eines Mikrocomputers zeigt Bild 10. Es gibt
einen Befehls- und Datenspeicher, eine Einheit für die Ein- und
Ausgabe, das Rechenwerk und das Steuerwerk mit der
Programmablaufsteuerung.
Was aus dem Bild nicht hervor geht
sind Register (Bild 8). Speicher um Daten für spezielle Aktionen
abzulegen bzw. abzuholen. Beispielsweise gibt es in der Rechen- und der
Ein-Ausgabeeinheit einzelne Register um Ergebnisse zwischenzuspeichern.
Es gibt auch für die Software unsichtbare Register um
unterschiedliche Signallaufzeiten der verschiedenen Signale zu
synchronisieren. Dies ist auch erforderlich beim Auslesen von Speichern
wenn einzelne, parallel verarbeitete bits, wegen unterschiedlicher
Signallaufzeiten nicht ganz genau gleichzeitig erscheinen. Der
Maschinentakt sorgt dann dafür, dass alle Signale gleichzeitig in
einem Register verfügbar sind.
Damit ein Computer Daten
verarbeiten kann benötigt er ein Programm. Ein Programm besteht
aus Befehlen. Es gibt meist über hundert verschiedene Befehlstypen
die sich in einige Klassen unterteilen lassen. Transportbefehle sorgen
dafür, dass Daten von der Eingabe zum Datenspeichern oder zur
Recheneinheit hin und zurück transportiert werden. Es gibt die
Arithmetik- und Logikbefehle (die Rechenoperationen + - / und *, AND,
OR, >, <, =, Shift) sowie Befehle für den Programmablauf.
Shiftbefehle (Schiebebefehle) verschieben den Inhalt eines Registers
nach einem höheren oder niederen Wert (mathematisch ist das eine
Multiplikation bzw. Division einer Binärzahl). Dazu später
mehr. Eine Befehlsklasse sind Programmsteuerbefehle. Sie können
den Inhalt des Befehlszählers verändern und damit den
sequenzielle Programmablauf unterbrechen. Das leisten die
Sprungbefehle. Der Programmablauf fährt in diesen Fällen
nicht mit dem nächsten Befehl sondern an einer anderen Stelle im
Programm fort. Unbedingte Sprungbefehle können beispielsweise
für andere Zwecke belegte Speicherbereiche überspringen.
Bedingte Sprungbefehle werden von bestimmten Ereignissen, z. B. dem
Ergebnis einer Rechenoperation oder einem veränderten
Eingangssignal ausgelöst.
Zudem gibt es die Sprünge
in ein Unterprogramm und die Sprünge die von einem Interrupt
ausgelöst werden. Der Software-Abschnitt geht ausführlicher
darauf ein. Die Transport- und einige arithmetischen Befehle bestehen
aus zwei Teilen. Dem Operations- und dem Adressteil. Der Operationsteil
sagt was zu tun ist und der Adressteil verweist auf eine
Speicheradresse, ein Register oder er enthält eine
Konstante. Adressteile können auch zwei Adressen beinhalten. Es
gibt Befehle ohne Adressteil die sich nicht auf Speicher oder Register
beziehen. Details beschreibt der SoftwareAbschnitt.
Nach dem
Start eines Programms beginnt der Befehlszähler hochzuzählen,
Er adressiert jeweils einen Befehl im Programmspeicher, liest ihn aus
und führt ihn mit Hilfe der Programmablaufsteuerung aus.
Zwangsläufig ergibt sich daraus, dass die Lösung von Aufgaben
durch Befehle in einer aufeinander folgenden Reihe ausgeführt
werden.
Befehle und Daten sind jeweils durch binäre
Ausdrücke dargestellt. Um sich die mehr als 100 verschiedenen
Befehle leicht merken zu können bezeichnet man den Befehls-Code
durch textliche Kurzbezeichnungen. Beispielsweise MUL, DIV, ADD und SUB
für Arithmetik-, OR, AND für Logik- Befehle, MOV für
Transportbefehle usw. Mit diesen Bezeichnungen kann ein Programm
geschrieben werde. Ein besonderes Programm (Assembler) übersetzt
dieses dann in die internen erforderlichen Bitmuster. Dabei wird das
Programm auf Schreib- und Logikfehler geprüft. Da die
Bezeichnungen je nach Hersteller- oder Controller-Typ abweichen
sind jeweils angepasste Assembler erforderlich.
Der
Software-Abschnitt geht ausführlicher auf dieses Thema ein. Von
Anfang an integrierte man für häufig benötigte
Funktionen zusätzliche Schaltungen auf den Computer Chip. Damit
spart man externe Bauelemente. Das waren zuerst Zähler/Zeitgeber
und eine serielle Schnittstelle. Im Laufe der Zeit stiegen die
Anforderungen und es kamen immer mehr Schaltungskomponenten dazu. Bild
11 zeigt ein Beispiel.
weiter: Teil 2