您的位置:首页 > 运维架构

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 寄存器。满递减堆栈。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息