Loads one byte pointed to by the Z-register into the destination register Rd. This instruction features a 100% space effective constant initialization or constant data fetch. The Program memory is organized in 16-bit words while the Z-pointer is a byte address. Thus, the least significant bit of the Z-pointer selects either low byte (ZLSB = 0) or high byte (ZLSB = 1). This instruction can address the first 64KB (32K words) of Program memory. The Z-pointer Register can either be left unchanged by the operation, or it can be incremented. The incrementation does not apply to the RAMPZ Register.
Devices with Self-Programming capability can use the LPM instruction to read the Fuse and Lock bit values. Refer to the device documentation for a detailed description.
The LPM instruction is not available in all devices. Refer to the device specific instruction set summary.
The result of these combinations is undefined:
LPM r30, Z+
LPM r31, Z+
Operation: |
Comment: |
||
(i) |
R0 ← (Z) |
Z: Unchanged, R0 implied destination register |
|
(ii) |
Rd ← (Z) |
Z: Unchanged |
|
(iii) |
Rd ← (Z) Z ← Z + 1 |
Z: Post incremented |
|
Syntax: |
Operands: |
Program Counter: |
|
(i) |
LPM |
None, R0 implied |
PC ← PC + 1 |
(ii) |
LPM Rd, Z |
0 ≤ d ≤ 31 |
PC ← PC + 1 |
(iii) |
LPM Rd, Z+ |
0 ≤ d ≤ 31 |
PC ← PC + 1 |
16-bit Opcode:
(i) | 1001 | 0101 | 1100 | 1000 |
(ii) | 1001 | 000d | dddd | 0100 |
(iii) | 1001 | 000d | dddd | 0101 |