历史上的今天
今天是:2025年01月29日(星期三)
2021年01月29日 | 学习ARM过程中的堆栈初始化详解
2021-01-29 来源:eefocus
1、寄存器R13在ARM指令中常用作堆栈指针
2、对于R13寄存器来说,它对应6个不同的物理寄存器,其中的一个是用户模式与系统模式共用,另外5个物理寄存器对应于其他5种不同的运行模式。采用以下的记号来区分不同的物理寄存器:
R13_ 其中,mode为以下几种模式之一:usr、fiq、irq、svc、abt、und。 3、寄存器R13在ARM指令中常用作堆栈指针,但这只是一种习惯用法,用户也可使用其他的寄存器作为堆栈指针。而在Thumb指令集中,某些指令强制性的要求使用R13作为堆栈指针。由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模式下的R13,使其指向该运行模式的栈空间,这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的正常执行。 4、有四种类型的堆栈: 堆栈是一种数据结构,按先进后出(FirstInLastOut,FILO)的方式工作,使用一个称作堆栈指针的专用寄存器指示当前的操作位置,堆栈指针总是指向栈顶。 当堆栈指针指向最后压入堆栈的数据时,称为满堆栈(FullStack),而当堆栈指针指向下一个将要放入数据的空位置时,称为空堆栈(EmptyStack)。 同时,根据堆栈的生成方式,又可以分为递增堆栈(AscendingStack)和递减堆栈(DecendingStack),当堆栈由低地址向高地址生成时,称为递增堆栈,当堆栈由高地址向低地址生成时,称为递减堆栈。这样就有四种类型的堆栈工作方式,ARM微处理器支持这四种类型的堆栈工作方式,即: ◎Fulldescending满递减堆栈 堆栈首部是高地址,堆栈向低地址增长。栈指针总是指向堆栈最后一个元素(最后一个元素是最后压入的数据)。 ARM-Thumb过程调用标准和ARM、ThumbC/C++编译器总是使用Fulldescending类型堆栈。 ◎Fullascending满递增堆栈 堆栈首部是低地址,堆栈向高地址增长。栈指针总是指向堆栈最后一个元素(最后一个元素是最后压入的数据)。 ◎Emptydescending空递减堆栈 堆栈首部是低地址,堆栈向高地址增长。栈指针总是指向下一个将要放入数据的空位置。 ◎Emptyascending空递增堆栈 堆栈首部是高地址,堆栈向低地址增长。栈指针总是指向下一个将要放入数据的空位置。 5、操作堆栈的汇编指令 堆栈类型入栈指令出栈指令 FulldescendingSTMFD(STMDB)LDMFD(LDMIA) FullascendingSTMFA(STMIB)LDMFA(LDMDA) EmptydescendingSTMED(STMDA)LDMED(LDMIB) EmptyascendingSTMEA(STMIA)LDMEA(LDMDB) 例子: STMFDr13!,{r0-r5};PushontoaFullDescendingStack LDMFDr13!,{r0-r5};PopfromaFullDescendingStack.
上一篇:ARM 单片机新手入门问答
下一篇:新手福利:ARM常用概念须知
史海拾趣
|
我现在正在调试的系统中用到了RTL8212,是一块千兆双口物理层收发器。现在他能够正常接收数据,但是却不能发送数据,发出的数据在接收方说是错误的数据包。我是用一块FPGA来控制的,现在不知道问题出在哪里,不知道是我的FPGA时序不对还是RTL8212的 ...… 查看全部问答> |
|
目 录 第1章 UNIX操作系统概述 6 1.1 UNIX操作系统简介 6 1.2 UNIX系统组成 6 1.3 与UNIX有关的几个名词 7 第2章 UNIX常用操作 9 2.1 启动终端 9 2.2 登录 9 2.3 UNIX命令 9 2.4 注销(退出UNIX系统) 13 第3章 UNIX文件系统 ...… 查看全部问答> |
|
#include main() { EA=1; EX0=1; IT0=0; while(1) P1=0xff; } void exter0() interrupt 0 { P1=0; } 就这个简单的外部中断,INT0我直接用开关接地了。为什么显示LED是闪亮的,而不是常亮的呢? 我是这样觉得的,如果不对 ...… 查看全部问答> |
|
问个困扰了我很久的问题: Uart_Printf这个函数 我看了它的定义。但还是不很懂。而且用它串口输出的话,显示的是乱码。过程是这样的:我选取了某公司写的测试程序中的3个文件:RTC.C 、44BINIT.S和44blib.c。用这3个文件做了工程。(当然了,我还添 ...… 查看全部问答> |
|
今天看到一个简单的恒流充电电路,只有降压,整流,滤波部分能够看得懂,其他的功能好像 没弄得懂,请各位高手不吝赐教: 电路图附下: … 查看全部问答> |
|
今天收到MSP-EXP430FR5739开发板,发现没有传统的JTAG座,我有开发板一块,光盘没有,愣是不知道这程序怎么下载进去。难道从USB吗… 查看全部问答> |
|
寻找成熟的MCU条码秤方案,个人、团队、公司等有开发能力的均可参与! 功能要求: 1,支持8台电子秤之间的通信(RS485接口);支持秤与PC之间的通信(RS232接口) 2,支持标签条码或电脑小票打印功能. 3, LCD显示(两块) 4,成本符合市场需求 ...… 查看全部问答> |




