Das Programmierbeispiel zum Rechner ERNA1 zeigt, dass neben
den Schritten zur Aufstellung des Algorithmus ein aufwendiger handwerklicher
Teil zum Umsetzen des Symbolischen Programms in die Maschinensprache notwendig ist.
Wie zu jedem anderen Prozessor, steht auch für diesen
Rechner ein Programm zur Verfügung, welches diese Umsetzung vornimmt. Solche
Programme heißen Assembler.
Neben der eigentlichen Umsetzung des Programms werden meist
zum vorhandenen Befehlsvorrat, der sich auf den Prozessor bezieht, weitere
Organisationsbefehle angefügt. Diese erleichtern das Schreiben des Programms.
Zusätzlich zur symbolischen Darstellung der
Prozessorbefehle, man nennt diese Mnemonik,
kann auch mit symbolischen Adressen gearbeitet werden. Die Verwaltung des
Speichers muss jedoch jeder Nutzer selbst betreiben.
Programme, die mit den symbolischen Befehlen arbeiten,
sollen als Assembler-Programme
bezeichnet werden.
Aufbau des Assemblerprogramms
Die Regeln für den Aufbau des Assemblerprogramms sind nicht allgemeingültig, sondern beziehen sich auf diesen speziellen Prozessor. Prinzipien sind natürlich gleich, generell braucht aber jeder Prozessor-Typ seinen eigenen Assembler.
Assemblerprogramm:
Kommentarzeile:
Eine Befehlszeile hat folgenden Aufbau:
Markenfeld und Kommentarfeld kann entfallen.
Markenfeld:
Dieses Feld enthält:
Organisations-Befehle gehören nicht zum Befehlsvorrat des Prozessors, sie steuern den Ablauf und Ziele der Assemblerbearbeitung des Programms.
EQU |
Markenfeld und Operandenfeld muss vorhanden sein; setzt die Marke (neues Symbol) mit dem Wert des Operandenfeldes gleich (Operand muss ein zweistelliger Zahlenwert sein). z.B.:
das Symbol "aus" ist gleichbedeutend mit der Adresse 01 |
|
ORG |
Mit der Org-Anweisung wird festgelegt, ab welcher Speicherplatzadresse die Übersetzung erfolgen soll, z.B.:
Die Übersetzung speichert das Maschinenprogramm ab Speicherplatz 20 in den Speicher |
|
KON |
speichert
am aktuellen Speicherplatz den im Operandenfeld von KON angegebenen Wert ab, z.B.:
Auf Speicherplatz FE wird der Wert 5 und auf FF der Wert 2 gespeichert. Der Prozessor würde nun das Programm ab Adresse 25 starten. KON erhöht automatisch die Speicherplatzadresse um 1! |
Als Beispiel soll wieder das im Simulator beschrieben Programm verwendet werden.
Nutzung des Assemblers
Das Assemblerprogramm wird entsprechend den oben angegebenen Regeln mit einem ASCII-Editor geschrieben und mit dem Namen:
Als Editor kann man den „Editor“ aus Zubehör von Windows verwenden.
!!! keine Tabulatoren verwenden !!!
„Word“ eignet
sich schlecht als Editor, man kann jedoch dort den Text unter TXT-Datei
speichern.
Eine andere auch nicht gerade sehr gute Möglichkeit gibt es
unter der integrierten später noch dargestellten Bedienoberfläche zum gesamten
Assembler-System sehr sehr alten Editor.
Der Start des Assemblers erfolgt auf der Kommandoebene im
Eingabefenster (meist unter Programme und Zubehör).
Mit Laufwerk:<Enter>
und entsprechend vielen Eingaben von cd
Verzeichnis <Enter> kommen wir zum
Verzeichnis mit dem Assembler und unsere Quelle b1.asi
Der Start des Assemblers erfolgt wie folgt:
Spalten 3, 4, und 5 sind zusammen das Maschinenprogramm, also
An dem Beispiel kann man auch sehen, wie der Assembler Sprünge organisiert. Zeile 08 enthält einen Sprung zur Marke m1. Wir wissen nun schon, dass ein Sprung in der Bearbeitungsfolge nur das laden des Befehlszählers mit der neuen Adresse ist. Die neue Adresse steht hinter der Kodierung für den Sprung (niederwertiger höherwertiger Teil).
In dem Beispiel sieht man auch, dass die ORG-Befehle nicht übersetzt werden. Bei KON wird einfach der Wert auf dem aktuellen Speicherplatz abgelegt. Man könnte mit nur KON-Befehlen auch ein Programm schreiben. Hier der Beweis:
Die Quelle „b1.asi“ wurde nun mit einem Fehler versehen (in
Zeile 06 wurde add zu ad geändert).
(in den beiden fehlerhaften Programmen wurde die Festlegung
der Startadresse weggelassen!)
Der Assembler reagiert nun wie folgt:
Damit ist der wesentliche Schritt getan, man braucht nur noch die Hexfolge abzuschreiben und schon könnte unser Programm laufen. Da der Simulator aber über eine Load-Funktion verfügt, kann auch gleich eine entsprechende Datei hergestellt werden.
Ist die Überstzung ohne Fehler werden automatisch zwei weitere Dateien angelegt:
"name.SIM" ist das vom Simulator ladbare Maschinenprogramm. Es wird immer der gesamte Hauptspeicher von 256 Werten angelegt. Sichtbar ist dies in der SBP-Datei.
"name.SBP" entspricht dem Maschinenprogramm, jedoch erfolgt
eine Textausgabe, so dass ein Druck erfolgen kann.
Die Erweiterung .SBP steht für Speicher-Belegungs-Plan.
Für unser Beispiel ergibt sich folgendes Bild:
Treten Fehler auf, werden die letzten beiden Programme nicht angelegt.
!Achtung:
Beim Anlegen der Dateien
.LST, .SBP und .SIM wird nicht
kontrolliert, ob diese Dateien bereitsexistieren,
sie werden generell neu angelegt (sollten Dateien mit
gleichem Namen existieren, so werden sie zerstört) !
Anzeige SIM-Datei
Das Maschinenprogramm unseres Simulators, die SIM-Datei, ist eigentlich kein
Maschinenprogramm, es ist ja nur simuliert!
Aber es bereitet doch erhebliche Probleme es auszulisten. Der Grund dafür ist ganz einfach,
denn wir haben Nibbles (4-Bit), diese können so nicht gespeichert werden. Eine
handhabbare Einheit ist Byte und in diese werden die Nibbles rechtbündig eingeordnet.
Aus
z.B 5(16) wird 0101(2) und in Byte eingeordnet 0000 0101.
Diese Bitfolge soll
durch Textsysteme dargestellt werden. Dazu muss man wissen, das alles unter 20(16) also
0010 0000(2) von verschiedenen Ausgabegeräten sehr unterschiedlich als Steuerzeichen
interpretiert werden, es passiert vielleicht etwas, aber es ist nicht zu sehen. Die
meisten Textsysteme zeigen irgendwelche Zeichen.
Nimmt man die Ausgabe mit dem Editor vom Windows-System vor, sieht das so aus:
Man kann das auch mit dem Browser probieren, denn es gibt die Möglichkeit diese Zeichen
als Zahl einzugeben. Mit &#xx; kann man alle Zeichen eingeben (xx - Zahl (kann auch
3-stellig sein)).
Es wurden mal in dieser Form die Zeichen zwischen 00 bis 15 aufgeschrieben und davor
in Klammern immer die darzustellende Zahl:
(00) (01) (02) (03) (04) (05) (06) (07) (08) (09) (10) (11) (12) (13) (14) (15)
Das Ergebnis ist nicht allgemeingültig!
Der Browser von Mozilla Firefox stellt das anders als der Internet Explorer
dar. Von 09 bis 13 lassen beide alles weg, unterschiedlich mit 00, diese Zahl ist
immer mit Vorsicht zu behandeln! Andere Browser werden wieder anders reagieren.
So ist das mit der Textdarstellung unserer SIM-Datei. Man kann es auch mit einem anderen
System z.B. mit Word versuchen, das sieht nicht besser aus:
Der nächste Schritt wäre, eine Ausgabe in ein DOS-Fenster zu organisieren.
Das geht einfach mit der "Eingabeaufforderung" vom Windows-Systems. Auf der Ebene
kann man mit Kommandos das System steuern (findet man unter "help"). Entweder man
bewegt sich in das Verzeichnis der SIM-Datei oder man gibt den Pfad mit an und dann
mit dem Kommando "type" gefolgt von Leerzeichen und SIM-Datei-Name, erhält man eine
Ausgabe, zwar mit Sonderzeichen, aber völlig unbrauchbar:
Es bleibt also nur nach speziellen Programmen zu suchen, die eine Ausgabe für diesen Fall erzeugen können.
Der "Viewer" aus dem DOS-System kann das sehr gut.
Links stehen die uns bekannten Adressen, danach in 4 mal 4 Feldern die Werte(16) und
danach rechts was das System als Zeichen ausgeben würde.
Nun sieht man auch, dass die Festlegung des Speichers von unserem Rechner sehr gut
war, es passt exakt in dieses Schema!
Und wir sind verdammt nah am realen Maschinenprogramm.
Das werden wir später am Prozessor 80x86 beweisen.
Und nun kann der geübte Maschinenprogrammierer auch sehen, dass die Ausgabe im
Eingabefenster gar nicht so verkehrt war. Wenn man in diesem Fenster einmal durchzählt,
wie viele Werte ausgegeben wurden, zählt man 8, vermutlich die letzten 8 Werte.
Vergleicht man das mit dem Viewer (blaues Fenster), sieht man rechts die gleichen Bildchen
wie im schwarzen Fenster, aber links auch die Codierung und das entspricht unserem
simulierten Maschinenprogramm.
Nach den 8 Zeichen steht entsprechend unserem Maschinenprogramm ein 0D, und da steckt das
Problem. Der Viewer zeigt dafür ein Bildchen, das schwarze DOS-Fenster "führt das Zeichen
aus". Der Wert 0D wird als "Druckersteuerzeichen" interpretiert:
Und es geht!
In der Darstellung ist zugleich gezeigt wie man auf das Laufwerk und in das Verzeichnis
kommt.
Noch etwas fällt auf, in einer weiteren Zeile gibt es noch ein Zeichen! Das ist die 2
auf Speicherplatz FF, die Startadresse. Warum die nun auch in einer neuen Zeile dargestellt
wird, liegt sicher an der Tatsache, dass das DOS-Fenster nur 80 Zeichen pro Zeile
darstellen kann.
Man muss also sehr genau hinschauen und analysieren.
zurück zur Start-Seite / Assembler Simulator |