历史上的今天
返回首页

历史上的今天

今天是:2024年11月26日(星期二)

正在发生

2021年11月26日 | ARM基础学习-ATPCS子程序调用基本规范

2021-11-26 来源:eefocus

ATPCS是: Arm Thumb procedure Call Standard的缩写。意思是arm程序和thumb程序中子程序调用的基本规范。


寄存器的使用规则


当参数个数小于等于4个的时候,子程序间通过R0~R3来传递参数,在返回前无需恢复寄存器R0~R3的内容;如果参数个数大于4个,余下的参数就通过sp所指向的数据栈进行参数传递。在栈上开辟8字节的空间进行参数传递。


在子程序中,使用R4~R11来保存局部变量,如果子程序要使用这些寄存器,进入子程序时必须保存这些寄存器的值,在返回前必须恢复这些寄存器的值;


寄存器R12用作scratch寄存器,记为ip;在程序调用过程中间临时寄存器IP;


寄存器R13用做堆栈指针SP。在子程序中寄存器R13不能用做其它用途。寄存器SP在进入子程序时的值和退出子程序的值必须相等。


寄存器R14称为链接寄存器LR,它用于保存子程序的返回地址。如果在子程序中保存了返回地址,寄存器R14则可以用做其他用途。


寄存器R15为程序计数器PC,不能用做其他用途。


子程序结果返回规则


函数调用完毕后,如果函数有返回值,函数一般把返回值保存在r0寄存器中,因此一般我们通过bl指令调用一个函数后,就可以通过在汇编里面访问r0得到返回值。


子程序结果返回规则:


   1.结果为一个32位的整数时,可以通过寄存器R0返回.

   2.结果为一个64位整数时,可以通过R0和R1返回,依此类推.

   3.结果为一个浮点数时,可以通过浮点运算部件的寄存器f0,d0或者s0来返回.

   4.结果为一个复合的浮点数时,可以通过寄存器f0-fN或者d0~dN来返回.

   5.对于位数更多的结果,需要通过调用内存来传递.


数据栈使用规则


栈指针可以指向不同的位置,ARM有4种数据栈,分别是:


递增空栈,

递增满栈,

递减空栈, 

递减满栈,


ATPCS规定数据栈为递减满栈(FD),并对数据栈的操作是8字节对齐的;下面是数据栈相关的名词解释;


  1.数据栈栈指针.stack pointer 指向最后一个写入栈的数据的内存地址.

  2.数据栈的基地址.stack base 是指数据栈的最高地址.由于ATPCS中的数据栈是FD类型的,实际上数据栈中最早入栈数据占据的内存单元是基地址的下一个内存单元.

 3.数据栈界限.stack limit 是指数据栈中可以使用的最低的内存单元地址.

 4.已占用的数据栈.used stack 是指数据栈的基地址和数据栈栈指针之间的区域.其中包括数据栈栈指针对应的内存单元.

 5.数据栈中的数据帧(stack frames) 是指在数据栈中,为子程序分配的用来保存寄存器和局部变量的区域.

  

异常中断的处理程序可以使用被中断程序的数据栈,这时用户要保证中断的程序数据栈足够大.


推荐阅读

史海拾趣

HSMC公司的发展小趣事

HSMC的发展不仅为公司自身带来了显著的经济效益,也为当地社会和经济发展做出了重要贡献。项目全面达产后,预计可实现年产值600亿元,利税60亿元,直接带动就业人口3000人。此外,HSMC还通过技术创新和产业升级,带动了上下游产业链的发展,促进了整个电子行业的繁荣与进步。

以上五个故事共同描绘了HSMC在电子行业中的崛起与发展历程。作为一家充满活力和创新精神的企业,HSMC正以其独特的优势和不懈的努力,向着成为全球领先CIDM晶圆厂的目标不断迈进。

Daniels Manufacturing公司的发展小趣事

进入21世纪后,随着信息技术的快速发展,数字化转型成为制造业的重要趋势。DMC紧跟时代步伐,积极推进数字化转型和智能制造。通过引入先进的生产管理系统、自动化生产线和智能检测设备,DMC实现了生产过程的数字化、网络化和智能化。这不仅提高了生产效率和产品质量,还降低了生产成本和能源消耗。此外,DMC还利用大数据和人工智能技术,对市场需求进行精准预测和分析,为产品研发和市场营销提供有力支持。

Beck IPC GmbH公司的发展小趣事

Beck IPC始终坚持以研发和创新为核心驱动力。公司每年投入大量资金用于研发新技术和产品,并建立了完善的研发团队和体系。通过不断的技术创新和产品升级,Beck IPC始终保持着在嵌入式通讯和工业物联网领域的领先地位。同时,公司还积极参与国际标准制定和行业交流活动,为推动行业发展贡献自己的力量。

