Assembler-Beispiel 1 |
Ausgabe "Hello World" auf dem Bildschirm
Im ersten Beispiel sollen alle Schritte exakt beschrieben werden.
Zunächst starten wir die Oberfläche und vereinbaren das Programm:
hallo.asm
(Groß- oder Kleinschreibung spielt keine Rolle; Erweiterung muss "asm" sein;
Name (vor Punkt) darf max. 8 Zerichen lang sein)
Die Oberfläche hat nun folgendes Aussehen:
Editor
Mit dem Kommando <e> kommen wir zum systemeigenen Editor und schreiben
das folgende Programm:
In der Zukunft wollen wir soweit wie möglich zur Darstellung immer den WINDOWS-Editor nutzen, die Sichtbarkeit ist besser, also sieht das nun so aus:
Als Programm-AblaufPlan (PAP):
|
Die erste Zeile beginnt mit einem ";", alles was diesem Zeichen folgt ist bis zum
Ende der Zeile Kommentar, ";hallo.asm" ist also nur der Name des Programms!
Die zweite Zeile beginnt mit einem ".", also folgen jetzt Segment-Direktiven. Leerzeilen können beliebig sein.
Die nächste Zeile beginnt mit einer Zeichenkette, die mit ":" beendet wird.
Die nächste Zeile beginnt gleich mit mindest einem Trennzeichen, sonst würde versucht
werden, den Befehl als Marke zu interpretieren, das ist natürlich falsch.
Bei der Interrupt-Betrachtung hatten wir schon festgestellt, dass die Nutzung
des Bildschirmes und der Tastatur besser über Systemfunktionen zu realisieren ist,
als alles selbst zu organisieren.
Dann folgt der Aufruf eines weiteren Interrupts 21h mit der Funktion 8 - das
ist eine Tastatur-Eingabe, das System wartet darauf.
Der nächste Interrupt 21h Funktion 4ch muss unbedingt sein, das Programm
gibt die Steuerung
wieder ans Betriebssystem ab, anderenfalls wird das Fenster geschlossen. In der letzten Zeile steht die Segment-Direktive "end" und danach das Startsymbol. Hier könnte man in Übereinstimmung mit dem Anfang auch etwas anderes schreiben |
Assembler
Der Assembler wird mit dem Kommando <a> aktiviert. Das System zeigt dann
Folgendes an (Ausschnitt):
Nicht sichtbar aber eben so interessant ist die ebenfalls entstandene "LST-Datei".
Wir wollen diese wieder wegen der besseren Lesbarkeit mit dem WINDOWS-Editor darstellen.
Man könnte sie hier auch bearbeiten, das bringt aber keinen Nutzen, das ist eine
Ergebnis-Datei:
Im oberen rechten Teil finden wir wieder unser Programm.
Links davon, immer in der gleichen Zeile, erscheint die Codierung der Befehle. Da sieht
man auch sofort, dass die Segmentdirektiven, das sind Assemblerbefehle, nicht codiert
werden, das sind ja auch nur Organisationen.
Da wir hier mit Byte arbeiten, sind die Werte nun immer 2 Ziffern lang. Im unteren Teil gibt es Informationen zum Programm, der Profi wird das sicher gut nutzen können, wir brauchen es im Moment nicht. Die "LST-Datei" erweist sich auch sehr nützlich bei der Fehlersuche, denn nur hier wird die Fehlerposition etwas genauer beschrieben! |
Interessant ist auch, dass die "obj-Datei" vorhanden ist, die möchte man sich auch
vielleicht ansehen. Das sollte man aber nur mit dem Kommando <o> tun,
hier wird der Viewer von Norton aufgerufen, nur der kann solche Dateien ordentlich
darstellen. Ruft man den auf, erscheint folgendes Bild:
Linker
Mit <l> wird der Linker aufgerufen. Nach der Abarbeitung zeigt er
folgende Ausschrift:
exe.Datei
Nun können wir uns auch die "exe-Datei" ansehen. Dazu nutzen wir das Kommando
<h>. Der "hex-dump" bezieht sich nur auf die "exe-Datei". Wieder
wird der Viewer genutzt:
Nun wollen wir natürlich auch sehen, ob es funktioniert, dazu geben wir mit <r> das Kommando zum Abarbeiten - und es geht:
Eigentlich können wir zufrieden sein, es bleiben aber ein paar Fragen:
Zur zweiten Frage ist zu sagen, dass die Ausgabe an der aktuellen Kursor-Position erfolgt. Eine Steuerung ist nur möglich, wenn entsprechend viele Leerzeichen und Zeilen ausgegeben werden (ist umständlich) oder wieder mit BIOS-Funktionen, da muss man aber wissen, wie der Bildschirm organisiert ist!
Zur ersten Frage
Die Ausgabefunktion überträgt stur Byte-weise alle Zeichen auf den Bildschirm
(der Bildschirm ist Teil des Hauptspeichers, also werden nur Werte von einem
Speicherbereich in einen anderen transportiert). Das
"$"-Zeichen ist die Endekennung des Textes, die wird gesucht und dann hört die
Funktion mit der Übertragung auf.
Im folgenden Beispiel wurde das "$" entfernt, nun durchläuft das System den 64K
Sektor, findet er eine Endekennung hört er auf, findet er Nichts, läuft das Programm
unendlich! Im Beispiel wurde eine Endekennung gefunden.
Im Beispiel 2 wollen wir auf weitere Eigenschaften des Systems eingehen, es ist eine Erweteirung dieses Beispiels.
zurück zur Start-Seite (Beispiele) / weiter Beispiel 2 | ||
zurück zur Start-Seite |