VTK-51  
  home     assembler     thefroemmings.net 

ASSEMBLER INSTRUCTIONS

This assembler accepts standard 8051 instruction formats plus the AT89LP extended instructions listed:
INSTRUCTION  BYTES  CYCLES
-----------  -----  ------
BREAK          2      2
JMP @A+PC      2      3

ASSEMBLER DIRECTIVES

.ORG expr
Start assembling at the address specified by the expression expr. An error occurs if the assembler starts assembling over an address space that has previously been assembled into.

.EQU symbol, expr
Set symbol to the value of expr. The value for expr must be known during the first pass, when the line containing the .EQU is encountered.

.DB expr, expr, ...
Assemble the bytes specified by the expression into memory. A string may also be specified with this directive.

.BYTE expr, expr, ...
Assemble the bytes specified by the expression into memory. A string may also be specified with this directive.

.WORD expr, expr, ...
Assemble the words specified by the expression into memory. The byte ordering used, is that used by the 8031.

.FLAG symbol1, symbol.[0-7]
Sets symbol1 to the bit address specified by the symbol.[0-7] expression. Where [0-7] denotes a character between 0 and 7. The resulting bit address is checked to see if it is a valid bit address.

.END
This directive is ignored.

.SKIP expr
Adds the value of expr to the location counter. Used to reserve a block of uninitialized data. Expr should be in bytes.

LEXICAL CONVENTIONS

All characters following a semi-colon are ignored until a newline is encountered.

All numbers default to decimal, unless the number starts with one of the following:

  • 0x or 0X: This indicates a hexadecimal number. ie. 0x00ff
  • 0b or 0B: This indicates a binary number. (1's and 0's). ie. 0b1100110010
  • 0: This indicates an octal number. ie. 0377
  • All numbers default to decimal, unless the number ends with one of the following characters:

  • b or B: This indicates a binary number. Unless 0x was used above, ie. 1010101b
  • h or H: This always indicates a hex number, However the if the first character is non-numerical, then either 0x or 0 must be specified. This avoids confusing the assembler into thinking a hex number is a symbol. For example: 0ffh, 0xffh, 0XffH, 20h, 0x20 and 020h are means to specify a valid hexdigit. But the following are not: ffh, 0ff.
  • d or D: This forces a number to decimal. Unless 0X was used. ie. 129d
  • o or O: This causes the number to be interpreted as octal. ie. 377o
  • A character constant can be entered as 'c' where c is some character. \b, \n, \r, \t, \', and \0 are also valid. A character constant can be used anywhere that an integer value can.

    A string is entered as a set of characters enclosed in double quotes "". A string is only valid with the .BYTE or .DB directives. \b, \n, \r, \t, \" are also valid escapes. However \0 is not.

    Instructions, directives, and the symbols: R0, R1, R2, R3, R4, R5, R6, R7, A, AB, and C can be entered in upper or lower case without assembler confusion. These words however cannot be defined as a user symbol. Any user symbol may be used, and case will be preserved. So the user symbols "foo" and "Foo" are different, but "addc" is the same as "aDdC".

    A symbol can be any alpha numerical character plus the underscore ('_').

    Expressions are accepted in most places where a value or a symbol is needed. An expression consists of the following operators. All operators evaulate to integer objects (higher precedence opertors listed first):
    -Unary minus
    &Bit-wise AND
    |Bit-Wise OR
    *Integer multiplication
    /Integer division
    %Integer modulus
    +Integer addition
    -Integer subtraction

    In addition to these operators, a special symbol '*' may be used to represent the current location counter.