Avel Lindberg公司的发展小趣事

为了进一步增强公司的竞争力,Beck IPC积极寻求与其他优秀企业的收购与合作机会。在某一时期,公司成功收购了一家在边缘网关系列产品领域具有领先地位的企业。通过这次收购,Beck IPC不仅获得了更多先进的技术和产品,还进一步巩固了其在工业物联网领域的地位。此外,公司还与多家知名企业建立了战略合作关系,共同推动行业发展。

DIOO公司的发展小趣事

随着科技的不断发展,DIOO公司始终致力于技术创新和产品创新。在90年代初,DIOO公司推出了一款革命性的智能音响系统,该系统集成了最先进的音频处理技术、语音识别技术和人工智能技术,为用户提供了前所未有的便捷和智能体验。这一创新产品迅速在市场上占据了领先地位,并成为了DIOO公司的标志性产品之一。

广芯电子(BROADCHIP)公司的发展小趣事

面对数字化时代的挑战和机遇,DIOO公司决定加快数字化转型步伐。通过引入云计算、大数据、人工智能等先进技术,DIOO公司实现了产品设计、生产、销售等各个环节的数字化管理。同时,DIOO公司还积极探索新的商业模式和市场机会,与互联网企业、电信运营商等合作伙伴共同打造智能生态圈。未来,DIOO公司将继续秉承创新、卓越、服务的理念,致力于成为全球领先的电子产品制造商和服务提供商。

问答坊 | AI 解惑

Wince6.0 创建多语言CreateMui失败问题

定制OS, 选择了 MUI 和 英文和中文字体, 默认语言是中文 可调用 createmui 0409 命令后 输出如下, 输出完成后,提示找不到文件,麻烦大侠们给个提示,谢谢 Multiui.bib文件内容为空, ; ; Copyright (c) Microsoft Corporation.   ...…

查看全部问答>

调查一下支持winCE6.0的CPU及有成熟开发板的公司

我搜了一些做ARM开发板的公司,甚少有支持wince6.0的开发板在卖。立宇泰、友善之臂、扬创、周立功、英蓓特等都没找到一块。优龙也是在最近才出了一款LPC3250的板子有wince6.0,但是驱动还没有做全。搜到有两家卖S3C6410X和S3C6400开发板的公司,海 ...…

查看全部问答>

Can't create hard link ??

BUILDREL: Copying PLATFORMCOMMON binaries from C:\\WINCE600\\platform\\common Can\'t create hard link.  (FAT file system?) Copying files instead of creating hard links. 编译到最后的时候,出现这样几个错误?? 这是什么 ...…

查看全部问答>

需要做网站的朋友快加入我们吧^^^^^^^^

运用全球领先的软件的和平台,结合对商业需求把握,凭借出色的规划设计能力和技术实施能力,运用成熟的项目管理能力,帮助客户在Internet/Intranet上建立全面的基于Web的企业应用,主营业务是向企业及个人提供综合上网服务,目标是建设成为中国领先 ...…

查看全部问答>

急!两道单片机题目!(高分)

急需此两题的解答!小弟多年不碰单片机,两眼一抹黑,请各位大大救命啊! 在线等,解出来立刻双手把分奉上!! 邮箱:[email=darkstarxw@163.com][/email]…

查看全部问答>

DC-DC原理的培训讲义1,2

[local]1[/local][local]2[/local]…

查看全部问答>

北京智博联公司招聘高级电子工程师

本公司招聘硬件工程师,从事检测仪器开发。关注于弱信号的采集、整理和放大。 1.    本科及以上学历; 2.    电子、自动化、硬件电路设计、检测技术等相关专业; 3.    有CPLD或FPGA开发经验者优先; 4.&nbs ...…

查看全部问答>

S7-200的模拟量编写方法总结

1、模拟量值和A/D转换值的转换假设模拟量的标准电信号是A0—Am(如:4—20mA),A/D转换后数值为D0—Dm(如:6400—32000),设模拟量的标准电信号是A,A/D转换后的相应数值为D,由于是线性关系,函数关系A=f(D)可以表示为数学方程:   &nb ...…

查看全部问答>

求助:关于TLV320AIC23的操作

各位大虾:我在DM642里面对TLV320AIC23进行Transmit操作时,遇到一个问题。代码如下,各同步时钟信号AFSX、ACLKX、AHCLKX由AIC23提供。 MCASP_ConfigSrctl MysrctlRegs = {      0x00000009,    //AXR00=Xmt &nbs ...…

查看全部问答>