home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / draco / draco-1.ark / DAS.REF < prev    next >
Text File  |  1986-11-12  |  4KB  |  99 lines

  1. XVIII. The Draco assembler
  2.  
  3.     The syntax expected by the Draco assembler is very similar to that
  4.     expected by the standard CP/M assembler, ASM.COM. Blank lines are
  5.     ignored, labels must start in column 1 and can be followed by a colon.
  6.     They can be on a line all by themselves. There must be at least one
  7.     blank or tab before the mnemonic field of each line. Comments start
  8.     with a semicolon and extend to the end of the line. Symbols are the
  9.     same as in the Draco compiler - they can be any length and are built
  10.     from upper and lower case letters, digits, periods and underscores. Case
  11.     is significant. Constants are numeric constants as in Draco (binary,
  12.     octal, decimal and hexadecimal). Expressions are allowed in all places
  13.     which require numbers. They can use all of Draco's operators: unary
  14.     ~, -, and |; binary &, |, ><, >>, <<, +, -, *, / and %.
  15.     
  16.     Source files for the Draco assembler consist of file declarations
  17.     (include files are not supported, hence 'global' variables are not
  18.     available), followed by procedure definitions. Declarations can be
  19.     declarations of external procedures, which consist of the name of the
  20.     procedure as a label, and the mnemonic 'extern'; a named constant
  21.     declaration, consisting of the constant name as label, ':=' as mnemonic,
  22.     and the constant value as operand; or a variable declaration, consisting
  23.     of the variable name as label, 'ds' as mnemonic, and the size of the
  24.     variable in bytes as the operand. Symbols declared outside of any
  25.     procedure are available throughout the source file (similar to 'file'
  26.     variables in Draco).
  27.     
  28.     Each procedure definition consists of several lines. The first line has
  29.     the procedure's name as label and 'proc' as mnemonic. After that comes
  30.     optional local declarations, syntactically identical to the file
  31.     declarations. After the declarations must come a line containing 'code'
  32.     as the mnemonic. This signals the beginning of the code portion of the
  33.     procedure. The code portion consists of normal instruction lines -
  34.     mnemonic and any required operands (operands are separated by commas);
  35.     string constants consisting of characters enclosed in double quotes (");
  36.     or constant byte or word definitions, consisting of the mnemonic 'db' or
  37.     'dw', followed by one or more expressions, separated by commas. String
  38.     constants do not automatically include a terminating 0. The full escape
  39.     conventions, as in Draco, are supported; e.g. (\r, \n, \b, \t, \e). The
  40.     procedure is closed by a line containing 'corp' as the mnemonic. The
  41.     symbols 'a', 'b', 'c', 'd', 'e', 'h', 'l', 'psw', and 'sp' are predefined
  42.     with the appropriate values.
  43.     
  44.     The Draco assembler is a one pass assembler. This means that symbols
  45.     (other than program labels) cannot be used before they have been defined.
  46.     Also, the assembler is not able to handle expressions involving the
  47.     addresses of variables; thus one cannot do something like 'lda  x+2',
  48.     where x is a variable. This can be handled by the format of the .REL
  49.     files (the compiler does it for things like 'a[3]'), but the capability
  50.     of distinguishing between relocatable and absolute expressions has not
  51.     been built into the assembler. The assembler is a very simple one, not
  52.     intended for heavy use. Nearly all programs can be written completely
  53.     in Draco. The assembler is needed only for strange machine-specific
  54.     things (like the 'daa' instruction), and in cases where efficiency is
  55.     vital.
  56.     
  57.     The various forms are illustrated in the following example, which is not
  58.     a meaningful program:
  59.     
  60.     Var1    ds    2
  61.     Var2    ds    1
  62.     CONS    :=    13
  63.     Var3    ds    CONS * 2    ; allocate CONS words
  64.     
  65.     ; here comes the procedures
  66.     
  67.     test    proc
  68.     doit    extern
  69.     XXX    :=    1024 / CONS
  70.     local    ds    XXX
  71.         code
  72.         lhld    Var1
  73.         xchg            ; stash it in DE
  74.         lhld    local        ; load first 2 bytes of 'local'
  75.         dad    d
  76.         shld    Var1
  77.         call    doit
  78.     l1
  79.         lda    13
  80.         sta    XXX        ; absolute addressing
  81.         lxi    h,strcon
  82.         call    doit
  83.         jnc    l1
  84.         jnz    l2
  85.         xra    a
  86.         sta    Var2
  87.     l2:
  88.         ret
  89.     strcon    "this is a string constant\r\n"
  90.         db    0
  91.         dw    XXX,XXX/2,XXX/4, XXX / 8    ; data table
  92.         corp
  93.     
  94.     test    proc
  95.         code
  96.         rst    7
  97.         ret
  98.         corp
  99.