ARM 指令集 之 PUSH and POP
2017-04-07 11:21
253 查看
示例 :
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 寄存器。满递减堆栈。
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 寄存器。满递减堆栈。
相关文章推荐
- No. 21 - Push and Pop Sequences ofStacks
- glPushMatrix() and glPopMatrix()以及glMatrixMode的用法
- Pop and push the same view does not invoke the viewWillAppear() method (转载)
- .set push and .set pop
- #pragma——push and pop
- stack manipulation push and pop
- #pragma pack (push,1) and #pragma pack(pop)
- test pthread_cleanup_push、pthread_cleanup_pop and pthread_exit
- Stack that Support Push, Pop, and GetMin in Constant Time
- 算法导论 chapter 10.1 Page233 Stack push and pop
- How to change the Push and Pop animations in a navigation based app
- 面试题(实现一个栈,要求实现Push、Pop、Min的时间复杂度为O(1))
- 《ARM 指令集》IEEE浮点指令
- 实现一个栈,要求pop,push,Min,时间复杂度为O(1)
- ActionScript中数组操作(一):push(pop)与unshift(shift)
- 转载:Complex DML queries and clause push-down in Postgres-XC
- 实现一个栈,使push,pop,min操作只需要o(1)时间
- iOS实现先无动画pop再push,替换当前控制器
- Push, Pop, call, leave 和 Ret 指令图解
- #pragma pack(1) and #pragma pack(push,1)是什么意思