Theorie
 
 
 
 
 
Computertechnik
 
 
 
 
 

Der Computer

 
 

.. Assembler- und Maschinensprache

 
 

 
 
 
 
 
Das nachfolgende Programm ist sowohl in Maschinensprache, als auch in seinem Assemblercode angegeben. Wie zu sehen ist, besteht der Maschinencode ausschließlich aus hexadezimalen Zahlen, vor denen die Adressen der Speicherzellen angegeben sind, in denen sich diese Zahlen befinden. Die ersten drei Bytes BA, 06, 04 befinden sich in den Speicherzellen 0 bis 2, dann folgt in der nächsten Zeile, besser in der Speicherzelle 3 das Byte EC usw.
 
 
 
 
Zeile |Maschinencode   | Assemblersprache
      |Adr   |Daten:   | Label |Bef | Parameter    ; Kommentar
-----------------------------------------------------------------
  1    00000  BA 06 04 | main:  MOV  DX, 0604h     ; Eingabetor
  2    00003  EC       |        IN   AL, DX        ; .. lesen
  3    00004  34 0F    |        XOR  AL, 0Fh       ; XOR-Maske  
  4    00006  BA 06 05 |        MOV  DX, 0605h     ; Ausgabetor
  5    00009  EE       |        OUT  DX, AL        ; .. schreiben
  6    0000A  EB F4    |        JMP  main          ; Sprung
 
 
 
 
 
 
 
Die Assemblersprache (Assemblermnemonik)
Der erste Eindruck in Bezug auf die Assemblersprache und deren Lesbarkeit mag nicht besser sein, als der zu dem Maschinencode. Kennt man dagegen einige englische Begiffe verbessert sich dieser Zustand, denn man kann die Abkürzungen zu Worten erweitern. Diese sind dann schon aussagekräftiger. So ist MOV die Abkürzung für 'move', was 'bewege nach' bedeutet .. und es bleibt nur noch die Frage, .. was soll denn wohin bewegt werden?.
Im Beispiel der Zeile 1, soll die Zahl 0604h in das CPU-Register DX bewegt, oder kopiert werden.
Auch der nächste Befehl ist nicht schwerer zu verstehen. IN steht für 'input' oder Eingabe, und es fragt sich wieder, woher kommt die Eingabe und wohin soll sie gebracht werden. Auch hier wird das Schema benutzt, nach welchem erst das Ziel, dann die Quelle in Assemblerbefehlen genannt wird. Dementsprechend soll ein Wert, der mit dem DX-Register zusammenhängt, in das AL-Register übertragen werden.
Zugegeben dieser Befehl ist etwas schwieriger, denn die im vorherigen Befehl in das DX-Register geladene Zahl 0604h stellt eine Adresse im IO-Speicher dar .. So kann man den Befehl von Zeile 2 wie folgt übersetzen .. 'Hole die Eingabe an der Speicherzelle 0604h und kopiere deren Wert in das AL-Register'. Da die CU bei diesem Befehl beide benutzten Prozessorregister DX und AL kennt, und keine anderen möglich sind, kann der gesamte Befehl durch ein Byte im Maschinencode abgekürzt werden.
Mit den weiteren Befehlen verhält es sich ebenso. XOR AL, 0Fh bedeutet, verbinde den Inhalt des AL-Registers mit dem Wert 0Fh durch die exclusive ODER Operation, und lege das Ergebnis im AL-Register ab. Dann wird in Zeile 4 noch einmal das DX-Register mit dem Wert 0605h geladen und der Inhalt des AL-Registers zur Speicherzelle 0605h ausgegeben. Der letzte Befehl JMP MAIN bedeutet jump (springe) zur Markierung (dem Label) main, wodurch das Programm zu einer unendlichen Schleife wird.

Woher weiss man das? Nun der Hersteller der CPU hat in dem Datenblatt zur CPU alle Maschinen-und Assemblerbefehle aufgeschrieben und ihre Wirkung erklärt. Als Beispiel sei auf die Assemblerbefehle der ®Intel 80186 CPU verwiesen, die im Kapitel Sprachen aufgeführt sind.
 
 
 
 
 
Link      Assemblerbefehle der ® Intel 80186 CPU
 
 
 
 
 
