3000 6cdd 0000 I ... ASSM TU
U880-Assembler ASM (V. 25.10.87)
---------------------------------

(c) TU Dresden
    Sektion Informationstechnik
    WB Computer- und Kommunika-
    tionstechnik

Bearbeiter:
    Goetze, Bernd
    Piepiorra, Frank
    Wahl, Heinz

* Kurzcharakteristik
  ------------------

Der U880-Assembler ASM kann von
der Kassette in den Speicher ge-
laden werden und belegt dort den
Speicherraum von 2000H bis 3FFFH.
Der Start erfolgt durch das Moni-
torkommando "J 2000".
Die genaue Speicherbelegung
lautet:
 2000H-3D2DH Objektcode
 4000H-4238H Datenbereich
Damit koennen ab der Adresse
3D2EH bis zur Adresse 3FFFH 
selbst Programmerweiterungen
eingebunden werden. (z.B. Druk-
kertreiber)
Folgende Speicherbereiche werden
weiterhin durch den U880-
Assembler genutzt:

   4239H-4FFFH  Arbeitsspeicher
                fuer temporaere
                Daten
   5000H-5FFFH  Zwischenspeicher
                fuer Objektcode
   6000H-7FFFH  Ausgabebereich
                fuer abarbeit-
                baren Objektcode
   8000H-CFFFH  Eingabebereich
                fuer Texte
!!!Achtung!!!
Durch die Nutzung des Bereichs
von 4000H-5FFFH als Arbeits-
speicher werden die dort vor
Start des ASM vorhandenen Prog-
ramme geloescht.

Der U880-Assembler arbeitet in
unterschiedlichen Betriebsarten,
die durch den Nutzer ausgewaehlt
werden koennen:
 - Markendefinition durch ":"
   als Abschlusszeichen
   In dieser Betriebsart wird
   nur dann eine Marke defi-
   niert, wenn die erste Zei-
   chenfolge der Zeile durch
   ":" abgeschlossen wurde,
   andere Zeichenfolgen werden
   sofort den Mnemoniks bzw. bei
   fuehrendem ";" den Kommen-
   taren zugeordnet.
 - Markendefinition ohne ":"
   In dieser Betriebsart werden
   alle Zeichenketten ab der
   ersten Spalte als Marke ge-
   wertet. Durch Trennzeichen
   (SP oder TAB) wird die Mar-
   kenspalte abgeschlossen.
   Befindet sich ein Trennzei-
   chen in der ersten Spalte
   einer Zeile, fehlt die Marke.
 - Definition externer Symbole
   Referenzen, die im Programm
   verwendet werden, aber nie 
   als Marke definiert werden,
   koennen direkt vom Bediener
   eigegeben werden. Damit ist
   eine bedingte Linkfaehigkeit
   von separat zu uebersetzenden
   Progammen gegeben.
 - Binden mehrerer Programme,
   die durch END-Anweisungen
   getrennt im Textpuffer ste-
   hen, durch aufeinanderfolgen-
   des Uebersetzen in den ein-
   zelnen Assemblerlaeufen.

Durch diese Varianten und durch
die Moeglichkeit der Ueber-
setzung der Befehle und Anwei-
sungen, die sowohl in K1520-
Mnemonik als auch in ZILOG-Z80-
Mnemonik in voellig formatfreier
Zeilengestaltung notiert sind,
ist es moeglich Programme unter-
schiedlichster Herkunft und mit
unterschiedlichsten Anforderun-
gen mit nur geringfuegigen An-
passungen zu bearbeiten.


* Bedienerkommunikation
  ---------------------

Alle Eingaben des Bedieners zur
Steuerung der Arbeit des Assemb-
lers erfolgen zeilenorientiert
mit Editiermoeglichkeiten waeh-
rend der Zeilenerstellung. Dabei
bestehen folgende Korrekturmoeg-
lichkeiten:
 - Loeschen des letzten Zeichens
   aus Eingabepuffer (BS)
   Das geloeschte Zeichen wird
   nochmals angezeigt.
 - Rueckanzeige der Eingabezeile
   (BACK)
   Der aktuell editierte Zeilen-
   inhalt wird nochmals darge-
   stellt.
 - Abbruch der Eingabe (BRK)
   Die Eingabe wird abgebrochen
   und nach einer Fehleraus-
   schrift wird zur Passeingabe
   zum Neustart der Assemblie-
   rung gesprungen.
