满递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效数据项的最高地址。指令如LDMFA,STMFA等。
空递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一个空位置。指令如LDMEA,STMEA等。
满递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有效数据项的最低地址。指令如LDMFD,STMFD等。
空递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向堆栈下的第一个空位置。指令如LDMED,STMED等。
不应该说ARM的堆栈有四种类型。ARM有7个工作模式,每个工作模式都有自己专用的堆栈指针(除了user模式和system模式共享寄存器外),所以共有6个堆栈指针,在启动代码中通常会将程序使用到的各个模式的堆栈指针进行初始化,使各模式的堆栈互不影响。