home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / crossasm / uasm.arc / U-ASM.DOC < prev    next >
Text File  |  1986-04-10  |  22KB  |  629 lines

  1. .R:Q
  2. .H:
  3. .H:
  4. .H:...UASM - Universal Cross Assembler...
  5. .H:
  6. .F:
  7. .F:...Custom Computer Consultants        $$$                  10 April 1986...
  8. .F:
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.                         UASM - Universal Cross Assembler
  40.  
  41.  
  42.  
  43.                                       8051
  44.  
  45.                                       6805
  46.  
  47.                                        Z8
  48.  
  49.  
  50.  
  51.  
  52.  
  53.                                                         10 April 1986
  54. 
  55.                               1. INTRODUCTION
  56.     
  57.     General Description
  58.     
  59.     UASM  is  a  program which facilitates the writing of assemblers for single 
  60.     chip microcomputers.  It has only the rudimentary features of decoding  the 
  61.     instruction  set  and a few pseudo operations.  It is intended for programs 
  62.     that can be contained in a single  file  which  is  typical  of  the  short 
  63.     programs written for these types of processors.  In particular there are no 
  64.     provisions  for  macros  or include files.  The performance when generating 
  65.     both an object file and a listing is about 700 statements per  minute  when 
  66.     using a hard disk.
  67.     
  68.     
  69.     Program Execution
  70.     
  71.     UASM has several different names depending on which processor it has been 
  72.     built for.  It is invoked by entering the name of the program ( asm05 for 
  73.     the 6805 version) followed by the name of the source file followed by the 
  74.     option switches.  The allowable options are at the present time are :
  75.     
  76.         o       creates an object output file from the name of the source file 
  77.                 and the extension ".HEX".
  78.  
  79.         l       creates a listing file from the name of the source file and the 
  80.                 extension ".LST".
  81.  
  82.         n       suppress the listing function.
  83.  
  84.     If the l and the n options are both absent then the  listing  goes  to  the 
  85.     terminal.  If  no source file is specified then the input is taken from the 
  86.     terminal and ouput is written to the terminal.  The  assembler  is  entered 
  87.     directly  into  pass  2 with no symbol table.  This feature was mainly used 
  88.     for program debugging and has not been removed.  
  89.  
  90.  
  91.     Program Operation
  92.  
  93.     UASM is a two pass assembler.  On the first pass it reads  statements  from 
  94.     the  input file and builds a symbol table.  On the second pass it reads the 
  95.     statements from the input file and creates the object output file  and  the 
  96.     listing  file  using  the  symbol table information it created in the first 
  97.     pass.  At the end of the listing file the content of the  symbol  table  is 
  98.     added.  The  object ouput is in Intel Hex format with a maximum of 34 bytes 
  99.     to a record.  When displayed on  an  80  column  screen  the  records  will 
  100.     exactly  fill  on  line.  The  listing  file is formatted with 55 statement 
  101.     lines and four header lines per page and assumes 11 inch pages and 6  lines 
  102.     per inch.  This leaves a combined top and bottom margin of seven lines.  
  103.  
  104.     
  105.     Files
  106.  
  107.     The UASM system was written in the C language and consists of the following 
  108.     set of files :
  109.  
  110.                 STDIO.H         Standard I/O Header File
  111.                 UASM.H          UASM header file; same for all versions
  112.  
  113.                 UASM.C          Source code for the part common to all the
  114.                                 versions.
  115.                 51SYM.C         Symbols and processing routines for the 8051.
  116.                 6805SYM.C       Symbols and processing routines for the 6805.
  117.                 Z8SYM.C         Symbols and processing routines for the Z8.
  118.     
  119.                 ASM51.EXE       8051 assembler execution file.
  120.                 ASM05.EXE       6805 assembler execution file.
  121.                 ASMZ8.EXE       Z8 assembler execution file.
  122.  
  123.                 51VAL.MAC       8051 validation/example file.
  124.                 6805VAL.MAC     6805 validation/example file.
  125.                 Z8VAL.MAC       Z8 validation/example file.
  126.  
  127.                 U-ASM.DOC       This File
  128.     
  129. 
  130.                               2. Assembler Conventions
  131.       
  132.     
  133.     Statement Format
  134.  
  135.     The  primary  component  in  an assembly language program is the statement, 
  136.     which  consists  of  an  instruction  and  its  operands.  The  instruction 
  137.     specifies  and  action  to be taken and the operands specify the data to be 
  138.     acted upon.  An assembly language statement can include four fields: 
  139.  
  140.                 Statement Labels
  141.  
  142.                 Instructions or Pseudo Operations
  143.  
  144.                 Operands
  145.  
  146.                 Comments
  147.  
  148.     The statement label and comments are optional.  The statement may have zero 
  149.     or more operands depending on the instruction.  The fields in  a  statement 
  150.     are  separated  from  each  other  by  one  or more delimiters.  Delimiters 
  151.     include spaces, tabs, commas, semi-colons, colons, newlines.  To accomodate 
  152.     various programming styles the rules on delimiters  are  very  relaxed.  In 
  153.     general  blanks separate fields and commas separate operands.  Colons after 
  154.     labels are optional and delimiters for the comment field are also optional.
  155.     This can lead to problems with evaluating expressions if the first word  in 
  156.     a comment happens to be a recognizeable symbol.  Therefore use of a comment 
  157.     delimiter  (";")  is  strongly  recommended.  Comments may occupy an entire 
  158.     line when the first character is either a semi-colon (";") or  an  asterisk 
  159.     ("*").  
  160.  
  161.     Program Labels and Identifiers
  162.  
  163.     A  program  label  is any identifier that begins in the first position of a 
  164.     line.  An identifier is any string of alphanumeric characters  whose  first 
  165.     character  is  alphabetic.  A  program label may be followed by an optional 
  166.     colon.  A character is alphbetic if it is either upper case or lower  case.
  167.     A  character  is  alphanumeric  if  it  is  either alphabetic or numeric or 
  168.     underscore.  
  169.  
  170.  
  171.  
  172.         upper case =  { A B C D E F G H I J K L M N O P Q R S T U V W X Y Z }
  173.     
  174.         lower case =  { a b c d e f g h i j k l m n o p q r s t u v w x y z }
  175.  
  176.         numeric = { 0 1 2 3 4 5 6 7 8 9 }
  177.  
  178.         alphabetic = { upper case } or { lower case }
  179.  
  180.         alphanumeric = { alphabetic } or { numeric } or { _ }
  181.  
  182.         identifier = { alphabetic }  followed by one or more { alphanumeric } 
  183.  
  184.         program label = identifier in first position of a line
  185.  
  186.  
  187.  
  188.     Each time an identifier is used it must be written in exactly the same  way 
  189.     or  it  will  be considered a different identifier.  Identifiers may be any 
  190.     length but only 31 characters are significant.  The following are valid and 
  191.     unique identifiers: 
  192.     
  193.                 begin                   BEGIN                   bEgIn
  194.  
  195.                 label12                 LABEL12                 lAbEl12
  196.  
  197.                 group1:                 GROUP1:                 gRoUp1:
  198.  
  199.  
  200.     In addition to their statement labeling function identifiers also represent 
  201.     constants and variable names.  They may even define a value for the symbols 
  202.     which  represent  instructions and pseudo operations,  and no conflict will 
  203.     result.  
  204.  
  205.     Instructions
  206.  
  207.     The instruction field contains a mnemonic symbol which specifies one of the 
  208.     processors instructions or a pseudo operation.  A pseudo  operation  is  an 
  209.     instruction  to the assembler to perform some action.  Instructions must be 
  210.     preceeded and followed by one or more spaces  to  separate  them  from  the 
  211.     label   and  operand  fields.   Pseudo  operations  are  described  in  the 
  212.     appendicies 
  213.  
  214.     Operands
  215.  
  216.     Depending on the instruction there can  be  zero,  one  or  more  operands.
  217.     Multiple operands are separated from each other by commas.  Operands supply 
  218.     the  information  the  instruction  needs  to  carry out its operation.  An 
  219.     operand can be : 
  220.  
  221.                 Immediate data
  222.  
  223.                 The address of a location from which data is to be taken
  224.                 (source address)
  225.  
  226.                 The address of a location where data is to be put(destination
  227.                 address)
  228.  
  229.                 The address of a program location to which program control is 
  230.                 to be passed.
  231.  
  232.                 A condition code, used to direct the flow of program control
  233.  
  234.  
  235.     Each of the different assemblers has specific rules on the ordering of the 
  236.     operands.  See the specific appendix for details.
  237.  
  238.     
  239.     Comments
  240.  
  241.     Comments may occur by themselves on a line or be placed after the  operands 
  242.     field.  When  they occur by themselves on a line the first character of the 
  243.     line must be a semi-colon (";") or an asterisk ("*").  When they  are  part 
  244.     of  a  line  they  may follow the operand field with or without a specdific 
  245.     delimiter other than blanks.  The use of  a  delimiter  is  recommended  if 
  246.     there  exists  the  possibility  of  evaluating  part  of the comment as an 
  247.     expression.  
  248.  
  249.  
  250.         Constants
  251.  
  252.     Numeric  constants  may  be  expressed  in  binary,   octal,   decimal  and 
  253.     hexidecimal.  Decimal  is  the  default  radix  for  evaluation  of numeric 
  254.     constants.  The default radix may be overridden by the use of a  suffix  on 
  255.     the  end  of  the  number.  The  suffix is always a lower case letter.
  256.     
  257.     The following are valid suffixes: 
  258.  
  259.                 b  -  binary
  260.  
  261.                 q  -
  262.                 o  -  octal
  263.  
  264.                 d  -  decimal
  265.  
  266.                 h  -
  267.                 x  -  hexidecimal
  268.  
  269.     The convention of using lower case letters for the radix specifier requires 
  270.     that  hexidecimal  digits for 10 through 15 be designated by the upper case 
  271.     letters A through F.  
  272.     
  273.     A character constant is specified by  enclosing  the  character  in  single 
  274.     quotes.  
  275.     
  276.  
  277.         Data Variables
  278.  
  279.     A  data  variable  is  a memory location which contains a variable piece of 
  280.     data.  There can be separate memory areas for different kinds of data.  The 
  281.     data variable name can be associated with registers, bits, internal memory, 
  282.     and external memory.
  283.     
  284.  
  285.         Location Counter
  286.  
  287.     The  value  of the location counter is represented by the dollar sign.  The 
  288.     dollar sign may be freely used in expressions.  
  289.  
  290.     
  291.         Memory Segments
  292.  
  293.     In the single chip microprocessors  served  by  this  assembler  there  are 
  294.     multiple address spaces.  These separate address spaces are called segments 
  295.     and  are  indicated to the assembler by appropriate pseudo operations.  The 
  296.     available segments and pseudo operations are shown in the following table: 
  297.  
  298.  
  299.         Pseudo
  300.         Operation       8051            6805            Z8
  301.  
  302.         CSEG            Yes             Yes             Yes
  303.  
  304.         DSEG            Yes             Yes             Yes
  305.  
  306.         BSEG            Yes             No              No
  307.  
  308.         RSEG            No              No              Yes
  309.  
  310.         XSEG            Yes             No              Yes
  311.  
  312.  
  313.  
  314.     NOTE :
  315.  
  316.     Object output will be placed only in the code and external segments.
  317.     
  318.     
  319.         Expressions and Operators
  320.     
  321.     Expressions are formed by combining constants and data variable names  with 
  322.     arithmetic  and  logical  operators.  Evaluation  is  left  to  right  with 
  323.     precedence.  The operators are grouped according to the following table: 
  324.     
  325.         HIGHEST        (  )
  326.  
  327.                        +  -  ~                  
  328.  
  329.                        *  /  %         
  330.  
  331.                        .  +  -
  332.  
  333.                        <  >
  334.  
  335.                        &
  336.  
  337.                        ^
  338.  
  339.         LOWEST         |                               
  340.  
  341.     
  342.  
  343.         Parentheses  ( )
  344.  
  345.     Parentheses are used to force the evaluation of the sub expression  within.  
  346.     They  alter  the  normal left to right evaluation of an expression.  In the 
  347.     following expression: 
  348.  
  349.                         A - ( B + C )
  350.  
  351.     the sub-expression B + C is evaluated and then  added  to  A.  Without  the 
  352.     parentheses the evaluation would be: 
  353.  
  354.                         ( A - B ) + C
  355.  
  356.     
  357.         Unary Operators  +  -  ~
  358.  
  359.     Three  unary  operators  are provided:  unary plus and minus along with the 
  360.     logical NOT operator ( ~ ) have the highest precedence.  
  361.     
  362.  
  363.         Arithmetic Operators  +  -  *  /  .  %
  364.  
  365.     The arithmetic operators  are  the  familiar  plus,  minus,  multiply,  and 
  366.     divide.   These  operations  are  performed  on  16  bit  two's  complement 
  367.     integers.  The integer division  operation  will  truncate  any  fractional 
  368.     result.  
  369.  
  370.     The  period is used as a synonym for plus.  It occurs primarily in the 8051 
  371.     assembler for specifying a bit field.  
  372.  
  373.     The percent is the modulus operator.  It divides the left  operand  by  the 
  374.     right operand and produces the remainder.  
  375.  
  376.  
  377.         Shift Operators  <  >
  378.  
  379.     The  left  and  right  angle  brackets  are  used  for left and right shift 
  380.     operations respectively.  The operand on the left is shifted the number  of 
  381.     places specified by the operand on the right.  
  382.  
  383.     
  384.         Logical Operators  &  |  ^
  385.  
  386.     The  logical  operators  perform  the indicated boolean operation on 16 bit 
  387.     unsigned integers.  
  388.     
  389.                 The ampersand ( & ) performs a logical AND
  390.     
  391.                 The bar ( | ) performs a logical OR
  392.  
  393.                 The caret ( ^ ) performs a logical EXCLUSIVE OR
  394. 
  395.                                 3.  Pseudo Operations
  396.  
  397.  
  398.         ASCII - Define a String of ASCII Characters
  399.  
  400.     This operation takes a string of ASCII enclosed within any convenient  pair 
  401.     of  delimiters  and assembles one byte per character in the string.  If the 
  402.     trailing delimiter is omitted then the end of line character is assumed  to 
  403.     terminate the string.  
  404.  
  405.         Examples:
  406.  
  407.                 ascii   /String in Slashes/
  408.  
  409.                 ascii   "String in Double Quotes"
  410.  
  411.                 ascii   'String in Single Quotes'
  412.  
  413.  
  414.         BIT - Define Symbol as a Bit Address
  415.  
  416.     This  operation  defines  the  label to the left of the pseudo operation to 
  417.     have the value of the expression on the right.  This  pseudo  operation  is 
  418.     valid only in the 8051 assembler.  
  419.  
  420.         Example:
  421.  
  422.                 irq     bit     0EAx
  423.  
  424.         defines the symbol irq and assigns it the hexidecimal value EA.
  425.  
  426.  
  427.     This operation is similar in function to the EQU and REG pseudo operations.  
  428.  
  429.  
  430.         BSEG - Define Bit Segment
  431.  
  432.     This  operation  takes  no  operands.  It  tells  the  assembler to set the 
  433.     location counter to the current value for  the  bit  segment.  The  initial 
  434.     values  for  the  bit  segment  depend  on the particular assembler and are 
  435.     currently set to the following values : 
  436.  
  437.                 8051 :           0
  438.  
  439.                 6805 :           Not Implementd
  440.  
  441.                 Z8   :           Not Implementd -- See RSEG
  442.  
  443.     Refer to the descriptions of CSEG, RSEG, DSEG,  and XSEG.  Each time one of 
  444.     the  segment  pseudo  operations  is  invoked it saves the current location 
  445.     counter and retrieves the indicated one.  Segments may be freely  mixed  in 
  446.     the source file.  
  447.  
  448.  
  449.  
  450.         CSEG - Define Code Segment
  451.  
  452.     This  operation  takes  no  operands.  It  tells  the  assembler to set the 
  453.     location counter to the current value for the  code  segment.  The  initial 
  454.     values  for  the  code  segment  depend on the particular assembler and are 
  455.     currently set to the following values : 
  456.  
  457.                 8051 :           0
  458.  
  459.                 6805 :         80x
  460.  
  461.                 Z8   :           0
  462.  
  463.     Refer to the descriptions of BSEG, RSEG, DSEG,  and XSEG.  Each time one of 
  464.     the  segment  pseudo  operations  is  invoked it saves the current location 
  465.     counter and retrieves the indicated one.  Segments may be freely  mixed  in 
  466.     the source file.  
  467.  
  468.  
  469.         DB - Define Byte
  470.  
  471.     This  pseudo  operation  takes one or more expressions separated by commas, 
  472.     evaluates the expressions,  converts the results to bytes,  and places them 
  473.     in sequential locations.  
  474.  
  475.         Example:
  476.  
  477.                 db      93x,a+4,22
  478.  
  479.  
  480.         DS - Define Storage
  481.  
  482.     This  pseudo  operation  takes  a  single operand and adds the value to the 
  483.     current location counter.  The effect is to reserve that many bytes without 
  484.     assigning a value to them.  The value zero ( 0 ) may  be  used  to  provide 
  485.     duplicate definitions of the same symbol.  
  486.  
  487.         Example:
  488.  
  489.                 ds      14      ; reserve 14 bytes
  490.  
  491.         table   ds      0       ; define table to have the value of the current
  492.         item    ds      1       ; location counter.  Define item to have the 
  493.         word    ds      2       ; same value as table.  Define word = table + 1
  494.  
  495.  
  496.         DSEG - Define Data Segment
  497.  
  498.     This  operation  takes  no  operands.  It  tells  the  assembler to set the 
  499.     location counter to the current value for the  data  segment.  The  initial 
  500.     values  for  the  data  segment  depend on the particular assembler and are 
  501.     currently set to the following values : 
  502.  
  503.                 8051 :          32
  504.  
  505.                 6805 :           0
  506.  
  507.                 Z8   :           0
  508.  
  509.     Refer to the descriptions of BSEG, RSEG, CSEG,  and XSEG.  Each time one of 
  510.     the  segment  pseudo  operations  is  invoked it saves the current location 
  511.     counter and retrieves the indicated one.  Segments may be freely  mixed  in 
  512.     the source file.  
  513.  
  514.  
  515.         DW - Define Word
  516.  
  517.     This  pseudo operation is similar to DB except tha each expression produces 
  518.     a two byte word value which is placed in memory with the  most  significant 
  519.     byte  first  and the least significant byte last.  Multiple operands may be 
  520.     specified separated by commas.  
  521.  
  522.         Example :
  523.  
  524.                 dw      137x    ; defines the word with value 137 hex.
  525.  
  526.  
  527.         EQU - Equate
  528.  
  529.     This operation defines the label to the left of  the  pseudo  operation  to 
  530.     have the value of the expression on the right.  
  531.  
  532.         Example:
  533.  
  534.                 irq     equ     85
  535.  
  536.         defines the symbol irq and assigns it the decimal value 85
  537.  
  538.  
  539.     This operation is similar in function to the BIT and REG pseudo operations.  
  540.  
  541.  
  542.         ORG - Origin
  543.  
  544.     This  pseudo  operation  takes  a  single  operand which is assigned to the 
  545.     location counter for the current segment.  
  546.  
  547.         Example :
  548.  
  549.                 cseg
  550.                 org     200x    ; set the code segment location counter to
  551.                                 ; hexidecimal 200.
  552.  
  553.         PAGE - New Page
  554.  
  555.     This pseudo operation causes the listing of the following lines to begin on 
  556.     a new page.  It take no operands.  
  557.  
  558.  
  559.         RADIX - Set Radix
  560.  
  561.     This pseudo operation sets the default radix for  number  conversion.  This 
  562.     radix  is  used  for all number conversions unless explicitly overridden by 
  563.     the radix suffix character.  Standard values for radix are 2,  8,  10,  and 
  564.     16.  Other  values are possible and use the upper case letters to stand for 
  565.     the digits 10 through whatever.  
  566.  
  567.         Example :
  568.  
  569.                 radix   16d     ; specify hexidecimal
  570.  
  571.                 radix   8d      ; specify octal
  572.  
  573.     The default radix for UASM is ten.
  574.  
  575.  
  576.         REG - Define Symbol as a Working Register
  577.  
  578.     This operation defines the label to the left of  the  pseudo  operation  to 
  579.     have  the  value  of the expression on the right.  This pseudo operation is 
  580.     valid only in the Z8 assembler.  
  581.  
  582.         Example:
  583.  
  584.                 irq     reg     10
  585.  
  586.         defines the symbol irq and assigns it the decimal value 10.
  587.  
  588.  
  589.     This operation is similar in function to the EQU and BIT pseudo operations.  
  590.  
  591.  
  592.     RSEG - Define Working Register Segment
  593.  
  594.     This operation takes no  operands.  It  tells  the  assembler  to  set  the 
  595.     location  counter  to  the  current  value  for  the register segment.  The 
  596.     initial values for the register segment depend on the particular  assembler 
  597.     and are currently set to the following values : 
  598.  
  599.                 8051 :           Not implemented -- See BSEG
  600.  
  601.                 6805 :           Not Implementd
  602.  
  603.                 Z8   :           0
  604.  
  605.     Refer to the descriptions of CSEG,  BSEG, DSEG, and XSEG.  Each time one of 
  606.     the segment pseudo operations is invoked  it  saves  the  current  location 
  607.     counter  and  retrieves the indicated one.  Segments may be freely mixed in 
  608.     the source file.  
  609.  
  610.  
  611.     XSEG - Define External Segment
  612.  
  613.     This operation takes no  operands.  It  tells  the  assembler  to  set  the 
  614.     location  counter  to  the  current  value  for  the external segment.  The 
  615.     initial values for the external segment depend on the particular  assembler 
  616.     and are currently set to the following values : 
  617.  
  618.                 8051 :           16384
  619.  
  620.                 6805 :           Not Implementd
  621.  
  622.                 Z8   :           4096
  623.  
  624.     Refer to the descriptions of CSEG,  RSEG, DSEG, and BSEG.  Each time one of 
  625.     the segment pseudo operations is invoked  it  saves  the  current  location 
  626.     counter  and  retrieves the indicated one.  Segments may be freely mixed in 
  627.     the source file.  
  628.  
  629.