Durch ENTER wird die Zeile abge-
schlossen und entsprechend der
geforderten Eingabe ausgewertet.
Werden 1-Zeichen-Eingaben gefor-
dert, wird nur das erste Zeichen
im Eingabepuffer ausgewertet.
Alle anderen Zeichen werden
ignoriert. Maximal 15 Zeichen
koennen in den Eingabepuffer
eingetragen werden.

Zur Anpassung an unterschied-
liche Tastaturcodes enthaelt der
ASM eine Tastaturkonvertierungs-
routine, die es ermoeglicht, 
jeden beliebigen Tastaturcode
als Funkrionscode festzulegen.
Im folgenden werden die entspre-
chenden Speicherzellen, in denen
der gewuenschte Tastaturcode
eingetragen werden kann, aufge-
listet:

Adr. Code     Bedeutung
     (z.B.)
--------------------------------
301E  03      BRK
301F  07      BACK
3020  08      BS


Beim Start des ASM erfolgt die
Anfrage
     MINIVARIANTE?:
Mit der Eingabe "N" kann diese
Frage verneint werden, womit dem
Bediener die komplette Vielfalt
der Betriebsmoeglichkeiten ange-
boten wird. Jede andere Eingabe,
die durch ENTER abgeschlossen
wird, fuehrt zur Minivariante,
bei der Markenabschluss mit ":",
keine externen Symbole und keine
aufeinanderfolgende Uebersetzung
mehrerer Programmteile erlaubt
ist.
Hieran schliesst sich sofort der
Pass 1 (Erstellung der Symbol-
tabelle) an, der Voraussetzung
fuer alle anderen Paesse ist.
Nach Abschluss eines Ueberset-
zungslaufes wird zur Eingabe
einer weiteren Passkennzeichnung
aufgefordert. An das Passkenn-
zeichen koennen sich noch Para-
meter zur E/A-Spezifizierung an-
schliessen. Dazu wird durch die
Anzeige:
     PASS:
aufgefordert.
Folgende Eingaben sind moeglich:
     1  Neubeginn bei Pass 1, 
        alle erstellten Tabellen
        loeschen
     L  Erstellung eines Druck-
        protokolls und des
        Objektcodes
     F  Erstellung eines Fehler-
        protokolls und des
        Objektcodes
     O  Ausgabe des Objektcodes
        an das Zielgebiet
     S  Symboltabellenausgabe
     E  Ende der Assemblierung,
        zurueck zum Monitor


* Pass 1
  ------

Der Aufruf dieses Passes ist mit
dem Loeschen der ggf. zuvor er-
stellten Markentabelle verbunden.
Wurde nicht die Minivariante ge-
waehlt, folgt die Eingabe der
externen Referenzen (d.h. der
nicht waehrend dieser Ueberset-
zung definierten, aber im Prog-
ramm genutzten Marken und deren
zuzuordnende Adressinformation).
Nach der Ausschrift
     EXTERNALS?:
werden solange Markeneingaben
erwartet, wie der uebergebene
Eingabepuffer nicht leer ist.
Zunaechst wird der Markenname 
ausgewertet, der aus maximal 6
Zeichen besteht und mit einem
Buchstaben beginnen muss. Als
Trennzeichen ist das Leerzei-
chen erforderlich. Danach wird
die Adresseingabe erwartet,
die aus maximal 4 Hexzahlen
bestehen muss (ohne "H" zur
Kennzeichnung, da nur Hexzah-
len erlaubt sind). Jede Einga-
bezeile, die nicht diese Forde-
rungen erfuellt, wird nicht
uebernommen und durch "+" als
fehlerhaft quittiert.
Anschliessend wird wieder zur
Externaleingabe aufgefordert.

Der daran anschliessende Ueber-
setzungslauf durchmustert den
gesamten Eingangstext nach Be-
fehlslaengen und Adresszuord-
nungen bei Markendefinitioen und
erstellt so die fuer die weite-
ren Uebersetzungslaeufe erfor-
derliche Markentabelle.


* Pass L und Pass F
  -----------------

