13
ATmega16M1/32M1/64M1 [DATASHEET]
8209E–AVR–11/2012
Figure 6-3.
The X-, Y-, and Z-registers.
In the different addressing modes these address registers have functions as fixed displacement, automatic incre-
6.5
Stack Pointer
The Stack is mainly used for storing temporary data, for storing local variables and for storing return addresses
after interrupts and subroutine calls. Note that the Stack is implemented as growing from higher to lower memory
locations. The Stack Pointer Register always points to the top of the Stack. The Stack Pointer points to the data
SRAM Stack area where the Subroutine and Interrupt Stacks are located. A Stack PUSH command will decrease
the Stack Pointer.
The Stack in the data SRAM must be defined by the program before any subroutine calls are executed or interrupts
are enabled. Initial Stack Pointer value equals the last address of the internal SRAM and the Stack Pointer must be
The AVR Stack Pointer is implemented as two 8-bit registers in the I/O space. The number of bits actually used is
implementation dependent. Note that the data space in some implementations of the AVR architecture is so small
that only SPL is needed. In this case, the SPH Register will not be present.
15
XH
XL
0
X-register
70
7
0
R27 (0x1B)
R26 (0x1A)
15
YH
YL
0
Y-register
70
7
0
R29 (0x1D)
R28 (0x1C)
15
ZH
ZL
0
Z-register
70
7
0
R31 (0x1F)
R30 (0x1E)
Table 6-1.
Stack pointer instructions.
Instruction
Stack pointer
Description
PUSH
Decremented by 1
Data is pushed onto the stack
CALL
ICALL
RCALL
Decremented by 2
Return address is pushed onto the stack with a subroutine call or
interrupt
POP
Incremented by 1
Data is popped from the stack
RET
RETI
Incremented by 2
Return address is popped from the stack with return from
subroutine or return from interrupt