;
72
.mt 8
.mb 8
.pc 32
.fm 1
.hm 1
.pn 55
Bevor mit dem Assembler gearbeitet werden kann, muss die
Diskette mit dem Programm ASM.COM in das zu verwendende Lauf-
werk eingelegt werden.
Die Diskette, auf der sich die Quelldatei befindet, muss eben-
falls in einem Laufwerk liegen.
9.5.1___Aufrufen_des_Assemblers
Der Assembler wird aufgerufen durch die Eingabe von:
ASM
Die Programmdatei ASM.COM wird geladen. Der Assembler gibt
einen Stern (*) aus und zeigt damit an, dass er bereit ist,
eine Kommandozeile entgegenzunehmen.
9.5.2.___Die_Kommandozeile_des_Assemblers
Die Kommandozeile des Assemblers setzt sich aus 4 Feldern zu-
sammen:
[Object][,[List]]=Source[/Switch]
Die Kommandozeile kann als eigene Zeile geschrieben werden
oder auf dieselbe Zeile wie das ASM-Kommando.
(Wenn Kommandozeile und ASM-Kommando auf derselben Zeile ste-
hen, kehrt der Assembler nicht mit * zurueck, sondern gibt die
Steuerung nach Beenden an das Betriebssystem.)
Bei getrennter Eingabe von ASM und Kommandozeile besteht zu-
saetzlich die Moeglichkeit, eine weitere Uebersetzung auszu-
fuehren, ohne dass der Assembler wieder aufgerufen wird. Wenn
die Uebersetzung beendet ist, meldet sich der Assembler dann
sofort mit einem * und wartet auf eine neue Kommandozeile. Der
Assembler wird in diesem Fall durch Druecken von ^C beendet.
Wenn nur ein Programm uebersetzt werden soll, ist es bequemer,
das ASM-Kommando und die Kommandozeile auf dieselbe Zeile zu
schreiben; es erfordert weniger Eingaben und bietet die Moeg-
lichkeit, die Assembler-Operation einem SUBM-Kommando mitzu-
teilen.
Wenn das ASM-Kommando und die Kommandozeile zusammenstehen,
kehrt der Assembler automatisch nach Abschluss zum Betriebs-
system zurueck.
Bemerkung:
Wenn die Kommandozeile eine vom ASM-Kommando separate Zeile
ist, kann die Kommandozeile nur in Grossbuchstaben eingegeben
werden! Wird anders gearbeitet, erscheint die Meldung "?Com-
mand Error". Wenn das ASM-Kommando und die Kommandozeile eine
Zeile bilden, koennen die Eingaben in grossen oder kleinen
Buchstaben oder gemischt gemacht werden. Das Betriebssystem
wandelt vor der Uebergabe alle Eingaben in grosse Buchstaben .
9.5.2.1._Source_(=dateiname)
Um ein Quellprogramm zu uebersetzen, muss wenigstens ein
Gleichheitszeichen (=) und der Quelldateiname eingegeben wer-
den.
Das "=dateiname" zeigt an, welche Quelldatei zu uebersetzen
ist. Wenn die Diskette mit der Quelldatei nicht im aktuell
zugewiesenen Laufwerk liegt, muss die Laufwerksauswahl als
Teil von dateiname mit spezifiziert werden.
Enthaelt der Dateiname keinen Dateityp, nimmt der Assembler
an, dass er .MAC ist. Ist er nicht .MAC, muss er als Teil von
dateiname unbedingt angegeben werden.
Ueber andere Moeglichkeiten der Zuweisung von Geraet und Da-
teityp siehe Pkt. 9.5.2.6.
Die Eintragung source ist die einzige, die fuer ASM unbedingt
erforderlich ist.
Das einfachste Kommando lautet:
ASM =source
Dieses Kommando veranlasst den Assembler, die Quelldatei zu
uebersetzen und das Ergebnis in einer verschieblichen Ob-
jectcodedatei (genannt .REL-datei) mit demselben Namen wie die
Quelldatei abzulegen.
Beispiel:
Die Quelldatei soll PROG.MAC heissen, dann lautet die
Kommandozeile
ASM =PROG
und es wird eine uebersetzte Datei mit dem Namen
PROG.REL
erzeugt.
Als zusaetzliche Option kann nur ein Komma (,) auf der linken
Seite des Gleichheitszeichens geschrieben werden. Dann werden
vom Assembler alle Ausgabedateien (object und list) unter-
drueckt.
Die Kommandozeile
ASM ,=PROG
veranlasst den Assembler, die Datei PROG.MAC zu uebersetzen,
aber die erzeugten Dateien nicht auszugeben.
Die Programmierer verwenden diese Kommandozeile, um die Syntax
im Quellprogramm zu testen, bevor das Uebersetzungsergebnis
ausgegeben wird. Weil keine Dateien ausgegeben werden, ist der
Assembler rascher beendet, die Fehler eher bekannt.
9.5.2.2._Object_(dateiname)
Die Eintragung object ist immer optional.
Bestimmte Bedingungen zwingen dazu, object anzugeben.
Die Objectdatei schreibt das uebersetzte Programm in eine Dis-
kettendatei. Diese wird vom Programmverbinder zum Erzeugen
eines ausfuehrbaren Programms verwendet.
Wenn beide Eintragungen, object und list, in der Kommandozeile
weggelassen sind (wie bei =source), erzeugt der Assembler eine
Objectdatei mit dem gleichen Dateinamen wie die Quelldatei,
aber mit der Standarderweiterung .REL.
Wenn ein vom Quelldateinamen verschiedener Name gewuenscht
wird, muss dieser dateiname im Object-Feld eingetragen werden.
Der Assembler haengt dann den Dateityp .REL an, wenn
kein Dateityp eingetragen war.
Wenn beide Dateien - Objectcode und Druckdatei - gewuenscht
werden, muessen beide Felder - object und list - ausgefuellt
werden. Es wird nur eine Druckdatei erzeugt, wenn das Object-
Feld frei bleibt.
Diese Form verwendet der Programmierer zum Testen der Syntax.
Der Programmausdruck ist ausserdem eine Testhilfe.
Der Name fuer die Objektcodedatei kann jeder gueltige Dateina-
me sein. Es ist moeglich, einen anderen als den Quelldateina-
men zu waehlen, aber es hat sich als guenstig erwiesen, alle
Dateien, die zu einem Programm gehoeren, mit dem gleichen
Namen zu versehen.
9.5.2.3._List_(,dateiname)
Die Eintragung list ist immer optional. Das Komma vor der
list-Eintragung muss geschrieben werden.
Wird eine Druckdatei gewuenscht, muss ein Dateiname in das
list-Feld geschrieben werden (Eine Alternative zu dieser Regel
siehe Pkt. 9.5.2.4.).
Der Assembler haengt .PRN als Standarddateityp an, wenn keine
andere in der list-Eintragung angegeben wurde.
Die Kommandozeile
ASM ,PROG=PROG
uebersetzt die Datei PROG.MAC (Quelldatei) und erzeugt die
Druckdatei PROG.PRN. Eine Objectdatei wird nicht erzeugt.
Die Druckdatei kann denselben Namen wie die Quelldatei haben
oder jeden anderen gueltigen Dateinamen.
Wenn auf der linken Seite des Gleichheitszeichens nur ein
Komma und keine Dateinamen stehen, uebersetzt der Assembler
die Quelldatei, aber er erzeugt keine Ausgabedateien.
Dieses Kommando
ASM ,=PROG
erlaubt die Pruefung der Quelldatei auf Syntaxfehler, bevor
das uebersetzte Programm auf die Diskette geschrieben wird.
Waehrend der Assembler die Pruefung der Fehler immer
durchfuehrt, werden mit diesem Kommando keine Ausgabedateien
erzeugt und damit ist der Assemblerlauf um einiges schneller.
Wenn die Uebersetzung beendet ist, gibt der Assembler folgende
Meldung aus:
[xx][No] Fatal Errors [,xx warnings]
Diese Meldung zeigt die Anzahl der schwerwiegenden Fehler und
Warnungen, die im Programm aufgetreten sind, an.
Diese Meldung wird am Ende des Uebersetzungslaufes auf den
Bildschirm und auf die Druckdatei ausgegeben.
Wenn diese Meldung erscheint, ist der Assembler fertig.
Heisst die Meldung "No Fatal Errors", dann ist die Ueberset-
zung vollstaendig und erfolgreich.
Beispiele:
ASM =TEST Uebersetzen der Quellcodedatei TEST.MAC
und Erzeugen der Objektcodedatei TEST.REL
ASM ,=TEST Uebersetzen der Quellcodedatei TEST.MAC,
ohne dass Ausgabedateien erzeugt werden.
ASM TEST,TEST=TEST Uebersetzen der Quellcodedatei TEST.MAC,
Erzeugen der Objectcode-Datei TEST.REL und
der Druckdatei TEST.PRN
ASM OBJECT=TEST Uebersetzen der Quellcodedatei und Erzeu-
gen der Objektcodedatei OBJECT.REL.
9.5.2.4._Schalter_(/switch)
Das Assembler-Kommando kann neben dem Uebersetzen und Erzeugen
von Object- und Druckdatei einige zusaetzliche Funktionen
ausfuehren.
Diese zusaetzlichen Kommandos werden an das Ende der Kommando-
zeile eingegeben.
Eine solche Eingabe veranlasst den Assembler eine zusaetz-
liche oder alternative Funktion "einzuschalten": Diese Einga-
ben werden Schalter genannt.
Schalter sind Buchstaben, vor denen ein Schraegstrich (/)
steht. Es kann jede beliebige Anzahl Schalter eingegeben wer-
den, aber vor jedem Schalter muss ein Schraegstrich stehen.
Beispiel:
ASM ,=PROG/L/R
Folgende Schalter des Assemblers sind moeglich:
Schalter Bedeutung
--------------------------------------------------------------
/O Der Assembler druckt die Adressen in der
Druckdatei oktal (zur Basis 8).
/P Jedes /P legt einen extra Stack von 256 Bytes
zur Verwendung waehrend der Uebersetzung an.
/P sollte dann verwendet werden, wenn waehrend
der Uebersetzung ein Stack-Ueberlauf-Fehler
aufgetreten ist. Sonst ist er nicht notwendig.
/R Erzwingt das Erzeugen einer Objektdatei mit dem
gleichen Namen wie die Quelldatei. Das kann an-
stelle der Angabe des Dateinamens im Objekt-Feld
der Kommandozeile verwendet werden.
Die Angabe dieses Schalters ist geeignet, wenn
eine .REL-datei erzeugt werden soll, aber
vergessen wurde, einen Dateinamen in das Object-
Feld einzutragen und ein Komma und ein Druckda-
teiname oder nur ein Komma vor dem Gleichheits-
zeichen geschrieben wurde.
Also wenn geschrieben wurde:
ASM ,PROG=PROG
oder
ASM ,=PROG
dann kann auch eine .REL-Datei erzwungen werden
durch einfaches Anfuegen eines /R vor dem Druek-
ken von <ENTER>.
Die Kommandozeile heisst dann:
ASM ,PROG=PROG/R
oder
ASM ,=PROG/R
Schalter Bedeutung
--------------------------------------------------------------
/X Der /X-Schalter setzt den Standard und die ak-
tuelle Zuordnung auf Unterdruecken der Liste
falscher Bedingungen.
Nichtvorhandensein von /X bedeutet, der Standard
und die aktuelle Zuordnung werden auf Drucken
der falschen Bedingungen gesetzt.
/X wird oft in Verbindung mit der bedingten
Pseudooperation .TFCOND verwendet (Siehe Pkt.
9.4.1.5.).
/L Erzwingt das Erzeugen einer Druckdatei mit dem
gleichen Namen wie die Quelldatei. Das kann ver-
wendet werden, statt der Angabe eines Druck-
dateinamens im list-Feld der Kommandozeile.
Wenn eingegeben wurde:
ASM =PROG
oder
ASM ,=PROG
oder
ASM PROG=PROG
dann kann durch einfaches Anhaengen eines /L vor
dem Druecken von <ENTER> eine Druckdatei erzwun-
gen werden. Die Kommandozeile heisst dann:
ASM =PROG/L
oder
ASM ,=PROG/L
oder
ASM PROG=PROG/L
/C Veranlasst den Assembler, eine spezielle
Druckdatei mit dem gleichen Namen wie die Quell-
datei anzulegen, fuer die Verwendung mit REF.
Wenn das Erzeugen einer Cross-Referenz ge-
wuenscht wird, muss das Programm mit diesem
Schalter uebersetzt werden (siehe Pkt. 9.7.).
/Z Veranlasst den Assembler, Z80-Operationscodes zu
uebersetzen.
Dieser Schalter muss angegeben werden, wenn die
Quelldatei im Z80-Code geschrieben wurde, aber
keine .Z80-Pseudoopration enthaelt.
/I Veranlasst den Assembler, 8080-Operationscodes
zu uebersetzen.
Dieser Schalter muss angegeben werden, wenn die
Quelldatei im 8080-Code geschrieben wurde, aber
keine .8080-Pseudooperation enthaelt.
.pa
Schalter Bedeutung
--------------------------------------------------------------
/P Das ist der Standard.
Der Assembler druckt die Adressen in der
Druckdatei hexadezimal.
/M Der /M-Schalter initialisiert einen Blockdaten-
bereich, der mit DS definiert wurde auf 00H.
Andererseits wird der Bereich nicht initiali-
siert. Das heisst, DS initialisiert den Spei-
cherbereich nicht automatisch auf 00H. In diesem
Fall kann man nicht wissen, was in diesem Spei-
cherbereich steht.
9.5.2.5._Zusaetzliche_Angaben_der_Kommandozeile
In jedes Feld der Kommandozeile koennen noch zwei zusaetzliche
Arten von Eintragungen vorgenommen werden - der Dateityp und
die Geraetezuordnung. Diese beiden Arten sind aktuelle Teile
einer "Dateispezifikation".
Eine Dateispezifikation besteht aus dem Geraet, wo die Datei
lokalisiert ist, dem Namen der Datei und dem Dateityp.
Meist wird die Standardzuweisung fuer das Geraet und der
Dateityp verwendet; sie wird dann vom Assembler eingefuegt,
wenn diese Positionen in der Kommandozeile nicht ausgefuellt
waren.
Die Standardannahmen hindern nicht daran, entweder Dateityp
oder Geraetezuweisung einzugeben, einschliesslich der Einga-
ben, die den Standard darstellen.
Der Programmierer kann diese zusaetzlichen Eingaben in jeder
Kombination angeben oder weglassen.
Das Format fuer eine Dateispezifikation ist:
dev:dateiname.ext
wobei
dev: 1-3 Buchstaben Geraetezuweisung (zwin-
gend) gefolgt von einem Doppelpunkt
dateiname:1-8 Zeichen Dateiname
.ext: 1-3 Zeichen Dateityp, dem (zwingend)
ein Punkt vorausgehen muss.
Dateityp_(.ext)
Zum Unterscheiden zwischen Quelldatei, Objectdatei und Druck-
datei fuegt der Assembler einen Dateityp an den Dateinamen an.
Der Dateityp ist eine aus 3 Zeichen bestehende Mnemonik, die
an den Dateinamen angehaengt wird, wobei zwischen Dateinamen
und Dateityp ein Punkt (.) steht.
Der vom Assembler ergaenzte Dateityp wird Standarddateityp
genannt.
Die Standarddateitypen sind:
.REL Objectdatei
.PRN Druckdatei
.COM absolute (ausfuehrbare) Datei
Wenn fuer die Quelldatei kein Dateityp angegeben ist, nimmt
der Assembler an, dass der Dateityp .MAC ist.
Es kann aber auch ein eigener Dateityp angegeben werden, wenn
dies notwendig oder wuenschenswert ist. Es ist ein Nachteil,
dass beim Rufen der Datei dann immer der Dateityp mit eingege-
ben werden muss. Bei Verwendung des Standarddateityps kann
beim Ruf der Datei diese Angabe entfallen.
Geraetezuweisung_(dev:)
Jedes Feld in der Kommandozeile kann auch eine Geraetezuwei-
sung beinhalten.
Die im source-Feld spezifizierte Geraetezuweisung teilt dem
Assembler mit, wo die Quelldatei zu finden ist. Die im Object-
Feld oder list-Feld spezifizierte Geraetezuweisung sagt dem
Assembler, wohin die Ausgabe der Objectdatei bzw. der
Druckdatei erfolgen soll.
Wenn in einem der Felder die Geratezuweisung weggelassen ist,
nimmt der Assembler standardmaessig das aktuell zugewiesene
Laufwerk an.
Das heisst, wenn das Geraet das aktuell zugewiesene Laufwerk
ist, braucht die Geraetezuweisung nicht spezifiziert zu wer-
den. Es ist notwendig, das Geraet zu spezifizieren, wenn ein
anderes als das aktuell zugewiesene Laufwerk waehrend der
Uebersetzung verwendet werden soll.
Beispiel:
Die Diskette mit dem Assembler liegt im Laufwerk A, die
Programmdiskette im Laufwerk B. Die .REL-Datei soll ebenfalls
auf B ausgegeben werden.
Dann muss in der Kommandozeile nur
ASM =B:PROG
angegeben werden.
Wenn die .REL-Datei ausgegeben ist, ist das zugewiesene Lauf-
werk B. (Jedoch, wenn der Assembler beendet ist, ist A wieder
das zugewiesene Laufwerk.)
Im Gegensatz dazu das folgende Beispiel:
Beispiel:
Die Quelldatei befindet sich mit auf der Diskette, auf der der
Assembler ist. Diese Diskette liegt im Laufwerk A. Die .REL-
Datei soll auf die im Laufwerk B liegende Diskette ausgegeben
werden.
Die Kommandozeile lautet dann:
ASM B:=A:PROG
Man sollte es sich zur Regel machen:
Wenn man nicht sicher ist, ob eine Geraetezuweisung angegeben
werden muss, dann sollte man sie auf jeden Fall angeben. Das
ist der sichere Weg, jede Datei auf den richtigen Platz zu
bringen!
Gueltige Geraetezuweisungen fuer den Assembler sind:
A:,B:,C:,... Diskettenlaufwerke
LST: Drucker
TTY: Bildschirm oder Tastatur
Geraetezuweisung_als_Dateiname
Eine weitere Option ist die Angabe der Geraetezuweisung ohne
Dateiname in der Kommandozeile an die Stelle des Dateinames.
Mit der Verwendung dieser Option werden verschiedene Resultate
erzielt, abhaengig davon, welches Geraet in welches Feld ein-
getragen wird.
Beispiel:
ASM ,TTY:=TTY:
ermoeglicht, eine unmittelbar eingegebene Zeile zu uebersetzen
und auf Syntax- oder andere Fehler zu pruefen.
Aehnliches bewirkt:
ASM ,LST:=TTY:
jedoch wird das Ergebnis nicht auf den Bildschirm, sondern auf
den Drucker ausgegeben.
Wenn eines der Kommandos (,TTY:=TTY: oder ,LIST:=TTY:) verwen-
det wird, sollte als erstes eine END-Anweisung eingegeben
werden. Der Assembler muss in den Pass 2 versetzt werden,
bevor er Code ausgibt. Wenn einfach begonnen wird, Anweisungs-
zeilen einzugeben ohne vorheriges END, wird keine Antwort
kommen, bis eine END-Anweisung auftritt. Danach muessen alle
Anweisungen erneut eingegeben werden, ehe der generierte Code
sichtbar wird.
Tabelle 1 verdeutlicht das. Diese Tabelle soll einige Moeg-
lichkeiten zeigen, sie ist keine vollstaendige Liste aller
Kombinationen.
Tabelle_1: Wirkungen der Geraetezuweisung ohne Dateiname
__________________________________________________________
| dev: | object | ,list | =source |
|--------|---------------|---------------|-----------------|
| A:,B:, | Schreiben der | Schreiben der | nicht moeglich |
| C:,D:, | Datei auf das | Datei auf das | (ein Dateiname |
| | spezifizierte | spezifizierte | muss spezifi- |
| | Laufwerk | Laufwerk | fiziert wer- |
| | | | den) |
|--------|---------------|---------------|-----------------|
| LST: | nicht moeglich| Schreiben der | nicht moeglich |
| | (unlesbares | Liste auf | (nur Ausgabe) |
| | Dateiformat) | den Drucker | |
|--------|---------------|---------------|-----------------|
| TTY: | nicht moeglich| "Schreiben" | "Lesen" des |
| | (unlesbares | der Liste auf | Quellprogrammes |
| | Dateiformat) | den Bildschirm| von der Tastatur|
|________|_______________|_______________|_________________|
9.5.3.___Format_des_Assemblerprotokolls
Die Druckliste des Assemblers besteht aus 2 Teilen in 2
verschiedenen Formaten, zum einen die Zeilen der Assemblerli-
ste und zum anderen die Symboltabelle.
9.5.3.1._Format_der_Assemblerliste
Jede Seite der Assemblerliste beginnt mit 2 Kopfzeilen. Wenn
die Quelldatei keine Kopfzeilen aufweist (weder TITLE noch
SUBTTL wurden angegeben), sind diese Teile der Kopfzeilen
leer.
Das Format ist:
[TITLE text] ASM(SCPX) 1520 V n.n X
[SUBTTL text]
Dabei sind:
TITLE text ist der Text, der mittels der Pseudooperation
TITLE in der Quelldatei angegeben wurde.
War in der Quelldatei keine TITLE-Pseudooperation
vorhanden, dann ist dieser Platz in der Kopf-
zeile leer.
n.n ist die Versionsnummer des Assemblers
X ist die Seitennummer.
Diese wird nur angezeigt und erhoeht, wenn in
der Quelldatei die Pseudooperation .PAGE auf-
tritt, oder wenn die gerade bearbeitete Seite
gefuellt ist.
SUBTTL text ist der Text, der mitels der Pseudooperation
SUBTTL in der Quelldatei angegeben wurde.
War in der Quelldatei keine SUBTTL-Pseudoope-
ration vorhanden, dann ist dieser Platz in der
Kopfzeile leer.
Den beiden Kopfzeilen folgt eine Leerzeile.
In der darauf folgenden Zeile beginnt der Text der Druckdatei.
Das Format einer Druckzeile ist:
[error] ####m xx xxxxm [w] text
Dabei sind:
error stellt einen Fehlercode aus einem Zeichen beste-
hend dar.
Ein Fehlercode wird nur gedruckt, wenn in dieser
Zeile ein Fehler aufgetreten ist. Sonst bleibt
der Platz frei.
#### stellt den Zuordnungszaehler dar.
Die Zahl ist eine 4-stellige Hexadezimalzahl
oder eine 6-stellige Oktalzahl.
Die Basis des Zuordnungszaehlers wird durch die
Verwendung des /O- oder /H-Schalters im switch-
Feld der Kommandozeile des Assemblers bestimmt.
Der Standard ist hexadezimal.
m zeigt den Zuordnungszaehlermodus an.
Die moeglichen Symbole dafuer sind:
' Coderelativ
" Datenrelativ
! Commonrelativ
<leer> Absolut
* External
xx und xxxx stellen den uebersetzten Code dar.
xx ist ein 1-Byte-Wert. 1-Byte-Werten folgt
immer ein Leerzeichen.
xxxx ist ein 2-Byte-Wert mit dem hoeherwertigen
Byte zuerst! (Der Druck erfolgt im Gegensatz zur
Reihenfolge der Abspeicherung von 2-Byte-Wer-
ten!)
2-Byte-Werten folgt ein Zeichen, das den Modus
anzeigt (wie oben erlaeutert).
Dieses Zeichen wird durch das zweite m darge-
stellt.
[w] zeigt an, dass diese Zeile aus einer anderen
Datei stammt.
Sie kann durch eine INCLUDE-Pseudooperation
erzeugt worden sein oder Teil einer Makroerwei-
terung sein.
Eine Zeile aus einer INCLUDE-Anweisung erhaelt
ein C, eine Zeile aus einer Makroerweiterung ein
Pluszeichen (+). Sonst bleibt der Platz frei.
text steht fuer den Rest der Zeile, den Quelltext
einschliesslich Marken, Operationscodes, Argu-
mente und Kommentare.
9.5.3.2._Format_der_Symboltabelle
Die Seiten der Symboltabelle haben die gleichen Kopfzeilen wie
die Assemblerliste.Aber anstelle der Seitennummer erscheint S.
Danach werden alle Makronamen, die im Programm verwendet wer-
den in alphabetischer Reihenfolge aufgelistet.
Im Anschluss daran erscheinen alle Symbole, ebenfalls in al-
phabetischer Reihenfolge.
Hinter jedem Symbol steht sein Wert, gefolgt von einem der
nachfolgenden Zeichen:
I Public-Symbol
U Undefiniertes Symbol
C Commonblock-Name.
Der Wert, der hierfuer angzeigt wird,
ist die Laenge des Blockes in Byte auf
hexadezimaler oder oktalen Basis.
* EXTERNAL
' Coderelativer Wert
" Datenrelativer Wert
! Commonrelativer Wert
9.5.4.___Fehlercodes_und_Fehlermeldungen
Waehrend der Uebersetzung auftretende Fehler veranlassen den
Assembler, entweder einen Fehlercode oder eine Meldung zu-
rueckzugeben. Fehlercodes werden durch ein Zeichen dargestellt
und in der Spalte 1 der Druckdatei gedruckt.
Auch wenn die Druckdatei nicht auf den Bildschirm ausgegeben
wird, erscheinen die fehlerhaften Zeilen trotzdem auf dem
Bildschirm.
Fehlermeldungen werden an das Ende der Druckdatei gedruckt
oder am Ende nach den Fehlerzeilen auf dem Bildschirm ange-
zeigt.
9.5.4.1._Fehlercodes
Fehlercode Bedeutung
--------------------------------------------------------------
A Argumentfehler
Das zu der Pseudooperation gehoerige Argument
befindet sich nicht im korrekten Format oder es
liegt ausserhalb des zugelassenen Bereiches.
C Fehler der Bedingungsschachtelung
ELSE ohne IF, ENDIF ohne IF, zweimal ELSE fuer
ein IF, ENDC ohne COND.
D Doppelt definiertes Symbol
Bezugnahme auf ein Symbol, das mehrfach defi-
niert wurde.
E Externer Fehler
Verwendung eines externen Symbols, das in diesem
Zusammenhang nicht erlaubt ist.
(Bsp.: MARKE1 SET NAME##)
M Mehrfach definiertes Symbol
Definition eines Symbols, das bereits definiert
wurde.
N Fehler einer Zahl
Fehler in einer Zahl; meist ein falsches Zei-
chen, (bsp.: 8Q).
O Falscher Operationscode oder nicht einwandfreie
Syntax
SET, EQU oder MACRO ohne einen Namen; falsche
Syntax in einem Operationscode oder falsche
Syntax in einem Ausdruck (nichtpaarige runde
Klammern, Anfuehrungszeichen, aufeinanderfolgen-
de Operatoren usw.)
P Phasenfehler
Der Wert einer Marke oder eines EQU-Namens ist
im Pass 2 anders als im Pass 1.
Q Fragwuerdig
Meistens ist eine Zeile nicht ordentlich abge-
schlossen (bsp.: MOV AX,BX).
Dies ist eine Warnung.
R Verschiebung
Nichterlaubte Verwendung einer Verschiebung in
einem Ausdruck, (bsp.: abs-rel).
Daten, Code und Common-Bereiche sind verschieb-
lich.
.pa
Fehlercode Bedeutung
--------------------------------------------------------------
U Undefiniertes Symbol
Ein Symbol, auf das in einem anderen Ausdruck
Bezug genommen wird, ist nicht definiert.
Fuer einige Pseudooperationen wird im Pass 1 ein
V-Fehler erzeugt und im Pass 2 ein U-Fehler
(Siehe auch V-Fehler).
V Wertfehler
Eine Pseudooperation (bsp.: .RADIX, .PAGE, DS,
IF, IFE), hat im Pass 1 einen undefinierten
Wert, obwohl er im Pass 1 bekannt sein muesste.
Wenn das Symbol spaeter im Program definiert
wird, erzeugt der Assembler im Pass 2 keinen
U-Fehler.
9.5.4.2._Meldungen
%NO END statement
Keine END-Anweisung.
Entweder sie fehlt oder sie wurde nicht durch-
laufen infolge einer falschen Bedingung, eines
nichtabgeschlossenen IRP-, IRPC-, REPT-Blockes
oder eines abgeschlossenen Makros.
Unterminated conditional
Wenigstens eine Bedingung ist am Ende der Datei
nicht abgeschlossen worden.
Unterminated REPT/IRP/IRPC/MACRO
Es ist wenigstens ein Block nicht abgeschlossen
worden.
Symbol table full
(...FEHLER?...)schoepft. Die haeufigste Ursache ist eine ganze
Anzahl Makrobloecke, die Anweisungen fuer viele
Anweisungszeilen enthalten.
Die Makrobloecke werden vollstaendig in der
Symboltabelle abgespeichert, einschliesslich der
Koeeentare, die den Zeilen angehaengt sind in-
nerhalb eines Makroblockes.
Es solnten also alle Makrobloecke im Quellpro-
gramm geprueft werden.
.pa
Um die Kommentare innerhalb der Makrobloecke aus
der Symboltabelle auszuschliessen, sollten vor
die Kommentare zwei Semiko (...FEHLER?...)
Anzahl der schweren Fehler und Warnungen, die im
Programm aufgetreten sind.
Diese Meldung wird am Ende jeder Uebersetzung
auf den Bildschirm und in die Druckdatei ausge-
geben.
Wenn diese Meldung erscheint, ist der Assembler-
lauf beendet.
Die Meldung "No Fatal Errors" zeigt an, dass die
Uebersetzung vollstaendig und erfolgreich ist.
9.6._____Beschreibung_der_Befehle
In diesem Kapitel wird die Wirkung der einzelnen CPU-Befehle
beschrieben.
Der Abschnitt 9.6.16. enthaehlt das Abkuerzungsverzeichnis. Im
Abschnitt 9.6.17. ist die Arbeit mit den Bedingungsbits
(Flags) beschrieben.
9.6.1.___Ladebefehle
Die Ladebefehle transportieren Daten intern zwischen den CPU-
Registern oder zwischen CPU-Registern und dem Schreib- / Lese-
speicher (RAM). Die Befehle muessen eine Ausgangsadresse, von
der die Daten zu entnehmen sind, und eine Zieladresse
enthalten.
Der Quellspeicherplatz wird durch den Ladebefehl nicht veraen-
dert.
9.6.1.1._8-Bit-Ladebefehle
____________________________________________________________
| | | |
| 8080- | Z80- | |
| Mnemonik | Mnemonik | Wirkungsweise der Befehle |
|__________|______________|__________________________________|
| | | |
| MOV r,r'| LD r,r' | Inhalt des Registers r' wird in |
| | | das Register r umgespeichert. |
|__________|______________|__________________________________|