Um den Objektkode zu erstellen
und die dabei auftretenden Feh-
ler zu finden, muss sich ein
Pass L oder F an den Pass 1 an-
schliessen. Diese Paesse koennen
beliebig oft wiederholt werden,
wobei auch die E/A-Auswahl ge-
wechselt werden kann.
Durch Anfuegen eines "D" an die
Passauswahl "L" oder "F" kann
die normal auf den Bildschirm
auszugebende Information an den
installierten Drucker umgelenkt
werden. Damit lassen sich sei-
tenformatierte Assemblerproto-
kolle erstellen (Pass L) bzw.
koennen die fehlerhaften Zeilen
der Uebersetzung gedruckt wer-
den (Pass F).
Der Pass L erzeugt eine komplet-
te Liste des uebersetzten Prog-
ramms, wobei die formatfreie
Eingangsinformation zeilenweise
formatiert in Spalten des
Assemblerprotokolls, ergaenzt
durch Adresse, generierten Obj.-
kode und Zeilennummer, ausgege-
ben wird. Fehler, die waehrend
der Uebersetzung einer Zeile er-
kannt werden, werden als sepa-
rate Zeile vor der zugehoerigen
Protokollzeile ausgegeben.
Die Ausgabe auf den Bildschirm
kann durch Betaetigen einer be-
liebigen Taste angehalten werden
bis eine weitere Taste betaetigt
wird.
Wird waehrend der Bildschirm-
oder Druckerausgabe die Taste
"BRK" (CTRL-C) betaetigt, wird
der Pass abgebrochen und die
Objektkodegenerierung wird un-
gueltig. Damit kann keine Aus-
gabe erfolgen.


* Pass O
  ------

Nachdem der Pass L oder F zur 
Objektkodegenerierung ausge-
fuehrt wurde, kann das danach im
Objektkodezwischenspeicher vor-
liegende Programm ausgegeben
werden. Gegenwaertig ist nur die
Ausgabe in einen Testbereich
implementiert, sodass abarbei-
tungsfaehige Programme in diesen
Adressraum lokalisiert werden 
muessen. Diese Ausgabe wird
durch ein auf das "O" folgendes
"S" ausgewaehlt.
Es werden die durch das Programm
belegten Speicherbereiche ange
zeigt.
Der Testbereich befindet sich im
Adressbereich 6000H-7FFFH.

Hinweis: Ist ein Programm aus-
serhalb des Testbereiches loka-
lisiert, so wird es nicht ausge-
geben und als Bereichsfehler an-
gezeigt. Das Programm steht
jetzt ab der Adresse 5000H und
kann nach Verlassen des Assemb-
lers durch das Monitorkommando
"T" (Transfer) auf den vorgese-
henen Speicherbereich gebracht
werden.


* Pass S
  ------

Bei geringfuegigen Aenderungen
eines Programmes ist es meist
nicht erforderlich, ein komplet-
tes neues Protokoll fuer Test-
zwecke zu drucken. Dafuer bietet
es sich an, die aktualisierte
Symboltabelle zu nutzen.
Mit dem nach "S" folgenden "D"
kann auch hier die Ausgabe vom
Bildschirm auf den installierten
Drucker umgelenkt werden.


* Zeilensyntax
  ------------

Der U880-Assembler erlaubt die
Verarbeitung voellig format-
freier Texte, die durch eine
Syntaxanalyse in die einzelnen
Teile einer Assemblerquelltext-
zeile zerlegt werden. Dabei wer-
den folgende Trennzeichen ver-
arbeitet:
SP  Leerzeichen zur Spaltentren-
    nung, falls keine anderen
    Trennzeichen wirken
TAB Tabulator zur Spaltentren-
    nung, falls keine anderen
    Trennzeichen wirken
