示例 :
PUSH {R4,LR}
将低寄存器R4入栈,LR也入栈。
POP {R4,PC}
将堆栈中的数据弹出到低寄存器 R4 及 PC 中
说明 :
寄存器入栈及出栈指令.实现低寄存器和可选的 LR 寄存器入栈寄存器和可选的 PC寄存器出栈操作,堆栈地 址由 SP 寄存设置,堆栈是满递减堆栈.指令格式如下;
PUSH {reglist[,LR]}
POP {reglist[,PC]}
其中 reglist 入栈/出栈低寄存器列表,即 R0~R7
LR 入栈时的可选寄存器
PC 出栈时的可选寄存器
寄存器入栈及出栈指令举例如下;
PUSH {R0-R7,LR} ;将低寄存器 R0~R7 全部入栈,LR 也入栈
POP {R0-R7,PC} ;将堆栈中的数据弹出到低寄存器 R0~R7 及 PC 中
满递减堆栈 含义可参照如下:
堆栈寻址
堆栈是特定顺序进行存取的存储区,操作顺序分为“后进先出”和“先进后出”
堆栈寻址时隐含的,它使用一个专门的寄存器(堆栈指针)指向一块存储区域(堆栈),
指针所指向的存储单元就是堆栈的栈顶。存储器堆栈可分为两种:
向上生长:向高地址方向生长,称为递增堆栈
向下生长:向低地址方向生长,称为递减堆栈
堆栈指针指向最后压入的堆栈的有效数据项,
称为满堆栈;
堆栈指针指向下一个要
放入的空位置,
称为空堆栈。
这样就有 4 中类型的堆栈表示递增和递减的满堆栈和空堆栈的各种组合。
1. 满递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向内含有效数据项的最高地址。
指令如 LDMFA,STMFA 等。
2. 空递增:堆栈通过增大存储器的地址向上增长,堆栈指针指向堆栈上的第一个空位置。
指令如 LDMEA,STMEA 等。
3. 满递减:
堆栈通过减小存储器的地址向下增长,堆栈指针指向内含有效数据项的最低地址。
指令如 LDMFD,STMFD 等。
4. 空递减:堆栈通过减小存储器的地址向下增长,堆栈指针指向堆栈下的第一个空位置。
指令如 LDMED,STMED 等。
堆栈寻址指令举例如下:
STMFD SP!,{R1-R7,LR} ; 将 R1~R7,LR 入栈。满递减堆栈。
LDMFD SP!,{R1-R7,LR} ;数据出栈,放入 R1~R7,LR 寄存器。满递减堆栈。