Das Assemblerprogramm
Kennt man die Assemblermnemonik einer CPU ist es nun doch einfacher Befehle zu formulieren, als diese in Form von Zahlenfolgen aus der Maschinensprache zu schreiben. Andererseits können Speicher nur mit Zahlen beschrieben werden, die ja für elektrische Signale der Speicher Flip-Flops stehen. Um diese Zahlen zu erzeugen, schreibt ein Programmierer zunächst ein Assemblerprogramm und überlässt das Heraussuchen, der zu seinen Befehlen benötigten Zahlen, einem Übersetzungsprogramm. Dieses heißt Assemblerprogramm, oder kurz Assembler. Es geht den Programmtext durch und sucht aus einer Liste die zugehörigen Maschinencodes dazu heraus. Nun ist ein Maschinenprogramm entstanden. Wird dieses in die Speicherzellen des Hauptspeichers geladen, kann es die CU abarbeiten. Wie die Ablage eines Maschinenprogramms im Speicher aussehen könnte, ist in dem nachfolgenden Bild gezeigt.
 
 
 
 
Zeile |Maschinencode   | Assemblersprache
      |Adr   |Daten:   | Label |Bef | Parameter    ; Kommentar
-----------------------------------------------------------------
  1    00000  BA 06 04 | main:  MOV  DX, 0604h     ; Eingabetor
  2    00003  EC       |        IN   AL, DX        ; .. lesen
  3    00004  34 0F    |        XOR  AL, 0Fh       ; XOR-Maske  
  4    00006  BA 06 05 |        MOV  DX, 0605h     ; Ausgabetor
  5    00009  EE       |        OUT  DX, AL        ; .. schreiben
  6    0000A  EB F4    |        JMP  main          ; Sprung
 
 
 
 
 
 
 
 
 
Funktion des Programms
Das Programm stellt eine unendliche Schleife dar, was weiter oben schon festgestellt wurde. Es liest die Speicherzelle 604h des IO-Speichers, dessen FlipFlops an den Eingängen mit Schaltern versehen sind. Die FlipFlops könne also durch die Schalter gesetzt oder gelöscht werden. Diese Schaltung nennt man ein Eingabetor oder Eingabeport. Durch den Befehl XOR AL, 0Fh wird das Eingabebyte 10101100b durch die exklusive ODER-Schaltung der ALU mit 0Fh = 00001111b verbunden. Dies führt zu folgendem Effekt ..


Nach der Wahrheitstabelle des exclusiven ODER werden zwei 0-Signale, genau wie zwei 1-Signale zu 0 ausgewertet. Treffen dagegen zwei unterschiedliche Signale aufeinander, so ergibt sich im Ausgang des XOR-Gatters ein 1-Signal.


Bei der bitweisen Verknüpfung von ...
                                                         1100 1100 und
                                                         0000 1111 lautet das Ergebnis
                                                         -------------
                                                         1100 0011

In den oberen Bits 7-4 blieb die Information der Schalter erhalten, während in den unteren vier Bits 3-0 die Information der Schalter umgekehrt (invertiert) wurde. Eingeschaltete Schalter liefern durch die Manipulation der ALU ein 0-Signal und ausgeschaltete Schalter ein 1-Signal.
Nachdem nun die CPU diesen Ergebniswert, der von der ALU in das AL-Register zurückgeschrieben wurde, zum Ausgabetor 605h ausgegeben hat, leuchten dort die entsprechenden Lampen.
Durch die Programmschleife wiederholt sich dieser Vorgang beliebig oft, so dass jede neue Schalterstellung in Bruchteilen von Sekunden erkannt wird und zu einer entsprechenden Reaktion am Ausgangstor führt.

Das man für die Verwirklichung dieser einfachen Schaltung keinen teuren Computer und kein Programm benötigt ist klar. Allerdings steckt in der vorgeführten Lösung der Kern einer Steuerung unter Computerkontrolle .. und Computer gibt es ja auch nicht nur in Form von PCs, wenn man an die PIC- oder Atmel Kleinstcontroller denkt.

Nun gut. Über Tore (Ports) die sich als simple FlipFlop-Speicher herausgestellt haben, können externe Werte eingelesen werden. Diese kommen von Sensoren, wie Schaltern, Temperaturfühlern, Licht- Füllmengen- und anderen Sensoren. Der Computer verbindet diese Werte durch seine Tätigkeit und über ein Programm mit anderen Werten wie z.B. der Zeit, anderen Sensorwerten oder mathematischen Berechnungen und gibt sie zu einem Ausgangstor (Ausgangsport) an Aktoren wie Lampen, Relais, Leistungstransistoren usw., aus. Für aufwendige Schaltungen ist das allemal einfacher, als die Steuerung durch eine Verdrahtung aufzubauen. Selbst bei obiger Schaltung ist es einfacher die Invertierung der Schaltersignale mit dem Computer zu erzeugen, als durch den Lötkolben. Es muss nur ja nur eine Zeile im Programm eingefügt werden.
 

 

 

 

www..de