;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;?? +---------------------------+ ! ! ! ASS 2.0 ! ! assemblator f|r ABC80 ! ! Anders Franz`n <5258> ! ! Stockholm 1986 ! ! ! +---------------------------+ INNEH]LL ======== 1 BESKRIVNING 2 UPPSTART 3 NYA KOMMANDON I BASIC 3.1 ASS 3.2 PASS 3.3 LAB 3.4 TED 3.5 EXIT 4 K[LLKOD 4.1 Direktiv 4.1.1 TITLE "text" 4.1.2 OBJ n 4.1.3 SAVE filnamn 4.1.4 INCLUDE filnamn 4.1.5 ORG nn 4.1.6 LOC nn 4.1.7 DEFS n 4.1.8 DEFM "str{ng",n 4.1.9 DEFB n,"str{ng" 4.1.10 DEFW nn,"str{ng" 4.1.11 EQU nn 4.1.12 END nn 4.1.13 MACRO &var1,&var2,... 4.1.14 ENDM 4.1.15 FILE filnamn 4.1.16 EJECT 4.2 Labels 4.3 Instruktioner 4.4 Uttryck 4.4.1 Tal 4.4.2 Str{ng 4.4.3 Soltecken 4.4.4 Label 4.5 Kommentarer 5 OBJEKTKOD 5.1 BASIC-program 5.2 Komprimerat program 5.3 ABS-fil 5.4 ITH-fil 5.5 Lista 1 BESKRIVNING ============== ASS {r en assemblator f|r processorn Z80. Programmet kan k|ras p} en ABC80 med 16K eller 32K RAM och det spelar ingen roll vilken checksumma datorn har. K{llkod kan ligga p} kassettband, flexskiva eller i texteditorn TED (som kan befinna sig i datorns minne samtidigt som ASS). Som utdata kan objektkod erh}llas i fem olika format. Programmet ASS m}ste sparas med SAVE p} skiva eller kassett d{rf|r att det inneh}ller maskinkod. OBS! Om endast 16K RAM finns i datorn kan ASS inte k|ras tillsammans med texteditorn TED. 2 UPPSTART =========== ASS {r skrivet i assembler f|r att s} snabbt som m|jligt behandla k{llkodsfiler. F|r att f} in maskinkoden som styr det hela i minnet p} ABC80 exekverar man programmet ASS med hj{lp av kommandot RUN i BASIC. Nu t|ms bildsk{rmen, en rubrik visas h|gst upp och man hamnar i BASIC-mod. ASS styrs med hj{lp av speciella kommandon som l{nkas in i BASIC (se kapitel tre). Texteditorn TED kan ligga i datorns minne samtidigt som ASS. F|r att starta upp detta integrerade system k|r man f|rst ASS och d{refter, n{r man kommit till BASIC-mod, startar man TED med kommandot RUN TED. N{r {ven programmet TED exekverats visas den normala TED-menyn. P} denna meny finns nu ett nytt alternativ, m|jigheten att hoppa tillbaka till ASS. Om detta g|rs hamnar man }ter i BASIC. TED och den text som man kan ha skrivit i TED finns fortfarande kvar i datorns minne. Med kommandot TED eller genom att skriva RUN TED: hoppar man tillbaka till TED. Notera att ju st|rre text man skrivit i TED innan hopp sker till ASS, desto mindre utrymme f}r BASIC n{r man hoppar till ASS. Det medf|r att assembleringen klarar av mindre k{llkodsfiler. Det {r viktigt att man, n{r man ska hoppa fr}n TED till ASS, inte anv{nder slutalternativet p} TED-menyn. Visserligen hamnar man i BASIC men ASS tilldelas d} s} lite minne att man inte kan g|ra n}got vettigt d{r. Man kan f} ett valfritt kommando att exekveras direkt n{r ASS har startats upp genom att ange kommandot i en st{ngvariabel i sj{lva programmet ASS. Lista programmet s} framg}r det hur det skall g|ras. Det spelar ingen roll vad str{ngvariabeln heter. Genom att ange kommandot ASS kan man f} en valfri k{llkod att b|rja assembleras direkt eller s} kan man f} automatisk uppstart av TED genom att ange RUN TED i str{ngvariabeln. Det {r m|jligt att p}verka utseendet p} den lista som man kan f} efter assemblering. Detta sker genom att n}gra heltalsvariabler tilldelas vissa v{rden i programmet ASS. F|ljande variabler kan man anv{nda sig av (defaultv{rden inom parentes): A% Antal rader/sida (55) B% Storlek v{nstermarginal (10) C% Postion d{r h|germarginal skall b|rja (80) 3 NYA KOMMANDON I BASIC ======================== N{r ASS finns i ABC80's minne kan man skriva egna BASIC-program precis som vanligt, den enda skillnaden {r att det tillkommit n}gra nya kommandon. Med hj{lp av dessa kommandon kan man t ex starta assemblering av k{llkod och hoppa till texteditorn TED. Nedan f|ljer en presentation av samtliga nya kommandon. 3.1 ASS -------- F|r att starta assemblering av k{llkod anv{nder man kommandot ASS. K{llkoden som ska assembleras kan antingen ligga som en textfil p} n}got yttre lagringsmedium eller s} kan den ligga i texteditorn TED. Om k{llkoden ligger p} fil anger man omedelbart efter kommandot namnet p} filen. Default extension i filnamnet {r ASM. Om man inte anger n}got filnamn och om TED finns i datorns minne assemleras den text som finns i TED. Om man f}r felmeddelande n{r en fil ska |ppnas, t ex ERR 21, f}r man ett erbjudande om att f|rs|ka |ppna filen igen. Det kan ju vara s} att filen som ska l{sas finns p} en annan kassett eller skiva. Om man inte |nskar f|rs|ka igen med samma fil m}ste man trycka CTRL-C. Om ASS hittar fel i k{llkoden sker felutskrift p} bildsk{rmen. Syntaxen i k{llkoden ska f|lja den standard som finns f|r Z80. Med kommandot ASS l{ser man k{llkoden endast en g}ng. Det medf|r att ledigt minne i datorn anv{nds f|r att bygga upp tabeller av olika slag. N{r infilen l{sts till slut st{ngs filen och alla de adressreferenser som {nnu inte l|sts upp ber{knas med hj{lp av tabellerna i minnet. Detta g}r betydligt fortare {n att l{sa k{llkoden i tv} pass. [ven n{r adressreferensber{kningen p}g}r kan fel uppt{ckas. Om minnet skulle bli fullt kan man prova med kommandot PASS ist{llet som l{ser k{llkoden tv} g}nger. N{r referensber{kningen {r klar visas p} bildsk{rmen alla labels som definierats i k{llkoden men som inte anv{nds till n}gonting. Detta {r bara en ren upplysning f|r anv{ndaren och {r allts} inget fel. Notera att alla labels som definieras i k{llkoden sparas i tabeller i minnet, ju fler labels desto mer minne g}r }t. Om inga fel finns i k{llkoden startas tillverkning av objektkod. Den kan framst{llas i fem olika format (se kapitel 5). Man kan v{lja format med ett direktiv i k{llkoden, annars fr}gar ASS efter formatet p} bildsk{rmen. Objektkoden kan sparas p} fil automatiskt, {ven detta kan styras i k{llkoden. N{r objektkoden {r framst{lld {r assembleringen klar och datorn befinner sig }ter i BASIC-mod. N}gra format av objektkoden l{gger sig i datorns minne som BASIC-program och kan listas direkt. Om man endast har kassettband som yttre lagringsmedium (flexskiva ej inkopplad) kommer en fr}ga p} bildsk{rmen efter det att en fil har l{sts klart. H{r kan man ange namnet p} n{sta fil att l{sa, om flexskiva saknas kan man ju inte anv{nda sig av direktivet INCLUDE (se kapitel 4.1.4). Det {r praktisk att anv{nda sig av den h{r m|jligheten om k{llkoden {r s} stor att den inte f}r plats p} en fil. Om det inte finns fler filer att l{sa trycker man p} RETURN utan att ange n}got filnamn. 3.2 PASS --------- Om datorns minne inte r{cker till f|r att assemblera en eller flera k{llkodsfiler med ASS kan man prova med PASS ist{llet. Det fungerar p} precis samma s{tt som med ASS men med den skillnaden att infilerna l{ses tv} ggr. D{rf|r beh|ver inte tabellen som anv{nds av ASS f|r att ber{kna adressreferenser byggas upp och minne kan s}ledes sparas. Om man ska framst{lla en lista (kapitel 5.5) kommer k{llkodsfilerna att l{sas en tredje g}ng. 3.3 LAB -------- Alla labels som finns i k{llkoden sparas i ABC80's internminne. N{r assembleringen avslutats kan dessa listas p} bildsk{rmen med kommandot LAB. Alla labels samt de v{rden som de motsvarar visas. Om man bara vill veta v{rdet p} en speciell label kan man skriva LAB LABEL d{r LABEL {r namnet p} en label. Om den {r definierad i k{llkoden b|rjar listningen av labels fr}n och med denna. Man kan avbryta en listning med RETURN eller CTRL-C. 3.4 TED -------- Med kommandot TED l{mnar man ASS och hoppar till texteditorn TED. Ev text i TED, som skrevs innan hopp skedde till ASS, finns kvar. Det {r allts} enkelt att hoppa fram och tillbaka mellan ASS och TED. 3.5 EXIT --------- F|r att l{mna ASS och }terg} till normal BASIC kan man skriva kommandot EXIT. Det {r detsamma som att trycka p} RESET-knappen. 4 K[LLKOD ========== ASS l{ser k{llkod och framst{ller med hj{lp av denna exekverbar maskinkod. Liksom alla programmeringsspr}k kr{vs det att koden f|ljer en viss syntax. ASS accepterar Zilog's standard samt en del annat. Nedan f|ljer en presentation av de direktiv, labels, instruktioner och uttryck som f}r ing} i k{llkoden. 4.1 Direktiv ------------- Med hj{lp av direktiv styr man assemblatorns upptr{dande. Alla vanliga direktiv f|rst}r ASS, dessutom finns det n}gra extra som {r unika f|r ASS som f|renklar assembleringen och framst{llningen av objektkod. Nedan f|ljer en beskrivning av samtliga direktiv som finns i ASS. Dessa symboler anv{nds: n heltal -127<=n<=255 nn heltal -32768<=nn<=65535 4.1.1 TITLE text ------------------- F|r att s{tta en rubrik p} programmet anv{nds direktivet TITLE. Denna rubrik hamnar |verst p} listan om man beg{r utskrift p} printer eller hamnar i det program som skapas om man framst{lller objektkod i format tv}. TITLE kan st} var som helst i k{llkoden, beh|ver allts} inte st} f|rst. Finns det flera TITLE-direktiv i k{llkoden g{ller det som st}r sist. 4.1.2 OBJ n ------------ Anger vilket format p} objektkod som |nskas. Om direktivet ej anges fr}gar ASS p} bildsk{rmen efter format. Det finns fem olika format att v{lja p}: 1 BASIC-program med POKE-satser 2 BASIC-program i BAC-format, lustigt att lista 3 ABS-fil 4 ITH-fil 5 Utskrift av lista Direktivet kan st} var som helst i k{llkoden, finns det fler OBJ-direktiv g{ller det som st}r sist. 4.1.3 SAVE filnamn ------------------- Direktivet SAVE anger under vilket filnamn som objektkoden skall sparas. Genom att skriva SAVE FIL.BAC sparas objektkoden direkt efter assembleringen med filnamnet FIL.BAC. Om SAVE ej anges kommer ASS om s} beh|vs att fr}ga efter filnamn p} bildsk{rmen. SAVE p}verkar inte filnamn vid utskrift p} lista. SAVE kan st} var som helst i k{llkoden, finns det fler SAVE-direktiv g{ller det som st}r sist. 4.1.4 INCLUDE filnamn ---------------------- N{r INCLUDE p}tr{ffas i en k{llkodsfil stoppas l{sningen av denna fil tillf{lligt. ASS |verg}r till att l{sa den fil som INCLUDE anger, default extension i filnamnet {r ASM. N{r denna "subfil" {r f{rdigbehandlad }terg}r l{sningen till den f|rsta filen med raden efter INCLUDE-direktivet. Detta {r praktiskt om k{llkod inte rymms p} en fil, i en "styrfil" kan man ange samtliga filer som ska l{sas. Om man f}r felmeddelande n{r en fil ska |ppnas, t ex ERR 21, f}r man ett erbjudande om att f|rs|ka |ppna filen igen. Det kan ju var s} att filen som ska l{sas finns p} en annan kassett eller skiva. Om man inte |nskar f|rs|ka igen med samma fil m}ste man trycka CTRL-C och s}ledes avbryta assembleringen. INCLUDE kan g|ras i upp till sex underniv}er. Om flexskiva saknas kan man endast anv{nda INCLUDE i TED. Om man bara har kassettband som yttre lagringsmedium och k{llkoden {r s} stor att den inte rymms i en fil klarar man sig tack vare att ASS st{ller en fr}ga p} bildsk{rmen (se kapitel 3.1). Om TED finns i minnet och flexskiveenhet {r ansluten till datorn kan LIB-rutinen i TED tas bort av ASS om INCLUDE g|rs i flera niv}er. Detta m{rks p} s} s{tt att LIB inte l{ngre kan v{ljas p} TED-menyn. 4.1.5 ORG ---------- Direktivet ORG anger p} vilken adress som maskinkoden skall antas placeras p}. Utifr}n den adressen ber{knas alla adresser som f|ljer. Om ORG saknas placeras maskinkoden med b|rjan p} adress noll. 4.1.6 LOC ---------- Ibland {r det |nskv{rt att assemblera en k{llkod f|r en viss adress men placera den p} ett annat st{lle i minnet. Ett program, som f|r att vara k|rbart, m}ste ligga p} adress 99 i minnet kan i st{llet f}s att placeras p} en annan adress. LOC p}verkar allts} den adress i minnet d{r koden skall placeras med POKE men koden som POKE-as {r of|r{ndrad. Notera att LOC m}ste st} efter det ORG-direktiv det ska p}verka. Ett nytt ORG- eller DEFS- direktiv avslutar verkan av tidigare LOC. Som exempel kan visas denna evighetsloop: OBJ 1 ORG 99 LOOP: JP LOOP 10 POKE 99,195,99,0 +-------> kod f|r JP OBJ 1 ! ORG 99 ! +---> of|r{ndrad LOC 123 ! ! JP-adress LOOP: JP LOOP 10 POKE 123,195,99,0 ! +-----------> placeringen har {ndrats 4.1.7 DEFS nn -------------- Med direktivet DEFS reserverar man en area i minnet vars inneh}ll {r odefinierat. DEFS och DS betyder samma sak. 4.1.8 DEFM "str{ng",n ---------------------- Med direktivet DEFM definierar man textstr{ngar i minnet. Det {r till}tet att blanda str{ngar med }ttabitarstal }tskillda med kommatecken. DEFM och DM betyder samma sak. 4.1.9 DEFB n,"str{ng" ---------------------- Med direktivet DEFB definierar man 8-bitarstal i minnet. Det {r till}tet att ange fler tal }tskillda med kommatecken. Det {r {ven till}tet att ange str{ngar blandat med talen. DEFB och DB betyder samma sak. 4.1.10 DEFW nn,"str{ng" ------------------------ Med direktivet DEFW definierar man 16-bitarstal i minnet. Det {r till}tet att ange fler tal }tskillda med kommatecken. Det {r {ven till}tet att ange str{ngar blandat med talen. DEFW och DW betyder samma sak. 4.1.11 EQU nn -------------- F|r att tilldela en label ett |nskat v{rde anv{nds EQU. Namnet p} den label som skall tilldelas ett v{rde anges p} samma rad f|re direktivet. 4.1.12 END nn -------------- F|r att tala om f|r ASS att en k{llkodsfil {r slut anv{nds direktivet END. Notera att END inte beh|vs, ASS tolkar filslut som ett END. Om man anger en adress efter END tillverkas objektkoden p} s}dant vis att n{r den exekveras sker hopp omedelbart till adressen. Finns det fler END-direktiv med olika ENTRY-adresser (i olika filer) {r det den sista som g{ller. 4.1.13 MACRO &var1,&var2,... ----------------------------- F|r att definiera ett macro m}ste en label st} f|re direktivet MACRO. Alla instruktioner och direktiv som finns mellan ett MACRO-direktiv och ett ENDM-direktiv antas ing} i macrot. N{r ett macro {r definierat kan man p} ett godtyckligt antal st{llen i en k{llkod f} in dessa instruktioner genom att p} en rad skriva namnet p} macrot, dvs den label som satts f|re MACRO-direktivet. Genom detta beh|ver man bara skriva ett ord som motsvarar flera intruktioner. Man kan ocks} enkelt {ndra namn p} befintliga instruktioner. Ett macro m}ste definieras innan det anv{nds. Det {r m|jligt att ange variabler i ett macro. Man talar om vilka variabler som anv{nds i macrot genom att ange dem efter MACRO-direktivet }tskillda med kommatecken. Variabler m}ste b|rja med tecknet "&" eller "#". Ett godtyckligt antal variabler kan anges, bara de f}r plats p} samma rad som MACRO-direktivet. N{r man anropar macrot i k{llkoden hakar man, efter macronamnet, p} de v{rden som man vill motsvarande variabler ska f}. Detta medf|r att p} de st{llen i macrot d{r variablerna f|rekommer byts de ut mot den text som angivits i macroanropet. Om man anv{nder labels inne i macrot kan f} dem unika genom att l{gga till tv} "&" ellet tv} "#" efter labelnamet. Dessa tv} tecken beh|ver inte l{ggas efter en label men d} kan man inte anropa macrot mer {n en g}ng. De tv} tecknen kan betraktas som en systemvariabel, de byts ut mot ett unikt nr f|r varje macroanrop. Exempel: PRINT MACRO &TEXT Definition av macro och en variabel LD HL,L1&& Pekar p} text LD BC,L2&& L{ngd p} text CALL 0:11 Skriv text p} bildsk{rm JR L1&&+L2&& Hoppa till efter text L1&& DEFM &TEXT Byt ut variabel mot str{ng L2&& EQU $-L1&& L{ngd p} str{ng ENDM Avslutar macro ORG 65408 PRINT "test" Anropa macro med argument RET 4.1.14 ENDM ------------ Direktivet ENDM avslutar en macrodefinition (se kapitel 4.1.13). 4.1.15 FILE filnamn -------------------- Om man i en k{llkod vill anropa tidigare skrivna macro's m}ste dessa definieras i ASS. Det kan ske p} tv} s{tt, antingen genom att g|ra INCLUDE p} den fil d{r macrona ligger (kapitel 4.1.4) eller genom att anv{nda direktivet FILE. En on|dig l{sning av filen med macrona sker om man anv{nder INCLUDE, det mest optimala {r att anv{nda FILE. F|re FILE anger man namnet p} ett macro och efter direktivet anger man i vilken fil macrot ligger. Om man l{gger flera macros i samma fil {r det praktiskt om man i k{llkod som anv{nder ett eller flera av dessa macros g|r INCLUDE p} en fil som inneh}ller endast FILE-direktiv. Dessa FILE-direktiv pekar ut alla filer i vilka de olika macrona ligger i. 4.1.16 EJECT ------------- Om man beg{r utskrift p} printer kan man med direktivet EJECT byta till ny sida. Raden med detta direktiv skrivs ej ut p} listan. 4.2 Labels ----------- Man tilldelar labels v{rden i assembler s} att man kan referera till dem fr}n andra st{llen i programmet. En label f}r d{rf|r endast f|rekomma p} ett st{lle i k{llkoden, annars erh}lles felmeddelande. En label m}ste b|rja i f|rsta positionen om den inte avslutas med ett kolon. F|rsta tecknet i labeln m}ste vara en bokstav, de |vriga tecknen m}ste vara bokst{ver, siffror eller specialtecken. Som specialtecken r{knas !?_%<>=. En label kan inneh}lla ett godtyckligt antal tecken, det b|r dock noteras att samtliga labels sparas i internminnet i ABC80 varf|r man kan anv{nda fler labels om de {r korta. Det {r m|jligt att lista samtliga labels p} bildsk{rmen n{r assembleringen {r klar (se kapitel 3.2). Labels som definierats i k{llkoden men som inte anv{nds visas p} bildsk{rmen n{r alla filer l{sts. 4.3 Instruktioner ------------------ Alla Z80-instruktioner som anv{nds i k{llkoden m}ste skrivas med en korrekt syntax. ASS klarar av ZILOG-standard, dessutom kan n}gra instruktioner skrivas p} ett enklare s{tt som bl a flitigt anv{nds i ABC-rapport 1, "Programvaran i ABC80". ZILOG-standard f|renkling -------------- ---------- ADD A,r ADD r CALL cc,nn CALLcc nn EX AF,AF' EX AF IN A,(n) IN n IN r,(C) IN r OUT (n),A OUT n OUT (C),r OUT r JR cc,nn JRcc nn JP cc,nn JPcc nn RET cc RETcc SBC A,r SBC r 4.4 Uttryck ------------ \verallt d{r man anv{nder sig av }tta- eller sextonbitarstal i k{llkoden skriver man ett matematiskt uttryck. Ett uttryck best}r av minst ett tal, en str{ng, ett soltecken eller en label. Med hj{lp av tecknen f|r plus, minus, multiplikation och division kan man t ex binda ihop fler tal s} att |nskat v{rde erh}lls. Vanliga matematiska regler g{ller vid ber{kning av uttryck. Det {r m|jligt att anv{nda parenteser i uttryck. H{r {r n}gra exempel p} uttryck: STARTA EQU $ LD HL,1+2*55 LD BC,HIT-DIT LD A,11111B LD A,((2+"A")/2+1)*2 CP "A" JP STARTA 4.4.1 Tal ---------- Man kan skriva tal i fyra olika talsystem. F|r att tala om vilket talsystem som anv{nds hakar man p} en bokstav sist efter talet. De bokst{ver som anv{nds {r B f|r bin{ra tal, O eller Q f|r tal i det oktala talsystemet, D f|r vanliga decimaltal (beh|ver ej anges, D {r default) samt H f|r hexadecimala tal. F|r att skilja hexadecimala tal som b|rjar p} en bokstav fr}n labels (se kapitel 4.2) m}ste man skriva en nolla f|re talet, t ex 0F3H. Det {r {ven m|jligt att skriva tal p} formen A:B. Talet tolkas d} som ett sextonbitarstal d{r v{rdet p} A motsvarar talets mest signifikanta byte och B dess minst signifikanta byte. S}lunda {r talet 2:116 detsamma som 2*256+116 vilket blir 628. Notera att talen p} b}da sidorna om kolonet kan vara i olika talsystem. 4.4.2 Str{ng ------------- En str{ng med en l{ngd p} ett tecken motsvarar tecknets ASCII- v{rde. S}lunda betyder 65 och "A" samma sak. 4.4.3 Soltecken ---------------- Ett soltecken motsvarar den adress d{r n{sta instruktion kommer att placeras och {r alltid ett sextonbitarstal. Ett exempel som placerar talet 65408 p} adress 65408 samt en evighetsloop: ORG 65408 ORG 65408 DEFW $ JP $ 4.4.4 Label ------------ En label representerar ett sextonbitarstal den f}r d} den definieras i k{llkoden (se kapitel 4.2). 4.5 Kommentarer ---------------- Det {r praktiskt att kunna skriva kommentarer i k{llkoden n{r man programmerar i assembler. Om en hel rad skall tolkas som en kommentar m}ste det f|rsta icke-blanka tecknet vara ett semikolon. En rad med enbart blanktecken tolkas som en kommentar. Kommentarer kan skrivas efter en instruktion eller ett direktiv om kommentaren f|reg}s av ett semikolon. Det {r inte n|dv{ndigt att anv{nda semikolon, i s} fall m}ste det dock finnas minst ett blanktecken mellan sista tecknet i instruktionen och f|rsta tecknet i kommentaren. 5 OBJEKTKOD ============ Objektkoden {r det utdata som ASS producerar (om k{llkoden {r fri fr}n fel) och den kan erh}llas i fem olika format. Med direktivet OBJ (kapitel 4.1.2) kan man i k{llkoden v{lja format, annars fr}gar ASS om format p} bildsk{rmen. Med direktivet SAVE (se kapitel 4.1.3) kan man i k{llkoden ange ett filnamn s} att objektkoden automatiskt sparas med detta namn p} flexskiva. Om filnamnet inte anges i k{llkoden fr}gar ASS efter det p} bildsk{rmen om ABS-fil eller ITH-fil framst{lls. Om en lista ska framst{llas fr}gar ASS alltid efter filnamn. 5.1 BASIC-program ------------------ BASIC-programmet inneh}ller POKE-satser som placerar koden p} r{tt st{lle i minnet. Om en ENTRY-adress har definierats (se kapitel 4.1.12) placeras satsen Z=CALL(nn) i BASIC-programmet. BASIC-programmet kan sparas automatiskt om direktivet SAVE anv{nds (kapitel 4.1.3). En nackdel med POKE-satser {r att de tar upp mycket minnesutrymme. 5.2 Komprimerat program ------------------------ Det komprimerade programmet lagrar koden v{ldigt effektivt i BASIC-rader. Programmet kan listas men raderna ser inte ut som normala BASIC-rader, det beror p} att raderna inneh}ller maskinkod som lurar listrutinen i ABC80. Det medf|r ocks} att ett dylikt program m}ste sparas med SAVE p} skiva eller kassett. Om direktivet TITLE anv{nds (se kapitel 4.1.1) inneh}ller den f|rsta komprimerade raden i programmet TITLE-texten. Programmet kan sparas automatiskt om direktivet SAVE anv{nds (kapitel 4.1.3). N{r ett program med komprimerade rader exekveras placeras koden ut p} r{tt plats i minnet som med vanliga POKE-satser med den skillnaden att det g}r betydligt fortare. N{r all kod placerats i minnet kan man f} programmet att anropa en subrutin p} valfri adress i minnet. Denna adress kallas ENTRY-adress och best{ms vid assembleringen. Om den inte anges i k{llkoden (se kapitel 4.1.12) antar ASS att ENTRY inte |nskas. 5.3 ABS-fil ------------ Om man har flexskiva kan man bekv{mt framst{lla ABS-filer med ASS. En ABS-fil {r en fil som diskoperativsystemet (DOS) kan l{sa. Exempel p} ABS-filer {r CMDINT.SYS och LIB.ABS som brukar finnas p} systemskivor. ABS-filen kan sparas automatiskt om direktivet SAVE anv{nds (kapitel 4.1.3). Om ENTRY-adress inte anges (kapitel 4.1.12) antas ENTRY-adressen vara noll. 5.4 ITH-fil ------------ En ITH-fil {r en fil som inneh}ller koden i hexadecimal form och {r en vanlig textfil. Detta format anv{nds t ex som indata till vissa PROM-br{nnare. ITH-filen kan sparas automatiskt om SAVE anv{nds (kapitel 4.1.3). 5.5 Lista ---------- Den lista som kan framst{llas visar all k{llkod som l{sts samt alla instruktioners maskinkoder uttryckt i hexadecimal form. Om direktivet TITLE anv{nds (kapitel 4.1.1) kan man f} en rubrik |verst p} alla sidor. Antal rader/sida samt v{nster- och h|germarginal kan s{ttas med hj{lp av variabler i programmet ASS (kapitel 2). ASS fr}gar alltid efter filnamn f|r listan p} bildsk{rmen. Om man p} denna fr}ga endast trycker RETURN visas listan p} bildsk{rmen. Listningen kan d} bromsas genom att trycka p} en tangent. Mellanslagstangenten bromsar extra mycket. Notera att n{r listan skall framst{llas l{ses all k{llkod {n en g}ng.