III.6 Pseudo Instructions

In the subsequent paragraphs, all ASEM-51 pseudo instructions are described. Lexical symbols are written in lower case letters, while assembler keywords are written in upper case.
Instruction arguments are represented by <arg>, <arg1> or something like that. Numeric expressions are represented by <expr>, <expr1> and so on. Syntax elements enclosed in brackets are optional.
The ellipsis “...” means always “a list with any number of elements”.

DB <arg1> [,<arg2> [,<arg3> ... ]] define bytes

The DB instruction reserves and initializes a number of bytes with the values defined by the arguments. The arguments may either be expressions (which must evaluate to 8-bit values) or character strings of any length. DB is only allowed in the CODE segment!

Example:        DB 19,'January',98,(3*7+12)/11

DW <expr1> [,<expr2> [,<expr3> ... ]] define words

The DW instruction reserves and initializes a number of words with the values defined by the arguments. Every argument may be an arbitrary expression and requires two bytes of space. DW is only allowed in the CODE segment!

Example:        DW 0,0C800H,1999,4711

DS <expr> define space

Reserves a number of uninitialized bytes in the current segment. The value of <expr> must be known on pass 1! DS is allowed in every segment, except in the BIT segment!

Example:        DS 200H

DBIT <expr> define bits

Reserves a number of uninitialized bits. The value of <expr> must be known on pass 1! DBIT is only allowed in the BIT segment!

Example:        DBIT 16

NAME <symbol> define module name

Defines a module name for the OMF-51 object file. If no module name is defined, the module name is derived from the source file name. When generating Intel-HEX file output, the NAME instruction has no effect. The module name must be a legal assembler symbol. Only one NAME instruction is allowed within the program. The symbol however, may be redefined in the subsequent program.

Example:        NAME My_1st_Program

ORG <expr> origin of segment location

Sets the location counter of the current segment to the value <expr>. The value of <expr> must be known on pass 1! It must be greater or equal to the segment base address. The default value of all location counters at program start is 0.

Example:        ORG 08000H

USING <expr> using register bank

Sets the register bank used to <expr>, which must be in the range of 0...3. The USING instruction only affects the values of the special assembler symbols AR0, ... , AR7 representing the direct addresses of registers R0, ... , R7 in the current register bank. The value of <expr> must be known on pass 1! The default value for the register bank is 0.

Example:        USING 1

END end of program

This must be the last statement in the source file. After the END statement only commentary and blank lines are allowed!

Example:        END       ;end of program

<symbol> EQU <expr> define numeric constant
<symbol> EQU <reg> define invariant register
<symbol> SET <expr> define numeric variable
<symbol> SET <reg> define variable register

The EQU instruction defines a symbol for a numeric constant or a register. If a numeric expression <expr> is assigned to the symbol, it will be of the type NUMBER. If a register <reg> is assigned to the symbol, it will be of the type REGISTER. <reg> may be one of the special assembler symbols A, R0, R1, R2, R3, R3, R4, R5, R6, or R7.
A symbol once defined with EQU can never be changed!
The SET instruction is working quite similar to EQU. However, symbols defined with SET can be redefined with subsequent SET instructions! The values of <expr> and <reg> must be known on pass 1!
A symbol that has been SET, cannot be redefined with EQU!
A symbol that has been EQU'd cannot be reSET!
On pass 2, forward references to a SET symbol always evaluate to the last value, the symbol has been SET to on pass 1.
Register symbols can be used as instruction operands within the whole program instead of the corresponding registers.
Forward references to register symbols are not allowed!

Examples:
           MAXMONTH  EQU 12
           OCTOBER   EQU MAXMONTH-2
           COUNTREG  EQU R5

           CHAPTER   SET  1
           CHAPTER   SET  CHAPTER+1
           CHAPTER   SET  A

<symbol> CODE  <expr> define ROM address
<symbol> DATA  <expr> define direct RAM address
<symbol> IDATA <expr> define indirect RAM address
<symbol> BIT   <expr> define bit address
<symbol> XDATA <expr> define external RAM address

These instructions define symbolic addresses for the five 8051 memory segments (address spaces). For DATA, IDATA and BIT type symbols, the value of <expr> must not exceed 0FFH! The value of <expr> must be known on pass 1!
Once defined with one of the above instructions, the symbols cannot be redefined.

Examples:
           EPROM    CODE  08000H
           STACK    DATA       7
           V24BUF   IDATA   080H
           REDLED   BIT     P1.5
           SAMPLER  XDATA  0100H

CSEG [AT <expr>] switch to CODE  segment [at address]
DSEG [AT <expr>] switch to DATA  segment [at address]
ISEG [AT <expr>] switch to IDATA segment [at address]
BSEG [AT <expr>] switch to BIT   segment [at address]
XSEG [AT <expr>] switch to XDATA segment [at address]

These instructions switch to one of the five 8051 address spaces. If a segment base address is specified with “AT <expr>”, a new absolute segment is started, and the location counter is set to <expr>. If “AT <expr>” is omitted, the location counter keeps the previous value of the particular segment.
The value of <expr> must be known on pass 1!
At program start, the default segment is CODE and the base addresses and location counters of all segments are set to zero.

Examples:
          DSEG           ;switch to previous DATA segment

          CSEG AT 8000h  ;start a new CODE segment at address 8000H

          XSEG at 0      ;start a new XDATA segment at address 0