| 堆棧主要用于儲存臨時數(shù)據(jù)、本地變量和中斷、子程序調(diào)用產(chǎn)生后的返回地址。堆棧指針寄存器通常指向堆棧的頂部。注意堆棧的執(zhí)行是從較高的存儲器地址到較低的存儲器地址。也就是說,一條堆棧PUSH命令會使堆棧指針減小。 堆棧指針指向數(shù)據(jù)SRAM堆棧區(qū)域中子程序和中斷堆棧被定位的位置。在任何子程序被調(diào)用或中斷被使能之前,位于數(shù)據(jù)SRAM中的這一堆?臻g必須由程序定義好。堆棧指針必須被設(shè)在0x60之上。當(dāng)使用PUSH指令向堆棧中壓入一個數(shù)據(jù)時,堆棧指針自動減1;而當(dāng)返回地址被子程序調(diào)用或中斷壓入堆棧時,堆棧指針自動減2。當(dāng)使用POP指令把一個數(shù)據(jù)從堆棧中彈出時,堆棧指針自動加1;而由子程序的RET或中斷程序的RETI彈出數(shù)據(jù)時,堆棧指針自動加2。 AVR堆棧指針是位于I/O空間的兩個8位寄存器。確切使用的位數(shù)取決于實(shí)際情況。注意,在一些AVR架構(gòu)的實(shí)現(xiàn)中數(shù)據(jù)空間非常小,所以只需要使用SPL。這種情況下,SPH寄存器將不存在。 
|