初学ARM指令时,一直纠结满堆栈与空堆栈,按字面意思理解,也即数据结构上的定义,空堆栈就是没有放数据的堆栈,而满堆栈就是放满的堆栈。
but注意看书上的定义呀啊:
空堆栈:当堆栈指针指向下一个空位置时,称为空堆栈
满堆栈:如果堆栈指针总是指向最后压入堆栈的数据,称为满堆栈
所以,这里的空满根本不表示堆栈的存储状态,只是来说明堆栈指针指向的存储单元是否已经保存有堆栈数据,或者说入栈时是否可以直接向堆栈指针指向的存储单元写入数据。这就是“满堆栈”与“空堆栈”。博主的理解就是,空满只是表示指针指向单元的状态。
接下来再来说说什么叫向上增长和向下增长,递增堆栈和递减堆栈,哎呀呀,当时对这个定义也是傻傻分不清。
递增堆栈:向高地址方向生长
递减堆栈: 向低地址方向生长
用个不是很形象的图来示意一下,老师上课的课件:
为什么说“向上生长”和“向下生长”呢?那是以为,一般画堆栈示意图都是把低地址画在下面,高地址画在上面。
OK,那么再来说说与之相关的后缀问题:
索引后缀(IA,IB,DA,DB)----用于数据块的传送,地址基址不能用SP(R13)寄存器
先说明字母代表含义,方便记忆
I–Icrement
A—After
B–Before
D–Decrement
IA—事后递增,即每次传递后基址加4,指向下一个字
IB—事先递增,即每次传递前基址加4,指向本次传送的字所在存储单元
DA—事后递减,即每次传递后地址减4,指向下一个字
DB—事前递减,即每次传递前地址减4,指向本次传送的字
堆栈后缀(FD,FA,ED,EA)----地址基址必须使用SP(R13),堆栈堆栈嘛肯定是使用堆栈区了
F—Full
D—Descending(减)
E–Empty
A—Ascending(增)
再来讨论下块复制问题:
具体使用哪条指令,还要基于数据存储在基址寄存器之上还是之下,地址在存储第一个之前还是之后增加。
相应指令搭配看下图:
就以第一个框里的STMIB STMFA为例说明
STMIB:传递前递增(索引方式)
SYMFA:满递增堆栈
关键字:arm
引用地址:
arm里满堆栈与空堆栈的涵义以及后缀问题
推荐阅读最新更新时间:2024-11-11 11:15
深入理解ARM体系架构(S3C6410)---ad转化实例
本实例是把采集的ad数据转化后显示在lcd屏上,在这直接把自己调试好的源码贴出来 ad转化器相关代码: view plain copy print ? void adc_init() { char preScaler = 66500000/2500000 - 1; //PCLK=66M rADCCON = (1 14)|(preScaler 6)|(0 3)|(0 2);//通道AIN0 // rADCCON =0x44c1;//通道AIN0 } int read_adc() { rAD
[单片机]
拷贝动态库至arm开发板 (tar 打包链接文件)
正常arm的.so文件或者链接文件是不能被考到U盘 会出现 cp: cannot create symbolic link Operation not permitted Filesystem does not support symbolic links 等错误 或丢失 进入动态库目录 1.打包目录下所有文件 tar -chvf XXX.tar ./* 2.拷贝压缩文件至arm开发板 3.解压压缩文件 tar -xvf ./XXX.tar 附: tar -chvf xxx.tar xxx/ -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原
[单片机]
盘点恩智浦QorIQ Layerscape网络处理器家族
本文作者: TQ Systems Arm Layerscape产品经理Konrad Zöpf 2013年4月,飞思卡尔(后被恩智浦收购)发布的信息表明,除了Power架构之外,还将推出新一代处理器Layerscape。当时,并不知道这些新设计是选择Arm 内核替代此前的Power架构。 2014年中期,恩智浦宣布将终止Power架构路线图,并从长远来看将其替换为QorIQ-Layerscape产品。第一个该系列产品于2013年推出,即LS1021A。随后在2014年初恩智浦正式发布了路线图信息,并推出了更多的CPU产品。LS2088A是第二款该架构CPU。但是,由于其专门为服务器市场而设计,所以它没有像上一代产品一样广泛使用
[嵌入式]
arm指令为什么比thumb指令性能好
ARM指令集为32位指令集,可以实现ARM架构下所有功能。Thumb指令集是对32位ARM指令集的扩充,它的目标是为了实现更高的代码密度。Thumb指令集实现的功能只是 32位A R M指令集的子集,它仅仅把常用的A R M指令压缩成16位的指令编码方式。在指令的执行阶段,16位的指令被重新解码,完成对等的32位指令所实现的功能。与全部用ARM指令集的方式相比,使用Thumb指令可以在代码密度方面改善大约30%。但是,这种改进是以代码的效率为代价的。尽管每个Thumb指令都有相对应的ARM指令,但是,相同的功能,需要更多的Thumb指令才能完成。因此,当指令预取需要的时间没有区别时,ARM指令相对Thumb指令具有更好的性能。
[单片机]
关于ARM7 S3C4510B上μClinux移植问题
Linux是一种支持多种体系结构处理器的操作系统,有很强的移植性。描述了将μClinux移植到基于S3C4510B处理器目标板上的方法与过程。首先介绍了S3C4510B处理器和μClinux,并简单说明了如何搭建移植环境,然后着重讨论了在该开发板上Bootloader的设计实现以及μClinux内核的移植方法,最后对在这种基于μClinux的嵌入式系统环境下如何开发应用程序做了简单说明。 1引言 ARM(AdvancedRISCMachines),既可以认为是一个公司的名字,也可以认为是对一微处理器的通称,还可以认为是一种技术的名字。 1991年ARM公司成立于英国剑桥,主要出售芯片设计技术的授权。目前,采用ARM技术知识
[单片机]
ARM核心板在脑电监测TCI注射泵中的应用
1.1背景事件 针对患者手术中麻醉剂的施用,当麻醉剂量超标时,容易造成患者心跳、呼吸骤停从而造成脑损伤。传统的麻醉剂注射依靠麻醉师的经验,而新型的脑电监测TCI注射泵则将BIS(脑电监测)与TCI(靶控输注)相结合,真正在医疗电子中实现个体化镇静麻醉,减少麻醉风险。 1.2脑电监测TCI注射泵控制主板功能需求 脑电监测TCI注射泵在常规注射泵基础上,通过接收“脑电分析仪”的数据来进行分析决策注射量和注射速度,使注射更加科学,更加安全。 控制主板主要功能需求 : 显示接口,外接7寸以上真彩液晶,支持触摸屏; RS-232接口,连接脑电分析仪; PWM,控制注射电机; ADC,采集注射管位置数据信息; 声卡,注射过程提示
[医疗电子]
Arm发布v9体系架构:Cortex-X2、Cortex-A710与Cortex-A510
据IT之家网友投稿,小米 9 已推送 MIUI 12.5 稳定版更新,大小为 2.6GB。 小米于去年 12 月发布最新一代 MIUI 12.5 系统,官方表示此次升级不亚于一个大版本更新,而在流畅度方面,官方宣称系统内存占用平均下降 35%、功耗下降 25%、超级壁纸功耗最高下降 40%。 MIUI 12.5 带来了新的光锥动效架构、更沉浸的半透明动态模糊、新的超级壁纸、新的通知系统音、更细腻的振动触感,还有‘One more thing’的 MIUI+ 协同功能等等。 IT之家了了解到,MIUI 12.5 稳定版第二批(2021.5 月底开始)推送机型包括: 小米 11 Ultra、小米 11 Pro、R
[手机便携]