Texte in freiem Format werden so
verarbeitet, dass die Quelltext-
spalten durch Feststellen von
festgelegten Trennzeichen er-
kannt werden. Beliebige weitere
oben angefuehrte Trennzeichen
koennen zur besseren Lesbarkeit
des Eingangstextes eingefuegt
sein. Folgende Trennzeichen die-
nen der Identifikation der Spal-
ten:
 - Die Zeichenfolge, die mit
   einem Buchstaben beginnt, 
   weiterhin Ziffern und Buch-
   staben enthalten kann, max.
   6 Zeichen lang ist und durch
   ":" abgeschlossen ist, oder 
   die bei Markenabschluss ohne
   ":" in der ersten Spalte der
   Zeile beginnt, kennzeichnet
   eine Markendefinition im Mar-
   kenfeld.
 - Eine Zeichenkette, die nicht
   mit ";" beginnt und die nicht
   durch ":" abgeschlossen ist
   bzw. auf eine Marke folgt,
   wird als Mnemonik eines Be-
   fehls bzw. einer Assembleran-
   weisung interpretiert.
 - Zeichenketten, die nicht mit
   ";" beginnen und durch Leer-
   zeichen bzw. Tabulatoren von
   der Mnemonik getrennt sind,
   werden als Operanden bewertet
   Dabei gilt "," als Trennzeic-
   hen zwischen ersten und zwei-
   ten Operanden, sofern dieser
   vorhanden ist.
 - Alle Zeichen nach ";" gelten
   als Kommentar.

Beim Pass L werden die einzelnen
Teile der Eingangszeile auch so
in die eingeteilten Protokoll-
spalten einsortiert. Beim Pass F
werden alle zusaetzlichen Fuell-
zeichen aus der Eingangszeile
geloescht.


* Druckerschnittstelle
  --------------------

Der Anschluss eines Druckers 
oder eines anderen peripheren
Geraetes ist vorbereitet.
Dazu muss eine entsprechende
Treiberroutine an das Programm-
paket gebunden werden. Die ent-
sprechende Schnittstelle liegt
auf der Adresse

2017H mit den Daten C9 00 00

Hier muss ein entsprechender
Sprung auf die Treiberadresse
eingefuegt werden. (z.B. JMP
3D2EH) Beim Aufruf des Druckers
steht das zu druckende Zeichen
im C Register. Der Drucker
quittiert eime ordnngsgemasse
Uebernahme des Zeichens durch
setzen ds C - Flags. Ein nicht
gesetztes C - Flag fuehrt zu 
einer Fehlerausschrift. Ein
Beispiel fuer ein Drucker-
treiberprogramm ist in der
Beschreibung zum Texteditor
CED enthalten.

* Assembleranweisungen
  --------------------

ORG   adr   ;Setzen des Speich.-
            ;zuweisungszaehlers
            ;auf adr
END         ;Beendigung der
            ;Assemblierung des
            ;Moduls
EQU   adr   ;Wertzuweisung von
            ;adr zur Marke

DS    adr   ;Reservierung von
            ;adr Bytes in der
            ;Bytefolge
BER   adr   ;      -"-
DEFS  adr   ;      -"-

DB    byt   ;Ablegen von byt in
            ;der Bytefolge
DEFB  byt   ;      -"-
DEFM  byt   ;      -"-
DEFT  text  ;Ablegen der Zei-
            ;chenzahl und der
            ;Zeichenfolge text
            ;in der Bytefolge

DW    adr   ;Ablegen von adr als
            ;2 Byte in der
            ;Bytefolge
DA    adr   ;      -"-
DEFW  adr   ;      -"-

DEF         ;ohne Wirkung, nicht
            ;implementiert
EJEC        ;      -"-
PN          ;      -"-
TITL        ;      -"-



* Befehlssyntax
  -------------

Hier sind die moeglichen Nota-
tionsformen der Befehle des
U880, die der Assembler verar-
beitet, aufgelistet. Fuer Byte-
und Adressoperanden gilt, dass
sie aus einer logischen oder
arithmetischen Verknuepfung von
zwei Marken und Direktwerten be-
stehen koennen. Der Speicherre
ferenzzaehler ("#") wird bei
diesen Operationen ignoriert.
Bei Relativspruengen auf Marken
wird automatisch die Distanz be-
rechnet.

rgm = M,(HL),(IX+rel),(IY+rel)
byt = n,L(adr),H(adr)


- Transferbefehle

LD   <rg1>,<rg2>
   ;rg1=A,B,C,D,E,H,L,<rgm>
   ;rg2=A,B,C,D,E,H,L,<rgm>,byt

LD   A,<rg>
   ;rg=I,R

LD   <rg>,A
   ;rg=I,R

LD   <rp>,adr
   ;rp=BC,DE,HL,IX,IY,SP

LD   (adr),<rp>
   ;rp=  -"-

LD   <rp>,(adr)
   ;rp=  -"-


