*****************************************************************
* *
* " **** * * **** *
* * * * * * * *
* * * * * *
* **** * * **** *
* * * * *
* * * * * * *
* **** * **** *
* *
*****************************************************************
=================================================================
= =
= Programmsystem zur Entwicklung von Anwenderprogrammen =
= Autor H. Blume Karl-Marx-Stadt =
= Copyright (C) 1986 =
= Ingenieurbuero Bauwesen =
= =
=================================================================
0. Inhaltsverzeichnis:
=======================
Seite
1. Einleitung 1
1.1. Dateien 1.1
1.2. Dateibezeichnung 1.2
1.2.1. Geraetezuweisung 1.2
1.2.2. Dateiname 1.2
1.2.3. Namenserweiterung 1.2
1.3. Ein- und Ausgaben 1.3
1.4. Systemkomponenten 1.3
2. Editor 2
2.1. Aufruf des Editors 2.1
2.2. Bedienung des Editors 2.1
2.3. Edit-Kommandos 2.2
2.4. Fehler 2.5
3. Assembler Z80/U880 3
3.1. Einleitung 3.1
3.2. Aufruf des Assemblers 3.1
3.3. Optionen 3.2
3.4. Assemblersprache 3.2
3.4.1. Zeichenvorrat 3.2
3.4.2. Format des Quellcodes 3.3
3.4.3. Symbole und Marken 3.4
3.4.4. Numerische Konstante 3.4
3.4.5. Ketten und Kettenkonstante 3.4
3.4.6. Befehlszaehler 3.5
3.4.7. Kommentar 3.5
3.4.8. Sofortbefehle 3.5
3.5. Ausdruecke 3.6
3.5.1. Register 3.6
3.5.2. Variable 3.6
3.5.3. Operatiosnzeichen 3.6
3.5.4. Bildung eines Ausdruckes 3.7
3.5.5. Typ eines Ausdruckes 3.7
3.5.6. Externe Symbole 3.7
3.6. Pseudooperationen 3.7
3.7. Fehlermitteilungen 3.11
3.8. Protokoll des Assemblers 3.11
3.9. Objektcode 3.12
3.10. Symboltabelle 3.12
3.11. Symboldatei 3.12
4. Z8000 Cross Assembler 4
4.1. Aufruf des Assemblers 4.1
4.2. Sprachelemente 4.2
4.3. Pseudooperationen 4.3
4.4. Operandenstrukturen 4.6
4.5. Arithmetik 4.6
4.5.1. Zahlen 4.6
4.5.2. Symbolische Konstante 4.6
4.5.3. Zeichenketten 4.6
4.6. Ausdruecke 4.7
4.7. Adressierungsformen 4.7
4.7.1. Segmentierung 4.7
4.7.2. Adressierungsformen 4.8
4.7.3. -IM- Daten Adressierung 4.8
4.7.4. -R- Register Adressierung 4.8
4.7.5. -IR- Indirekte Register Adressierung 4.9
4.7.6. -DA- direkte Adresse 4.9
4.7.7. -X- 4.10
4.7.8. -RA- 4.10
4.7.9. -BA- 4.11
4.7.10. -BX- 4.11
4.8. Reservierter Wortschatz 4.12
4.9. Fehlercodes 4.12
4.10 Ausgaben 4.13
4.10.1 Listing 4.13
4.10.2. Objektcode 4.14
4.10.3. Symboltabelle 4.14
5. Crossassembler Z8 5
5.1. Einleitung 5.1
5.2. Aufruf des Assemblers 5.1
5.3. Optionen 5.1
5.4. Assemblersprache 5.2
5.4.1. Zeichenvorrat 5.2
5.4.2. Format des Quellcodes 5.3
5.4.3. Symbole und Marken 5.3
5.4.4. Numerische Konstante 5.4
5.4.5. Ketten und Kettenkonstante 5.4
5.4.6. Befehlszaehler 5.4
5.4.7. Kommentar 5.5
5.4.8. Sofortbefehle 5.5
5.5 Ausdruecke 5.5
5.5.1. Register 5.5
5.5.2 Variable 5.6
5.5.3. Operationszeichen 5.6
5.5.4. Bildung eines Ausdruckes 5.7
5.5.5. Typ eines Ausdruckes 5.7
5.5.6. Externe Symbole 5.7
5.6. Pseudooperationen 5.7
5.7 Fehlermitteilungen 5.9
5.8 Protokoll des Assemblers 5.10
5.9. Objektcodes 5.10
5.10 Symboltabelle 5.11
6. Crossassembler 8086 6
6.1. Einleitung
****fehlt noch ***
7. Macros 7
7.1. Definitionen 7.1
7.1.1. Macrokopf 7.1
7.1.2. Macrokoerper 7.2
7.2 Ende des Macrokoerpers 7.2
7.3 Aufruf des Macros 7.3
7.4 Verschachtelung von Macros 7.3
8. Linker 8
8.1. Wirkungsweise 8.1
8.2. Aufruf des Linkers 8.1
8.3. Kommandofile 8.1
8.4. Programmanordnung 8.1
8.5. Dateiangeben 8.2
8.6. Programmangaben 8.2
8.7. Kommentare 8.3
8.8 Listing 8.3
8.9. Fehler 8.3
9. Verschiebelader 9
9.1. Wirkungsweise 9.1
9.2. Aufruf des Verschiebeladers 9.1
9.3. Optionen 9.1
9.4. Fehler 9.2
10. Turbo-Pascal Parser 10
A N H A N G
===========
A. Mnemonik Z80 A
B. Mnemonik Z8000 B
1. Notation B.1
1.1. Adressierungsarten B.1
1.2. Steuerregister (CTRL) B.1
1.3. Die Statusflags B.2
1.4. Interruptsteuerflags B.2
1.5. Register B.2
1.6. Bedingungscodes B.2
1.7. Abkuerzungen in der Befehlsbeschreibung B.3
2. Mnemonics B.4
2.1. Lade- und Austauschbefehle B.4
2.2. Arithmetische Operationen B.5
2.3. Logische Operationen B.7
2.4. Programmsteuerung B.7
2.5. Bitmanipulation B.8
2.6. Verschiebebefehle B.9
2.7. Blocktransporte, Kettenmanipulationen B.11
2.8. Ein- und Ausgabe B.15
2.9. Steueranweisungen B.18
C Z8 Mnemonik C
D 8086 Mnemonik D
1. Einleitung
==============
Das Programmsystem SYS beinhaltet eine Reihe von Programmen, die
eine schnelle Herstellung von Anwenderprogrammen fuer Rechner mit
folgenden CPU:
U880 (Z80)
U8000 (Z8001, Z8002)
U881..883 (Z8)
8086, iAPX286
mit allen CP/M kompatiblen Betriebssystemen gestatten. Die Bedie
nung erfolgt von einem Minimalmonitor aus durch entsprechende
Aufrufe. Fuer alle Programmteile ist eine einheitliche Bedienung
moeglich.
1.1. Dateien
------------
Fuer die Arbeit des gesamten Systems ist die Dateiarbeit wie
folgt organisiert: Der Editor erzeugt eine Quelldatei, die
maximal m-12 K Byte lang sein kann. m ist der zur Verfuegung
stehende RAM-Bereich, der z.B. bei 64k CP/B 52 K betraegt.
Diese Quelle befindet sich staendig im Speicher und wird vom
Assembler ohne Datentransporte uebernommen.
Ist eine Quelle laenger als 30k bei CP/B, so kann mit der Option
"L" jede beliebige Quelle assembliert werden.
Der Assembler erzeugt aus dieser Quelle eine Objektdatei, die
recordweise ausgegeben wird.
Der Linker bzw. Lader erzeugt dann eine abarbeitungsfaehige
Objektdatei im Intel-Hex-Code bzw. eine COM-Datei.
Die Definitionen der verschiedenen Dateien ist:
Objektdatei beinhaltet ein ausfuehrbares, absolut adressiertes
Maschinenprogramm im Intel-Hex-Code. Der erste
Befehl einer Objektdatei ist ein Sprung zum
Programmbeginn oder der Programmbeginn selbst.
Quelldatei beinhaltet eine beliebige Darstellung im ASCII-
Code. Die Quelldatei ist zeilenweise orientiert
und enthaelt keine Zeilennummern. Eine Zeile wird
mit CR (RETURN, ET1) beendet. Eine Quelldatei ist
stets mit 1AH abgeschlossen.
Link-Datei hat einen speziellen Aufbau in ASCII-Code. Sie
enthaelt bei externen Marken deren Namen und
ermoeglicht damit dem Linker die Adressen
zuweisung.
Listdatei enthaelt alle notwendigen ASCII-Zeichen fuer die
Ausgabe eines Protokolls einschl. Seitennumme
rierung und Blattwechsel.
Markendatei enthaelt alle Marken eines absoluten Programmes
zur spaeteren Verwendung im symbolischen Debugger.
1.2. Dateibezeichnung
---------------------
Jede Datei hat einen Namen, der durch das Betriebssystem bedingt
folgende Konstruktion hat:
dev:name.ext
Hierin bedeuten
dev: Geraetezuweisung
name Dateiname
ext Namenserweiterung
1.2.1. Geraetezuweisung
-----------------------
Fuer die Auswahl eines Diskettenlaufwerkes, auf dem eine bestim
mte Datei existieren soll, ist eine zusaetzliche Angabe moeglich
durch dev: vor dem Dateinamen. dev: kann mit A: fuer Laufwerk 1,
B: fuer Laufwerk 2 usw. angegeben werden. Ist dev: nicht gegeben,
wird das aktuelle Laufwerk benutzt.
Die Zuweisung eines logischen Geraetes erfolgt ueber die Angabe
CON: Console
LST: Drucker
AUX: Auxilary-Ein-Ausgabe
Der Doppelpunkt ist unbedingt anzugeben, er dient dem Rechner zur
Kennzeichnung des Laufwerkes bzw. logischen Geraetes.
1.2.2. Dateiname
----------------
Der Dateiname kann aus einem bis 8 Zeichen bestehen, wobei das
erste Zeichen ein Buchstabe sein muss. Ausser Alfazeichen ist
noch das Zeichen "$" (24 Hex) zulaessig. Zwischen Gross- und
Kleinschreibung wird nicht unterschieden.
Ein Dateiname kann beliebig gewaehlt werden.
1.2.3. Namenserweiterung
------------------------
Die Namenserweiterung dient der Unterscheidung von Dateien
gleichen Namens und ist vom Namen durch einen Punkt zu trennen.
Sie darf aus 3 Zeichen bestehen, weitere Zeichen sind ungueltig.
Fehlt diese Angabe (einschliesslich dem Punkt!), setzt das System
einen Standard:
Quelldateien .ASM
Linkdateien .HXL
Objektdateien .HEX
Rueckkehrdateien .BAK
Listing Assembler .PRN
Listing Linker .PRL
Hilfsdateien .$$$
Markendateien .SYS
1.3. Ein- und Ausgaben
----------------------
Bei der Definition eines Dateinamens bzw. eines logischen Gerae
tes wird der Ein- oder Ausgabekanal festgelegt.
Eingaben erfolgen Zeichen fuer Zeichen, bei Disketten ueber einen
128 Byte langen Puffer. Die Zeichen werden bei ASCII-Code ohne
Paritaetsbitpruefung jedoch mit 8 Bits gelesen. Die Zeichen 0aH
und 7FH werden ueberlesen, ein Zeichen ^Z (1AH) dient als Ende
kennzeichen einer Datei.
Ausgaben werden ebenso behandelt, jedoch wird nach jedem RETURN
(0DH) ein Line Feet (0AH) hinzugefuegt. Das Zeichen 1AH dient
wieder als Endekennzeichen der Datei.
Wird bei der Ausgabe ein Fehler festgestellt oder steigt das
gewaehlte Geraet aus oder ist nicht vorhanden, wird nach einer
Fehlerausschrift:
Write Error, Abort (Y/N):
der Fehler mit der Eingabe von N uebergangen und die Ausgabe
erfolgt auf dem Bildschirm. Bei der Eingabe von Y wird das momen
tan laufende Programm abgebrochen und der Monitor eingeschaltet.
Alle Dateien ausser .COM Dateien sind in ASCII-Code dargestellt.
1.4. Systemkomponenten
----------------------
Der Minimalmonitor verwaltet die einzelnen Systembestandteile
Editor
Assembler fuer verschiedene Prozessoren
Linker fuer Z80 und Z8 -Programme
Verschiebelader fuer U880-Rechner
Parser fuer Turbopascal
Diese Systemkomponenten koennen mit folgenden Kommandos
aufgerufen werden, nach dem auf dem Display das Menue zur Auswahl
erscheint. Eine falsche Angabe wird ignoriert, bei der Auswahl
eines Assemblers ist darauf zu achten, dass die Angabe ohne Typ
auf den U880 schaltet.
Edit Auswahl Editor
Assembler Auswahl Z80- Assembler
Assembler z8 Auswahl Z8- Assembler
Assembler z80 Auswahl Z80- Assembler
Assembler z86 Auswahl 8086- Assembler
Assembler z8000 Auswahl Z8000-Assembler
Assembler 86 Auswahl 8086- Assembler
Linker Auswahl Linker fuer Z80 und Z8
Shiftloader Auswahl Verschiebelader fuer Z80
Parser Auswahl TurboPascal Parser
Der erste Buchstabe des Aufrufes ist signifikant. Alle andern
Buchstaben duerfen entfallen. Ausser bei Z80-Assembler sind die
Ziffern vollstaendig einzugeben.
Fehler bei der Eingabe werden angezeigt, fehlende Ueberlagerungs-
programme fuehren ebenfalls zu Fehleranzeigen. Die Eingabe kann
dann richtig wiederholt werden.
Soll das Programmsystem verlassen werden, ist im Monitor nur
RETURN statt eines Kommandos zu geben. Das Betriebssystem wird
dann ueber einen Warmstart aktiv.
2. EDITOR
===========
2.1. Aufruf
-----------
Vom Monitor oder von jedem Assembler aus kann der Editor mit dem
Kommando
Edit
aufgerufen werden. Der erste Buchstabe ist signifikant.
Der Editor meldet sich und durchsucht zuerst den Speicher nach
einem Quellfile. Ist ein solches vorhanden, wird gefragt:
dateiname found in Buffer, accept? (Y/N):
dateiname ist der Name der gefundenen Quelldatei.
Bei der Antwort mit Y wird dieses File fuer gueltig erklaert, bei
N als Eingabe wird dieses File im Speicher geloescht und nach dem
Namen des Quellfiles gefragt:
Filename:
Hier ist ein Filename der Form
dev:name.erw
einzugeben. Die Angabe von CON: gestattet die direkte Eingabe
einer Quelle von der Tastatur aus. Sonst wird auf dem angegebenen
Laufwerk nach diesem Namen gesucht und eine Quelldatei in den
Arbeitsspeicher geladen. Existiert eine solche Datei nicht, wird
der Inputmodus eingestellt und eine neue Quelldatei unter diesem
Namen kann eingegeben werden.
Ist eine einzugebende Quelldatei groesser, als der Speicherplatz
dies zulaesst, wird die Fehlermitteilung
*** MAX ***
ausgegeben und die Eingabe abgebrochen. Die Datei kann trotzdem
in gekuerzter Form bearbeitet werden. Quellen sollen nie so lang
werden, denn die Bearbeitungszeit steigt dann wesentlich an.
2.2. Bedienung des Editors
--------------------------
Der Editor meldet sich mit seinem Systemzeichen
>
Danach befindet er sich im Kommandoeingabe-Modus. Ein Kommando
kann eingegeben und durch Parameter naeher spezifiziert werden.
Fehlen Parameter, wird fuer die Anzahl 1 und fuer Ketten die
Nullkette gesetzt. Ist der letzte Parameter ein Dezimalwert, so
bezieht er sich auf die Anzahl, die Nummer der Zeile o.ae. Bei
Angabe eines * (Sternchen) ist fuer diesen der Dezimalwert 65535
gesetzt. Fehlt ein Kommando vollstaendig (nur ET1 druecken), so
wird das letzte Kommando vollstaendig mit allen Parametern
wiederholt. Dies gilt nicht fuer Macro-Kommandos.
Alle Antworten auf eine Kommandoeingabe erfolgen ueber den
Bildschirm. Die Ausgabe einer Quellzeile erfolgt mit einer
vorangestellten 5 stelligen Zeilennummer, die dynamisch verwaltet
wird.
2.3. EDIT-Kommandos
-------------------
Ein Kommando ist durch seinen ersten Buchstaben gekennzeichnet.
Weitere Buchstaben sind unwirksam. Das erste Leerzeichen, Stern
oder die erste Ziffer oder ein Escape zeigen den Beginn eines
Parameters an. In der folgenden Beschreibung ist das Escape aus
drucktechnischen Gruenden durch ^[ dargestellt, n ist eine Dezi
malzahl.
A n ASSEMBLER
Der Editor wird verlassen und der Assembler aufgerufen. n ist in
diesem Fall die genauere Auswahl des Assemblers. Fehlt n, wird
der Z80-Assembler aufgerufen. Die Quelldatei bleibt im Speicher
erhalten.
n = 8 Z8- Assembler
n = 80 Z80- Assembler
n = 8000 Z8000-Assembler
n = 86 8086- Assembler
B BOTTOM
Der Zeilenzeiger wird auf die letzte Zeile der Quelldatei gesetzt
und diese Zeile auf der Konsole ausgegeben.
C^[kette1^[kette2^[n CHANGE
Ab der aktuellen Zeile wird auf n Zeilen, die die Kette kette1
enthalten, diese durch die Kette kette2 ersetzt. Entfaellt n, ist
das Kommando nur fuer die erste Zeile wirksam, die die Kette
kette1 enthaelt. Fehlt kette2, so wird kette1 geloescht. Ist
kette1 in einer Zeile nicht enthalten, wird diese Zeile nicht
veraendert. Steht * fuer n, wird das Auswechseln fuer die gesamte
restliche Datei vorgenommen.
Dn DELETE
D^[kette
Ab der aktuellen Zeile werden n Zeilen geloescht bzw. ab der
Zeile bis zu der Zeile, die die angegebene Kette kette enthaelt,
werden alle Zeilen geloescht. Diese letzte Zeile mit der ge
suchten Kette wird nicht geloescht.
Wird dieses Kommando vor der ersten Zeile (vor dem Dateianfang)
gegeben, ist es wirkungslos.
E dev:name.erw EXIT
Die generierte Quelldatei wird unter dem angegebenen Namen auf
das angegebene Laufwerk ausgegeben. Fehlt .erw, ist die
Erweiterung standardmaessig .ASM. Eine evtl. vorhandene Datei
dev:name.$$$ wird vorher geloescht, falls dies gewuenscht wird.
Die neue Quelldatei wird mit der Erweiterung .$$$ erzeugt. Es
folgt eine Kontrolle auf richtige Uebertragung und dann die
Umbenennung von .ASM in .BAK fuer die alte Quelldatei und von
.$$$ in .ASM fuer die neue Quelldatei.
Wird kein Dateiname angegeben, so ist der beim Aufruf des Editors
angegebene Name gueltig.
Nach diesem Kommando wird der Editor verlassen und der Monitor
aktiv.
F^[kette FIND
In der Datei wird ab der naechsten Zeile nach der aktuellen Zeile
nach einer Zeile gesucht, die die angegebene Kette enthaelt und
diese Zeile angezeigt. Die Datei wird bis zum Ende durchsucht,
falls die Kette nicht gefunden wird.
Gn GO
G^[kette
Es wird der Zeilenzeiger auf die n. Zeile bzw. auf die Zeile mit
der angegebenen Kette gesetzt und diese Zeile angezeigt. Die
Suche erfolgt vom Dateianfang an.
I
Input-Modus. Hier kann eine Datei aufgebaut werden. Nach der
J@usgabe der aktuellen Zeilennummer kann eine satzweise Eingabe
von Quellzeilen erfolgen. Es werden alle ASCII-Zeichen
akzeptiert. Zweimalige Eingabe von ET1 (RETURN) beendet den
Inputmodus. Alle eingegebenen Zeichen werden nach der aktuellen
Zeile eingefuegt, die gerade einzugebende Zeile wird dann die
aktuelle Zeile. Zeilen nach dieser Einfuegung bleiben erhalten.
I kette INSERT
Der Abschluss des I-Kommandos mit einem Leerschritt gestattet die
Einfuegung einer Zeile nach der aktuellen Zeile. Alle Zeichen
nach diesem 1. Leerschritt werden bis zum abschliessenden ET1
eingefuegt.
K KURSOR
Die aktuelle Zeile wird angezeigt und der Kursor auf das erste
Zeichen dieser Zeile gesetzt. Nun kann mit den Kursorsteuertasten
der Kursor beliebig bewegt werden. An beliebiger Stelle koennen
dann Zeichen eingefuegt (einfach eintippen) oder geloescht
werden. Mit der Angabe von ^D wird das Zeichen, unter dem der
Kursor steht, geloescht.
^Q beendet dieses Kommando, ohne die angezeigte Zeile im Speicher
zu veraendern.
Ein RETURN speichert die veraenderte Zeile. Ebenso wirken die
Kursortasten -Kursor hoch, -Kursor runter.
Ein TAB in der Zeile wird als Leerzeichen dargestellt.
Ln LADE
Ab der aktuellen Zeile werden aus einer externen Datei n Zeilen
in die Quelldatei eingefuegt. Alle L-Kommandos laden stets ab der
ersten Zeile der externen Datei. Nach dem Dateinamen wird
gefragt. Er muss eingegeben werden. Die Namenserweiterung ist
standardmaessig .$$$. Alle logische Eingabegeraete sind als dev:
zulaessig.
M&>kom1&>kom2&>...&>komi MACRO
Die Kommandos kom1 bis komi werden gekettet und spaeter mit dem
Kommando Xecute nacheinander ausgefuehrt. Es sind alle Kommandos
ausser dem MACRO-Kommando selbst zulaessig.
N^[kette NEXT
Nn
Der Zeilenzeiger wird um n Zeilen weiter in Richtung Dateiende
bzw. bis zur Kette verschoben und diese Zeile angezeigt.
O^[kette OUTPUT
On
Ausgabe von n Zeilen bzw. bis zu der Zeile mit der angegebenen
Kette ab der aktuellen Zeile auf eine externe Datei. Nach dem
Namen dieser Datei wird gefragt. Die Namenserweiterung ist
standardmaessig .$$$. Es ist jedes logische Geraet angebbar.
L- und O-Kommandos dienen der kurzfristigen Auslagerung einzelner
Quellzeilen. Sie eroeffnen eine Zwischendatei und nach dem Daten
transport wird diese Datei wieder geschlossen. Bei Anwendung des
O-Kommandos wird eine Datei unter diesem Namen vorher geloescht.
Pn PRINT
P^[kette
Ab der aktuellen Zeile werden n Zeilen auf der Konsole ausgege
ben. Bei der Angabe einer Kette sind alle Zeilen bis zu der
Zeile, die diese Kette enthaelt, auf der Konsole sichtbar. Das
Bild wird zeilenweise gerollt. Unterbrechungen der Ausgabe koen
nen durch Druecken von ^S unterbrochen werden (Halt) und nach
erneutem Betaetigen von ^S weiter ausgegeben werden. Ein ^C nach
einem Halt bricht das gesamte Programm SYS ab, das Betriebssystem
ist aktiv!
Q QUIT
Die Datei im Speicher wird nicht mehr veraendert und auch keine
Datei ausgegeben. Das Editieren ist beendet und der Monitor
wieder aktiv. Fuer eine Speicheruebersicht wird die Anzahl der
editierten Bytes angegeben.
R kette REPLACE
Die aktuelle Zeile wird durch die angegebene Kette ersetzt. Die
Kette muss vom Kommando durch genau ein Leerzeichen getrennt
sein. Alle ASCII-Zeichen wie bei Input sind bis zum abschliessen
den RETURN gueltig.
T TOP
Der Zeilenzeiger wird vor den Dateianfang gesetzt
Un UP
Der Zeilenzeiger wird um n Zeilen nach oben in Richtung Dateian
fang verschoben und diese Zeile angezeigt.
X XECUTE
Ausfuehrung der mit dem MACRO-Kommando eingegebenen Kommandos in
der Reihenfolge, wie dort angegeben.
2.4. Fehler
-----------
Alle Fehler, die waehrend der Editierung auftreten, sind auf der
Konsole im Klartext dargestellt. Dabei bedeuten:
*** ???***
es wurde ein falsches Kommando oder eine falscher Parameter
gegeben
***MAX***
Das Speicherende ist erreicht, weitere Eingaben sind
fehlerhaft.
3. ASSEMBLER Z80
==================
3.1. Einleitung
---------------
Der Assembler gestattet es, die Mnemoniks von robotron oder ZILOG
zu verwenden. Bei genuegend kleinen Quellen bleibt die Quelldatei
im Speicher und es sind sehr kurze Bearbeitungszeiten zur
Fehlerkorrektur moeglich.
Zum vollstaendigen Ablauf der Assemblierung gehoeren 2 Laeufe. Im
ersten Pass wird ein Adressbuch angelegt und im 2. Pass der
Objektcode erzeugt, ein Listing ausgegeben und weitere
Informationen mitgeteilt. Die Beendigung des 1. Passes wird durch
eine Ausschrift mitgeteilt. Die Uebersetzung wird bei Auftreten
von Fehlern nicht abgebrochen, sondern weiter versucht und alle
Fehler werden auf der Konsole angezeigt.
3.2. Aufruf des Assemblers
--------------------------
Der Assembler wird vom Monitor oder vom Editor mit dem Kommando
Assembler z80
aufgerufen. Der erste Buchstabe ist fuer den Aufruf signifikant,
weitere Angaben brauchen nicht gemacht werden.
Der Assembler meldet sich und erwartet die Eingabe von Optionen.
Ist im Speicher bereits eine Quelldatei vorhanden, wird sie
verwendet. Andernfalls wird nach dem Namen der Quelldatei gefragt
und diese geladen, wenn nicht die Option L verwendet wird.
3.3. Optionen
-------------
Optionen sind durch Kommata getrennte Angaben zur naeheren
Bestimmung des Uebersetzungslaufes. Abschluss der Kommandozeile
ist ET1. Die Uebersetzung wird nach ET1 sofort begonnen. Wird
kein Kommando eingegeben, setzt das System einen Standard:
-absolut assemblieren
-keine Objekt-, Link- oder MAP-Datei erzeugen
-keine Listdatei erzeugen
-Fehler ueber Konsole ausgeben
-Die Quelle hat im Speicher vollstaendig Platz
Nach einem Uebersetzungslauf erscheint ebenfalls die Aufforderung
nach der Eingabe von Optionen und es koennen neue Optionen einge
geben werden. Bei einer Wiederholung des Uebersetzungslaufes wird
der erste Pass nicht nochmal abgearbeitet. Dadurch kann ein
Wechsel von relativer zu absoluter Uebersetzung und umgekehrt
nicht erfolgen.
Die Optionen koennen sein:
E Editor. Der Editor wird geladen. Falls die Quelle im
Speicher steht, wird sie beibehalten.
H Header, es wird die Kopfzeile mit dieser Angabe
ergaenzt. Maximal 68 Zeichen moeglich. Diese Angabe
wird jedoch durch die Assembleranweisungen *H oder
TITLE ueberschrieben.
L Long, die Quelldatei wird von Diskette gelesen und darf
deshalb beliebig lang sein. Eine Quelldatei im Speicher
muss vorher gerettet werden, deshalb wird der Editor
nachgeladen und die Ausgabe vor der Assemblierung ver
langt.
M Macros sind erlaubt. Je Angabe von M (auch mehrfach
moeglich) werden im RAM 400H Bytes (1k Byte) fuer die
Macros reserviert. Macros sollten ohne Kommentar
geschrieben werden, da dieser ebenfalls gespeichert
wird.
O Ausgabe des Objektcodes. Spaeter wird nach dem File
namen fuer den Objektcode gefragt.
P Ausgabe des Listings
Q Rueckkehr in den Monitor
R relative Uebersetzung
S Ausgabe der Symboltabelle
Y Ausgabe der Markendatei.
Die Uebersetzung erfolgt absolut, falls nicht die Option R gege
ben wurde.
Die Option Y muss nach! einem vorherigen 1. Pass gegeben werden,
sonst ist sie wirkungslos.
Bei den Optionen O, S, P und Y wird nach einem Dateinamen
gefragt, ebenso, wenn die Quelle noch nicht im Speicher steht.
Die Fragen sind mit der Namensangabe
dev:name.erw
zu beantworten. Siehe auch Angaben im Kapitel 1.
Bei den Optionen S und Y wird nach der Abarbeitung des Passes 2
der Pass 2 nicht nochmals wiederholt, sondern sofort die
gewuenschte Liste erzeugt.
3.4. Assemblersprache
---------------------
Die vom Assembler akzeptierten Mnemoniks sind im Anhang angege
ben. Die Uebersetzung erfolgt fuer beide Sprachen.
3.4.1. Zeichenvorrat
--------------------
Buchstaben sind die Zeichen des Alphabets:
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T,
U, V, W, X, Y, Z,
a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t,
u, v, w, x, y, z
Ausser in Zeichenketten wird nicht zwischen Gross- und
Kleinschreibung unterschieden.
Die Ausgabe des Listings erfolgt ausser in Zeichenketten nur in
Grossbuchstaben.
Ziffern sind die Dezimalziffern:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0
und bei hexadezimaler Schreibweise die Buchstaben A, B, C,
D, E und F.
Trennzeichen dienen der Trennung von Bezeichnungen und Ausdruek-
ken und bestehen aus den Zeichen
SP Space, Leerschritt
HT Horizontaltabulator
sie koennen in beliebiger Menge stehen.
Endezeichen dienen der Beendigung des signifikanten Teils einer
Quellzeile:
; Semikolon, es kann ein Kommentar folgen
CR ET1, RETURN, Ende einer Zeile
Sonderzeichen werden in Ausdruecken verwendet:
&> logisches Und
( Klammer auf
) Klammer zu, paarweise verwenden!
* Multiplikationszeichen
/ Divisionszeichen
# Doppelkreuz und
$ Dollar fuer den aktuellen Befehlszaehlerstand
. Punkt zur Kennzeichnung logischer Operationen
+ Pluszeichen
- Minuszeichen
, Komma, Trennzeichen zwischen Registern, Listentrenn
zeichen
: Doppelpunkt, wahlweiser Markenbegrenzer
Begrenzer, werden je nach Notwendigkeit benutzt:
: , . ) SP HT ;
Alle anderen druckbaren Zeichen aus dem ASCII-Vorrat koennen in
Zeichenketten Verwendung finden. VT (Vertikaltabulation) und FF
(Blattwechsel) sind verboten.
3.4.2. Format des Quellcodes
----------------------------
Jede Anweisung wird auf einer Zeile geschrieben. Ist das erste
Zeichen einer Zeile ein Endezeichen, wird diese Zeile nicht
assembliert. Ist das erste Zeichen ein *, so ist ein
Sofortkommando auszufuehren. Alle anderen Anweisungen erfolgen
nach dem Schema:
MARKE[:] OPCODE AUSDRUCK
Wird keine Marke angegeben, muss die Zeile mit mindestens einem
Trennzeichen beginnen.
Zwischen MARKE und OPCODE muss entweder mindestens ein
Trennzeichen oder der Doppelpunkt stehen, falls kein Endezeichen
die Zeile abschliesst. Eine Marke muss nicht ab der ersten
Position beginnen, wenn sie mit einem Doppelpunkt abgeschlossen
wird.
3.4.3. Symbole und Marken
-------------------------
Eine Marke dient der Markierung einzelner Anweisungen, wobei ihr
Wert der Befehlszaehlerstand des ersten Bytes dieser Anweisung
ist. Marken koennen maximal aus 6 Alfazeichen bestehen, das erste
Zeichen muss ein Buchstabe sein. Innerhalb einer Marke duerfen
einige Sonderzeichen stehen:
$ ? = _ (Unterstreichung)
Die Marke wird durch ein Trennzeichen oder den Doppelpunkt oder
ein Endezeichen abgeschlossen. Mehr als 6 Zeichen werden
ueberlesen.
Ein Symbol ist eine Marke, deren aktueller Wert in einem Ausdruck
verwendet wird. Hier sind die Registernamen nicht gestattet!
3.4.4. Numerische Konstante
---------------------------
Numerische Konstante sind Zahlen, die in Ausdruecken Verwendung
finden. Es gibt verschiedene Darstellungen:
0101101B
---binaere Darstellung
Verwendung finden die Ziffern 0 und 1. Die Binaerzahl muss
mit dem Buchstaben B abgeschlossen sein.
7213O oder 72130Q
---oktale Darstellung
Verwendung finden die Ziffern 0 bis 7. Die Oktalzahl muss
mit dem Buchstaben O oder Q abgeschlossen sein.
1250 oder 1250D
---dezimale Darstellung
Verwendung finden die Ziffern 0 bis 9. Die Dezimalzahl kann
mit dem Buchstaben D abgeschlossen werden.
0FF5CH
---hexadezimale Darstellung
Verwendung finden die Ziffern 0 bis 9 und die Buchstaben A
bis F fuer die Pseudodezimalen 10 - 15. Eine Hexadezimal
zahl muss mit dem Buchstaben H abgeschlossen sein und mit
einer Ziffer beginnen (Null evtl. voranstellen).
Der Zahlenbereich ist
vorzeichenloses Byte 0 bis 0FFH
Byte mit Vorzeichen -7FH bis +7FH
Wort 0 bis 0FFFFH
3.4.5. Ketten und Kettenkonstante
---------------------------------
Ketten sind eine Folge von beliebigen druckbaren ASCII-Zeichen.
Die Zeichen werden in Hochkomma eingeschlossen, das Hochkomma
selbst muss doppelt angegeben werden, um es einmal darzustellen.
In Ketten sind CR, LF, VT und FF nicht erlaubt. Die Abspeicherung
erfolgt im Programm von links nach rechts, jedes Zeichen belegt
ein Byte.
Kettenkonstante sind Ketten mit einem oder zwei Zeichen, deren
ASCII-Wert interpretiert wird und als Zahl in einem Ausdruck
Verwendung findet.
3.4.6. Befehlszaehler
---------------------
In einem Ausdruck kann der Befehlszaehlerstand als ein 16-Bit-
Wert Verwendung finden. Zur Kennzeichnung werden die Zeichen $
oder # verwendet. Ein solches Zeichen in einem Ausdruck
repraesentiert damit die 16 Bit des Befehlszaehlers zu diesem
Zeitpunkt. Der Typ dieses Wertes ist relativ.
3.4.7. Kommentar
----------------
In jeder Zeile kann ein Kommentar angegeben werden. Er ist
gekennzeichnet durch ein beginnendes Semikolon und endet mit
einem ET1. Kommentare sind bei der Uebersetzung wirkungslos.
3.4.8. Sofortbefehle
--------------------
Folgende Sofortkommandos sind implementiert, die bei einem
Auftreten im Programm sofort ausgefuehrt werden:
*Eject Blattwechsel im Listing
*Head txt Erzeugen eines Kopftextes auf Zeile 1 des Listings. Es
werden bis 64 Zeichen akzeptiert. Ausserdem wird ein
Blattwechsel ausgefuehrt.
*LISTOFF Die Listing-Ausgabe wird unterdrueckt
*LISTON Die Listing-Ausgabe wird weitergefuehrt. Beide Kommandos
sind auszuschreiben!
*INCLUDE name Die mit name bezeichnete Datei wird an dieser
Stelle in den Quellcode zusaetzlich in voller Laenge
eingefuegt und mit uebersetzt. name ist ein nach den
oben angegebenen Regeln konstruierter Dateiname (mit
d:name.erw, wobei die Angabe von name unbedingt erfor
derlich ist).
*PRINTX text Der angegebene Text wird auf dem Bildschirm
angezeigt. Die Ausgabe erfolgt sowohl bei Pass1 als
auch bei Pass2.
Sofortkommandos beginnen mit einem * und sind mit dem ersten
Buchstaben signifikant ausser LISTON und LISTOFF
3.5. Ausdruecke
---------------
Ausdruecke sind beliebige, mit arithmetischen oder logischen
Operationen verknuepfte Konstante, Symbole oder Variable sowie
Registernamen.
3.5.1. Register
---------------
Als Operanden koennen die Register der CPU 880 sowohl als Einzel-
wie auch als Doppelregister verwendet werden.
Einzelregister sind:
A, B, C, D, E, H, L, I, R und die Teile der Indexregister
LX, LY fuer den LOW-Teil und
HX, HY fuer den HIGH-Teil
Doppelregister sind:
AF, BC, DE, HL, SP, IX, IY und
PC (dargestellt durch die Zeichen # oder $)
3.5.2. Variable
---------------
Variable sind Werte, die sich auf RAM-Plaetzen befinden und 8
oder 16 Bit lang sein koennen. Bei 16 Bit langen Variablen
befinden sich auf dem addressierten Speicherplatz die unteren 8
Bit und auf dem folgenden Speicherplatz die oberen 8 Bit.
Variable werden in einem Ausdruck durch ein Symbol beschrieben.
3.5.3. Operationszeichen
------------------------
Folgende Operationszeichen koennen verwendet werden:
Rang Zeichen Wirkung
1 .LOW. nur die niederen 8 Bit eines Wortes
1 .HGH. nur die oberen 8 Bit eines Wortes, als untere 8
Bit interpretiert
1 .SHL. Verschiebung des links vom Operationszeichen
stehenden Ausdruckes um soviel Stellen nach links,
wie der rechts stehende Ausdruck angibt
1 .SHR. wie vor, jedoch Verschiebung nach rechts
2 * Multiplikation 16 Bit ohne Beruecksichtigung des
Ueberlaufes
2 / Division 16 Bit ganzzahlig ohne Runden
2 .MOD. Rest einer ganzzahligen Division
3 + Addition 16 Bit ohne Ueberlauf
3 - Subtraktion 16 Bit ohne Ueberlauf
4 .NOT. Negation 16 Bit des folgenden Ausdruckes
5 .AND. logische Konjunktion 16 Bit
6 .XOR. logische Inhibition 16 Bit
7 .OR. logische Disjunktion 16 Bit
Die Zeichen +, -, .NOT., .LOW. und .HGH. koennen allein vor einem
Ausdruck stehen, alle anderen Operationszeichen muessen zwischen
zwei Operanden stehen.
3.5.4. Bildung eines Ausdruckes
-------------------------------
Ein Ausdruck wird durch die Verknuepfung von Zahlen, Variablen,
numerischen- und Kettenkonstanten gebildet. Die Verknuepfung
mittels Operationszeichen wird innerhalb des gleichen Ranges von
links nach rechts ausgefuehrt, sonst die Operationen mit dem
hoechsten Rang zuerst. Runde Klammern, die stets paarweise stehen
muessen, durchbrechen diese Reihenfolge. Ein geklammerter
Ausdruck wird wie ein Operand verwendet. Die Klammertiefe ist
nicht unbegrenzt, ein entsprechender Fehler wird angezeigt.
Ein Ausdruck besitzt nach seiner Bildung einen 16 Bit langen
Wert, die vorderen Bits evtl. mit Null aufgefuellt. Negative
Werte werden im Zweierkomplement dargestellt.
3.5.5. Type eines Ausdruckes
----------------------------
Ein Ausdruck kann sowohl absolut als auch relativ sein. Dies
haengt davon ab, ob in ihm programmrelative Werte vorhanden sind.
Der Typ des Ausdruckes wird im Listing mit dargestellt durch die
Zeichen:
R relativ
A absolut
E external
Bei der Berechnung des Ausdruckes wird eine Typueberwachung
durchgefuehrt und Verknuepfungen zwischen nicht zulaessigen Typen
verhindert. Die Differenz zweier relativer Werte ergibt dabei
einen absoluten Wert!
3.5.6. Externe Symbole
----------------------
Sind bestimmte Symbole in einem Programm noch nicht bekannt und
koennen diese nur von anderen Programmen bestimmt werden, so sind
diese Symbole mit der Pseudoanweisung EXTERNAL zu deklarieren.
3.6. Pseudooperationen
----------------------
Zur Steuerung des Uebersetzungslaufes werden bestimmte Operatio
nen benoetigt, die nicht zum Befehlssatz der CPU gehoeren. Diese
Pseudooperationen werden nachfolgend erlaeutert:
DW ausdruck
DEFW ausdruck
DA ausdruck
Das den Wert des Ausdruckes repraesentierende Wort wird gespei
chert.
DB ausdruck,ausdruck,...
DEFB ausdruck,ausdruck,...
Die Folge von durch Kommata getrennten Ausdruecken wird als Byte
erwartet und abgespeichert. Die Anzahl der Ausdruecke ist auf
Zeilenlaenge beschraenkt (max 64).
DB 'text'
DEFM 'text'
Diese Anweisung erzeugt beliebigen Text im ASCII-Code. Der Text
muss als Zeichenkette angegeben werden, deren Laenge 64 Zeichen
nicht uebersteigen darf.
DEFT 'text'
Diese Anweisung wirkt die DEFM, jedoch wird die Laenge des Textes
als erstes Byte ausgegeben.
BER Ausdruck
DEFS Ausdruck
Diese Anweisung reserviert innerhalb des Programmes Speicher
plaetze, deren Anzahl durch den Wert des Ausdruckes bestimmt
wird. Dieser Wert muss bereits im ersten Pass vorher bekannt
sein. Im Programm haben diese Speicherplaetze einen undefinierten
Inhalt.
name DEF ausdruck
name DEFL ausdruck
Der Wert des Ausdruckes wird einmalig! dem Symbol name
zugewiesen. Fehlt name, entsteht ein Fehler wie auch bei einer
nochmaligen Verwendung des Namen als Marke an einer anderen
Stelle.
PN text
NAME text
Es werden maximal 6 Zeichen als Programmname akzeptiert.
EJEC
EJECT
Innerhalb des Listings wird ein Blattwechsel ausgefuehrt
END Ausdruck
Mit dieser Anweisung wird das Programm beendet, weitere Zeilen
werden nicht mehr gelesen. Der Wert des Ausdruckes wird bei
absoluter Assemblierung im Endeblock des Intel-Hex-Codes als
Einsprungadresse angegeben. Der Ausdruck muss deshalb auf eine
Marke fuer den Programmstart hinweisen. Fehlt der Ausdruck, ist
dieser Wert Null.
IF Ausdruck
COND Ausdruck
Wenn der Wert des Ausdruckes Null ist, wird die Assemblierung bis
zum Auftreten der Anweisung ENIF unterbrochen (die entsprechenden
Zeilen werden ueberlesen).
ENIF
ENDIF
ENDC
Ende der bedingten Assemblierung.
IF1
Die Bedingung ist wahr, wenn der Pass 1 abgearbeitet wird
IF2
Die Bedingung ist wahr, wenn der Pass 2 abgearbeitet wird
ELSE
Die mit IF, IF1 oder IF2 gestellte Bedingung wird umgekehrt
Alle IF-Anweisungen duerfen bis 16-fach geschachtelt werden.
LISTOFF
Das Listing wird ab hier unterdrueckt
NLIST ausdruck
Ist der Wert des Ausdruckes Null oder fehlt er, wird das Listing
ab diesem Zeitpunkt unterdrueckt.
LIST ausdruck
LISTON ausdruck
Ist der Wert des Ausdruckes Null oder fehlt er, so wird das
Listing ab diesem Zeitpunkt nach einem Ausschalten des Listings
weitergefuehrt, sonst ist die Anweisung wirkungslos.
PRINTX text
Der angegebene Text wird auf dem Bildschirm angezeigt. Zur
Unterscheidung zwischen Pass1 und Pass2 koennen die bedingten
Anweisungen IF1 und IF2 verwendet werden.
ORG Ausdruck
Dem Befehlszaehler wird der Wert des Ausdruckes zugewiesen.
Dieser Wert muss bereits im ersten Pass vorher bekannt sein. Bei
relativer Assemblierung sollte diese Anweisung nicht verwendet
werden.
EXTE Liste
EXTERNAL Liste
Liste ist eine Aufzaehlung von Markennamen, durch Komma getrennt.
Diese Marken werden in die Markenliste aufgenommen und mit dem
Wert Null belegt. Sie koennen erst beim Linken mit einem Wert
belegt werden. Ihr Typ ist E (External). Wird eine Marke
angegeben, die bereits im Programm enthalten ist, wird Fehler
angezeigt und diese Marke nicht nochmals aufgenommen.
GLOB Liste
GLOBAL Liste
Liste ist eine Aufzaehlung von Markennamen, durch Komma getrennt.
Diese Anweisung zeigt anderen Programmen die Adressen von Marken,
die in diesem Programm definiert sind. Die Marken werden gesam
melt und stehen dann dem Linker zur Verfuegung. Ist eine Marke
angegeben, die nicht im Programm enthalten ist, wird Fehler
angezeigt.
name EQU ausdruck
Der Wert des Ausdrucks ausdruck wird der Marke name zugewiesen
und bleibt bis zu einer evtl. neuen Wertzuweisung erhalten.
TITL text
TITLE text
Diese Pseudoanweisung wirkt wie das Sofortkommando *H text (siehe
dort).
name MACR dummylist
Vereinbarung eines Makrokoerpers mit Parametern (dummy) unter dem
Namen name. Die Parameter duerfen entfallen, mehrere Parameter
werden durch Komma getrennt.
ENDM
Abschluss einer Makrovereinbarung
Makros siehe Kapitel 7 mit genauer Beschreibung
3.7. Fehlermitteilungen
-----------------------
Entsteht waehrend der Assemblierung ein Fehler auf einem externen
Geraet, wird die Assemblierung abgebrochen oder die Ausgabe auf
Display versucht. Alle anderen Fehler werden auf der Konsole
angezeigt mit der Ausgabe der fehlerhaften Zeile und einem
vorangestellten Buchsteben, der auf den Fehler hinweist.
Buchst. Art des Fehlers
A Ueberlauf des Makropuffers *Abort
B Ungueltiger Operator
C nicht verschiebbarer Ausdruck
D falsches Zeichen in einer Zahl (Digit)
E externes Symbol in einem Ausdruck
F Symboltabelle voll *Abort
G INCLUDE ist geschachtelt
H unzulaessiger Typ des Operanden
I Unzulaessiger Operand
J Unzulaessiger Begrenzer
K Sprungweite zu gross bei relativen Spruengen
L Unzulaessige Markenkonstruktion
M mehrfach definiertes Symbol
N Marke erforderlich bei DEFL, EQU
O ungueltiger Operationscode (Mnemonik)
Q Hochkommas oder IF-ENDIF nicht geradzahlig
R Zahlenbereichsfehler
S Syntaxfehler allgemein
T Eingabezeile zu lang, abgeschnitten
U Undefiniertes Symbol
V Ausdruck ausserhalb des darstellbaren Bereiches
W MACRO vorhanden und nicht erlaubt *Abort
X Symboltabellen Fehler *Abort
Y Undefinierte Bedingung
Die mit *Abort gekennzeichneten Fehler fuehren zum Abbruch der
Uebersetzung und zur Rueckkehr in den Monitor.
3.8. Protokoll des Assemblers
-----------------------------
Das Listing ist ein Protokoll des Assemblierungsvorganges. Es
wird formatiert ausgegeben in der folgenden Form:
Erste Zeile mit Modulnamen und Anwendertext aus *H oder TITLE
Kopfzeile mit einer Ueberschriftenzeile und in der 3. Zeile der
Dateiname und das Datum, falls es vorher im Betriebssystem
vereinbart wurde.
Nach einer Leerzeile beginnt der Assemblertext. Es wird je Zersetzung und zur Rueckkehr in den Monitor.
3.8. Protokoll des Assemblers
-----------------------------
Das Listing ist ein Protokoll des Assemblierungsvorganges. Es
wird formatiert ausgegeben in der folgenden Form:
Erste Zeile mit Modulnamen und Anwendertext aus *H oder TITLE
Kopfzeile mit einer Ueberschriftenzeile und in der 3. Zeile der
Dateiname und das Datum, falls es vorher im Betriebssystem
vereinbart wurde.
Nach einer Leerzeile beginnt der Assemblertext. Es wird je Zeile
der aktuelle Befehlszaehlerstand und der uebersetzte Objektcode
ausgegeben. Danach erfolgt die Darstellung des Quelltextes in
Grossbuchstaben. Zur Darstellung des Types eines Ausdruckes wird
noch ein Buchstabe vor dem Opcode ausgegeben.
Fehler werden in der ersten Spalte durch den Fehlerbuchstaben
angezeigt. Je Seite werden 72 Druckzeilen ausgegeben, Blatt
wechsel erfolgt automatisch einschl. der Seitenzaehlung.
3.9. Objektkode
---------------
Der Objektkode wird im Intel-Hex-Code ausgegeben, der bei
relativer Assemblierung noch modifiziert wird. Um Kompatibilitaet
zu erreichen, werden alle Sonderausgaben mit $ statt : markiert.
Am Anfang wird der Modulname mit KZ 5 ausgegeben.
Danach folgen die globalen Marken mit KZ 2.
Der folgende Programmtext wird normal ausgegeben. Je nach
Erfordernis wird bei relativer Assemblierung noch eine Liste der
relativen Adressen und bei Auftreten einer externen Marke deren
Name und die Adresse ihres Auftretens mit KZ 4 bzw. 3 ausgegeben.
Der Intel-Endeblock (KZ 1) beschliesst die Ausgabe.
Bei relativer und absoluter Assemblierung sind die Daten ohne
weiteres mit DDT oder LOAD lesbar, die Sonderausgaben werden dort
ueberlesen. Deshalb brauchen absolut assemblierte Programme nicht
gelinkt zu werden, sie koennen sofort mit DDT oder LOAD geladen
werden.
3.10. Symboltabelle
-------------------
Die Symboltabelle wird auf dem mit LIST gewaehlten Geraet
ausgegeben. Die Ausgabe erfolgt 4 spaltig mit Name der Marke,
deren Typ und deren Adresse.
3.11 Symboldatei
----------------
Fuer die Testung des Programmes mit dem symbolischen Debugger SDT
kann eine Liste aller Marken mit deren Adresse ausgegeben werden.
Die Ausgabe erfolgt nach der Abarbeitung des 2. Passes bei einer
anschliessenden Eingabe der Option Y. Der Dateiname wird abge-
fragt. Es muss fuer SDT der gleiche Name wie das Objektprogramm
gewaehlt werden.