6.1.9.12 Dlabs Directive
The DLABS
directive must be used to reserve one or more
bytes of memory at the specified linear address on those devices that support linear
addressing. Typically, the directive is used to allocate memory for large objects that
do not fit within one data bank and which must be accessed via linear addressing. The
general form of the directive is:
DLABS memorySpace, address, bytes [,symbol]
The memorySpace
argument is a number
representing the linear memory space. This will be the same number as the banked data
space. The address
is the address at which the reservation will
take place. This can be specified as either a linear or banked address. The
bytes
is the number of bytes that is to be reserved. The
symbol is optional and refers to the name of the object at the address.
Specifying a symbol allows you to access the reserved memory in your
code. The symbol is automatically made globally accessible and is equated to the address
specified in the directive in linear addressing form. For example, the symbol,
foo
, defined by the following directive:
DLABS 1,0x120,128,foo
movlw low(foo)
movwf FSR1L
movlw high(foo)
movwf FSR1H
The memory space number is the same as the number specified with the
space
flag option to psects (see 6.1.9.39.18 Space Flag).
The linker reads this DLABS
-related information from
object files and ensures that the reserved addresses are not used for other memory
placement.