LD<rc>
   ;rc=I,IR,D,DR


POP  <rp>
   ;rp=AF,BC,DE,HL,IX,IY

PUSH <rp>
   ;rp=  -"-

EXAF

EX   AF,AF'

EX   DE,HL

EX   (SP),<rp>
   ;rp=HL,IX,IY

- arithmetische Befehle

DAA

NEG

ADD  <rg>
   ;rg=A,B,C,D,E,H,L,<rgm>,byt

ADD  A,<rg>
   ;rg=  -"-

ADC  <rg>
   ;rg=  -"-

ADC  A,<rg>
   ;rg=  -"-

SUB  <rg>
   ;rg=  -"-

SUB  A,<rg>
   ;rg=  -"-

SBC  <rg>
   ;rg=  -"-

SBC  A,<rg>
   ;rg=  -"-

DEC  <rg>
   ;rg=A,B,C,D,E,H,L,<rgm>

INC  <rg>
   ;rg=  -"-


ADD  <rp1>,<rp2>
   ;rp1=HL,IX,IY
   ;rp2=BC,DE,<rp1>,SP

ADC  HL,<rp>
   ;rp=BC,DE,HL,SP

SBC  HL,<rp>
   ;rp=  -"-

INC  <rp>
   ;rp=BC,DE,HL,IX,IY,SP

DEC  <rp>
   ;rp=  -"-


- logische Befehle

CPL

AND  <rg>
   ;rg=A,B,C,D,E,H,L,<rgm>,byt

OR   <rg>
   ;rg=  -"-

XOR  <rg>
   ;rg=  -"-

CMP  <rg>
   ;rg=  -"-

CP   A,<rg>
   ;rg=  -"-

CP<rc>
   ;rc=I,IR,D,DR


- Rotationsbefehle

RLA

RLCA

RRA

RRCA

RL   <rg>
   ;rg=A,B,C,D,E,H,L,<rgm>

RLC  <rg>
   ;rg=  -"-

RR   <rg>
   ;rg=  -"-

RRC  <rg>
   ;rg=  -"-

SLA  <rg>
   ;rg=  -"-

SRA  <rg>
   ;rg=  -"-

SRL  <rg>
   ;rg=  -"-


- Bitbefehle

BIT  <bnr>,<rg>
   ;bnr=0,1,...,7
   ;rg=A,B,C,D,E,H,L,<rgm>

RES  <bnr>,<rg>
   ;bnr=  -"-
   ;rg=   -"-

SET  <bnr>,<rg>
   ;bnr=  -"-
   ;rg=   -"-


- Sprungbefehle

JMP       <rg>
   ;rg=M,(HL),(IX),(IY)

JP        <rg>
   ;rg=  -"-

JMP       adr

JP        adr

JP<bed>   adr
   ;bed=C,NC,Z,NZ,M,P,PE,PO

JP        <bed>,adr
   ;bed=  -"-


JR        adr

JR<bed>   adr
   ;bed=C,NC,Z,NZ

JR        <bed>,adr
   ;bed=  -"-

DJNZ      adr


- Unterprogrammbefehle

CALL      adr

CA<bed>   adr
   ;bed=C,NC,Z,NZ,M,P,PE,PO

CALL      <bed>,adr
   ;bed=  -"-

RST       <n*8>
   ;n=0,1,...7


RET

R<bed>
   ;bed=C,NC,Z,NZ,M,P,PE,PO

RET       <bed>
   ;bed=  -"-

RETI

RETN


- E/A-Befehle

IN   <ea>
   ;ea=byt,A,B,C,D,E,H,L

IN   A,(byt)

IN   <rg>,(C)
   ;rg=A,F,B,C,D,E,H,L

INF

IN<rc>
   ;rc=I,IR,D,DR


OUT   <ea>
   ;ea=byt,A,B,C,D,E,H,L

OUT   (byt),A

OUT   (C),<rg>
   ;rg=A,B,C,D,E,H,L

OUT<rc>
   ;rc=I,D

OT<rc>
   ;rc=IR,DR


- Sonderbefehle

CCF

SCF

DI

EI

IM<mode>
   ;mode=0,1,2

IM   <mode>
   ;mode=0,1,2

HALT

NOP


Achtung: Bei dieser Version ist
         der Druck noch nicht
         mit CTRL C abzubrechen!