;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;??
 +---------------------------+
 !                           !
 !  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.
