6.72.1 Description

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 64 KB (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 on all devices. Refer to Appendix A.

The result of these combinations is undefined:

LPM r30, Z+

LPM r31, Z+

Operation:

Comment:

(i)

R0 ← PS(Z)

Z: Unchanged, R0 implied destination register

(ii)

Rd ← PS(Z)

Z: Unchanged

(iii)

Rd ← PS(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)1001010111001000
(ii)1001000ddddd0100
(iii)1001000ddddd0101