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!