1 栈:栈是一种具有后进先出的数据组织方式,也就是说后存放的先取出,先存放的后取出。栈底是第一个进栈的数据所处位置,栈顶是最后一个数据进栈所处的位置。
2 满/空栈
根据SP指针指向的位置,栈可以分为满栈和空栈。
满栈:当堆栈指针总是指向最后压入堆栈的数据
空栈:当堆栈指针总是指向下一个将要放入数据的空位置
push,同义词,stmfd
stm :store multiple data(存储多个数据)即push
pop,同意词, ldmfd
ldm:load multiple data(加载多个数据到内存) 即pop
fd:full,desc(满减栈)
一种是4种出入栈方式:
1. 满递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效数据项的最高地址。
指令如 LDMFA,STMFA 等。
2. 空递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一个空位置。
指令如 LDMEA,STMEA 等。
3. 满递减:
堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有效数据项的最低地址。
指令如 LDMFD,STMFD 等。
4. 空递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向堆栈下的第一个空位置。
指令如 LDMED,STMED 等。
push执行时使用 事前递减方式 (先减再入数据),第一步,创建栈段。如:
push {r0-r7,lr}
sp=sp-9*4(创建栈段,供存储数据)
LDMFD,pop指令的寻址方式为事后递增方式(先出数据再减)