`
javababy1
  • 浏览: 1171670 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

arm堆栈操作

 
阅读更多

arm堆栈的组织结构是 满栈降的形式,满栈即sp是要停留在最后一个进栈元素,降:就是堆栈的增长方向是从高地址向低地址发展。

arm对于堆栈的操作一般采用 LDMFD(pop)和STMFD (push) 两个命令。

指令STMFD和LDMFD分析:

根据ATPCS规则,我们一般使用FD(Full Descending)类型的数据栈!所以经常使用的指令就有STMFD和LDMFD,

通过ARM对于栈操作和批量Load/Store指令寻址方式,可以知道指令STMFD和LDMFD的地址计算方法:

STMFD指令的寻址方式为事前递减方式(DB)

而DB寻址方式实际内存地址为:

start_address = Rn - (Number_Of_Set_Bits_In(register_list)*4)

end_address = Rn - 4

STM指令操作的伪代码:

if ConditionPassed(cond) then

address = start_address

for i = 0 to 15

if register_list[i] == 1

Memory[address] = Ri

address = address + 4

有上面两个伪代码可以得出 STMFD SP!,{R0-R7,LR} 的伪代码如下:

SP = SP - 9×4;

address =SP;

for i = 0 to 7

Memory[address] = Ri;

address = address + 4;

Memory[address] = LR;

LDMFD指令的寻址方式为事后递增方式(IA)

IA内存的实际地址的伪代码

start_address = Rn

end_address = Rn + (Number_of_set_bits_in(register_list)*4) - 4

LDM指令操作的伪代码(未考虑PC寄存器):

if ConditionPassed(cond) then

address = start_address

for i = 0 to 15

if register_list[i] == 1

Ri = Memory[address,4]

address = address + 4

所以LDMFD SP!,{R0-R7,PC}^ (;恢复现场,异常处理返回)伪代码是:

address = SP;

for i = 0 to 7

Ri = Memory[address ,4]

address = address + 4;

SP = address;

源文档 <http://blog.csdn.net/zoudaokou2006/article/details/5443229>

分享到:
评论

相关推荐

    arm堆栈的操作之我见

    学习arm必须了解堆栈的操作! 学习arm必须了解堆栈的操作!

    ARM体系结构数据类型级及寄存器堆栈操作操作实验报告

    ARM体系结构数据类型级及寄存器堆栈操作操作实验报告 ①功能实现: 说明软、硬件的设计思路,并展示实现功能,考核对设计功能的实现程度。 ②结果实现: arm-linux-gcc仿真实现,或S3C6410试验箱硬件实现。 ③实验...

    基于arm的操作系统中断堆栈分析及实现.pdf

    基于arm的操作系统中断堆栈分析及实现,对于arm系统的中断和堆栈分析调试有帮助

    基于arm的操作系统中断堆栈分析及实现

    基于arm的操作系统中断堆栈分析及实现

    ARM体系结构数据类型及寄存器堆栈操作实验1

    ARM 体系结构数据类型及堆栈操作实验在第 2 讲的时候,我假设同学们是已经把指令集学完了的,但在 mooc 的课程学习中,我用慕课堂出的讨论题,从很多复制粘贴

    ucos_ii_arm 提高μCOS-II在ARM上执行效率的几种方法

    这使得在ARM处理器上实现任务切换有其特殊性,本文利用ARM处理器在任务切换时堆栈的变化特点,优化设计堆栈操作方式和运行模式转化方式, 以减小任务切换时间。实验结果表明该方法比其它实现方法具有更高的实时性。...

    堆栈操作(STMFA STMFD STMEA STMED).docx

    堆栈寻址详解(STMFA STMFD STMEA STMED)内有代码和代码详解,附带图片解释,非常有助于理解,请结合我的博客堆栈寻址详解(STMFA STMFD STMEA STMED)学习

    常用ARM指令集及汇编.pdf

    堆栈寻址4 块拷贝寻址5 相对寻址5 指令集介绍7 ARM 指令集7 指令格式7 第 2 个操作数7 #immed_8r 7 Rm8 Rm,shift8 条件码9 ARM 存储器访问指令 11 LDR 和 STR 11 LDM 和 STM14 SWP 17 ARM 数据...

    从任务栈的角度出发,基于ARM stm32的嵌入式操作系统编写尝试

    2.从任务栈的角度出发,基于ARM的嵌入式实时操作系统底层任务切换原理,涉及到的汇编语言详解 3.keil环境下,基于stm32f103的详细的嵌入式实时操作系统编写尝试,可直接运行 4.keil环境下,基于stm32f103的详细的...

    基于ARM stm32的嵌入式操作系统编写尝试Rev.2

    2.从任务栈的角度出发,基于ARM的嵌入式实时操作系统底层任务切换原理,涉及到的汇编语言详解 3.keil环境下,基于stm32f103的详细的嵌入式实时操作系统详细说明文档 4.里面的代码很多都是指针(结构体指针、链表等)...

    Arm体系结构

    以S3C2440A 为例,详细介绍关于Arm的体系结构和外设接口等

    ARM嵌入式系统开发手册

    3.2.6 堆栈寻址 25 3.3 ARM 指令集 25 3.3.1 跳转指令 25 3.3.2 数据处理指令 26 3.3.3 乘法指令与乘加指令 30 3.3.4 程序状态寄存器访问指令 32 3.3.5 加载/存储指令 32 3.3.6 批量数据加载/存储指令 34 3.3.7 数据...

    ARM、PowerPC、MIPS反汇编工具V1.24.00

    反汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.24.00相对上一版本,进一步完善COREDUMP文件解析与应用,提供堆栈...

    基于ARM和u C/OS—II的嵌入式系统的研究与开发

    H在任务管理、堆栈和中断调度等方面存在的不足做出了改进;其次,简要介绍 了ARM核芯片的应用领域、ARM7的编程模型以及基于ARM7TDMI的S3C44BOX芯 片,并详细阐述了“C/OS.II移植到S3C44BOX的过程

    ARM开发详解.pdf

    3.2.6 堆栈寻址 25 3.3 ARM 指令集 25 3.3.1 跳转指令 25 3.3.2 数据处理指令 26 3.3.3 乘法指令与乘加指令 30 3.3.4 程序状态寄存器访问指令 32 3.3.5 加载/存储指令 32 3.3.6 批量数据加载/存储指令 34 3.3.7 数据...

    ARM详解 ARM入门必备

    3.2.6 堆栈寻址 25 3.3 ARM 指令集 25 3.3.1 跳转指令 25 3.3.2 数据处理指令 26 3.3.3 乘法指令与乘加指令 30 3.3.4 程序状态寄存器访问指令 32 3.3.5 加载/存储指令 32 3.3.6 批量数据加载/存储指令 34 3.3.7 数据...

    嵌入式系统原理及应用——基于ARM Cortex-M3内核的STM32F103系列微控制器.zip

    3.3.7双堆栈机制105 3.4ARM CortexM3存储器系统107 3.4.1存储器映射107 3.4.2位带操作110 3.4.3存储格式112 3.5ARM CortexM3的低功耗模式113 3.6本章小结114 习题3115 第4章基于ARM CortexM3的STM32...

    ARM指令集 寻址

    立即寻址、寄存器寻址、寄存器间接寻址、基址变址寻址、多寄存器寻址、相对寻址、堆栈寻址 ARM 指令集: 跳转指令、数据处理指令、乘法指令与乘加指令、程序状态寄存器访问指令、加载/存储指令、批量数据加载/存储...

    ARM、PowerPC、MIPS反汇编工具V1.24.02

    反汇编带符号表的32位/64位ELF目标文件,CPU类型:ARM PowerPC MIPS 操作菜单选择:文件解析 Alx+P ELF文件解析 Alt+E 另有文本比较等杂项功能。V1.24.02相对上一版本,针对进程主动捕捉异常的信息定制处理进一步...

Global site tag (gtag.js) - Google Analytics