NOTE
The Keil C51 library includes a number of helper routines for the C51 compiler. These routines perform mundane tasks like loading and storing objects. The code to perform these operations is not included in-line but is implemented via a function call.
These routines are named using the following convention: ?C?tffmmm
where:
- t is the type field,
- ff is the function field,
- and mmm is the memory type field.
TYPE FIELD
The type field is a character that indicates the data type used:
- C indicates a character that is passed in A.
- I indicates an int that is passed in A/B.
- P indicates a 3-byte pointer that is passed in R1/R2/R3.
- L indicates a long that is passed in R4/R5/R6/R7.
- L0 indicates a long that is passed in R0/R1/R2/R3.
FUNCTION FIELD
The function field indicates the operation that is performed:
- LD indicates a read (load) operation.
- ILD indicates an increment and load operation (pre-increment load). The increment value is passed in A/B.
- LDI indicates a load and increment operation (post-increment load). The increment value is passed in A/B.
- ST indicates a write (store) operation.
- STK indicates writing of constant data encoded as DB statements immediately following the library function call.
MEMORY TYPE FIELD
The memory type field indicates that memory area that is accessed:
- XDATA represents XDATA memory.
- PDATA represents PDATA memory.
- IDATA represents IDATA memory.
- DATA represents DATA memory.
- CODE represents CODE memory.
- PTR represents a 3-byte pointer in R1/R2/R3.
- OPTR represents a 3-byte pointer plus an offset in R1/R2/R3 + DPTR.
EXAMPLE
The library routine ?C?PLDIPTR is passed a generic pointer in R1/R2/R3 (P). This pointer points to a pointer which is returned in R1/R2/R3 (PTR). A/B contain the MSB and LSB of a value to add to the pointer (LDI). The pointer returned is the pointer value before the increment is added.