- 1、本文档共200页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
*8.4.2C程序中内嵌汇编指令(4)对于内嵌的汇编代码用到的寄存器,编译器在编译时会自动加入保存和恢复这些寄存器的代码。除了CPSR和SPSR,其他寄存器必须先赋值再读取,否则会出现错误。例如:intmysub(intx){__asm{STMFDSP!,{R0}SUBx,x,1127LDMFDSP!,{R0}}returnx;}编译时,编译器会报告“illegalwritetoSP”错误。*8.4.3C程序调用汇编指令为了满足ARM汇编语言程序、C语言程序与C++语言程序之间的互相调用需求,必须保证编写的代码遵循APCS(ARM过程调用标准)。APCS规定了子程序调用的基本规则,这些规则包括子程序调用过程中寄存器、数据栈的使用规则以及参数的传递规则。*8.4.3C程序调用汇编指令C语言调用汇编程序子程序的例子,文件strtest.c的程序代码如下:#includestdio.hexternvoidstrcopy(char*d,constchar*s);intmain(){constchar*srcstr=Firststring-source;chardststr[]=Secondstring-destination;/*dststr[]是一个数组,因此我们可以修改其值*/printf(Beforecopying:\n);printf(%s\n%s\n;srcstr;dststr);strcopy(dststr,srcstr);printf(Aftercopying:\n);printf(%s\n%s\n;srcstr;dststr);return0;}*8.4.3C程序调用汇编指令文件scopy.s的程序代码如下:AREAscopy,CODE,READONLYEXPORTstrcopystrcopy;R0指向目标字符串;R1指向源字符串LDRBR2,[R1],#1;加载字节并更新地址STRBR2,[R0],#1;存储字节并更新地址CMPR2,#0BNEstrcopyMOVPC,LREND*8.4.3C程序调用汇编指令strtest.c文件的第2行使用关键字extern表明strcopy函数是在本文件之外定义的。scopy.s文件是汇编文件,汇编程序的设计要遵守APCS,并保证参数的正确传递。该文件的第2行为EXPORTstrcopy,使用EXPORT伪指令声明strcopy函数,表明该函数是一个全局的函数,并可以被其他文件使用。注意,汇编程序需使用R0、R1、R2和R3来传递参数等,如果参数多于4个,则多余的参数会被压入堆栈。*8.4.3C程序调用汇编指令例如:intmyadd(intx,inty,intz,intw,intt){intsum;sum=x+y+z+w+t;returnsum;}该函数有5个参数,则其他程序调用这个函数时第5个参数会压入堆栈,因此汇编程序在处理这个函数时需要加入一段堆栈的代码,该代码等价于下面的汇编代码。*8.4.3C程序调用汇编指令myaddPROCADDR0,R0,R1ADDR0,R0,R2LDRR12,[SP,#0]ADDR0,R0,R3ADDR0,R0,R12MOVPC,LRENDPEXPORTmyadd*习题与思考一、判断题1.Cortex-M3处理器有3种操作状态,分别为ARM、Thumb和Debug。()2.Cortex-M3处理器只可以使用两个堆栈:主(main)栈和进程(process)栈。()3.R13是堆栈指针寄存器,R14是程序寄存器()4.处理器状态可分为3种类型:Application、Interrupt和Execution,与其对应的3个程序状态寄存
您可能关注的文档
- 《新一代人工智能伦理规范》.docx
- AIGC技术在新闻内容自动化生成中的应用研究_马雪.pdf
- 基础设施化:AIGC驱动传媒业迈向智能新生态_苏涛_.pdf
- 208 数据类型的转换.pptx
- 第1章 嵌入式系统概述.ppt
- 第2章 嵌入式系统硬件设计基础.ppt
- 第3章 MSC51单片机的基本结构.ppt
- 第4章 MSC51单片机指令系统.ppt
- 第5章 MSC51单片机功能模块.ppt
- 第6章 80C51功能拓展.ppt
- 2021海湾消防GST-HX-420BEx 火灾声光警报器安装使用说明书.docx
- 2022海湾消防 GST-LD-8316Ex 手自动转换装置安装使用说明书.docx
- (小升初押题卷)江苏省小升初重难点高频易错培优卷(试题)-2024-2025学年六年级下册数学苏教版.docx
- 2023-2024学年吉林省吉林市舒兰市人教版四年级上册期末考试数学试题.docx
- 2023-2024学年北京市密云区北京版四年级上册期末考试数学试卷.docx
- 2024-2025学年广东省广州市天河区人教版三年级上册期末考试数学试卷.docx
- 2024-2025学年河北省唐山市丰南区人教版五年级上册期末测试数学试卷.docx
- 人教版道德与法治一年级下册第4课《我们有精神》课件.pptx
- 消防蝶阀介绍.pptx
- 室外消火栓设置场所及设置要求.pptx
文档评论(0)