- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
深圳市优龙科技有限公司 实验2 汇编语言与C语言实验 2.1 实验目的 掌握ARM C语言编程 掌握ARM 汇编与C语言的混合编程 2.2 实验内容 用汇编实验LED灯的不停闪烁 2.3 实验设备 FS2410P教学实验平台; ADS 1.2 评估版集成开发环境和调试代理软件; 网线,串口连接线,电源。 2.4 实验原理 (1) ARM过程调用ATPCS(ARM) ARM编程中不同语言的程序只要遵守ATPCS规则就可实现不同语言间的相互调用。ATPCS是一系列用于规定应用程序之间相互调用的基本规则,这个规则包括: 支持数据栈限制检查 支持只读段位置无关(ROPI); 支持可读/写段位置无关(RWPI); 支持ARM程序和Thumb程序的混合使用; 处理浮点运算。 使用以上规定的ATPCS规则时,应用程序必须遵守如下: 程序编写遵守ATPCS; 变量传递以中间寄存器和数据栈完成; 汇编器使用-apcs开关选项。 关于其它ATPCS规则,用户可以参考ARM处理器相关书籍或登录ARM公司网站。 2.汇编与C语言的相互调用 1) 汇编语言切换到C语言的方法 C语言中定义的函数名在汇编语言中可作为标号使用,因此,在汇编语言中可使用程序支指令直接转移到C语言中定义的标号(函数)中。下面代码实现从汇编语言跳转到C语言的Main函数中。 汇编代码: _start: B Main /*跳转到C语言程序*/ C代码: Void Main() { } 2) 汇编语言中函数的实现 程序只要遵守ATPCS相应规则,就可以使用不同的源代码编写程序。程序间的相互调用最主要的是解决参数传递问题。应用程序之间使用中间寄存器及数据栈来传递参数,其中,第一个到第四个参数使用R0-R3,多于四个参数的使用数据栈进行传递。这样,接收参数的应用程序必须知道参数的个数。但是,在应用程序被调用时,一般无从知道所传递参数的个数。不同语言编写的应用程序在调用时可以自定义参数传递的约定,使用具有一定意义的形式来传递,可以很好地解决参数个数的问题。常用的方法是把第一个或最后一个参数作为参数个数(包括个数本身)传递给应用程序。 下面的代码就是用汇编语言写的一个简单函数: asse_add: ADD r0, r0, r1 /*r0 = r0 +r1*/ MOV pc, lr /*函数返回*/ 上面的汇编函数相当于如下声明的C语言函数: int asse_add(int x, int y); 在汇编语言中可以使用 BL asse_add 指令调用该函数。输入时,r0为x参数,r1为y参数;输出r0。该函数实现的功能很简单,返回参数x与y的和。 C语言调用汇编文件的函数 以上面的asse_add函数为例,在C语言中声明该函数在其它文件中实现: extern int asse_add(int x, int y); 然后就可像调用C函数一样调用该函数: x = asse_add(10, 20); C语言中内嵌汇编语言 ARM的编译器支持内嵌汇编语言。如下示例为C语言中采用内嵌汇编语言的方式实现 asse_add相同的功能: int embed_add () int x, int y) { __asm { add x, x, y } return x; } 4.2.5实验步骤 (1) 参考4.1.5小节实验的步骤新建一个工程名为ASM_c,并新建源文件、输入代码,设置好工程编译生成目标代码; (2) 硬件连接:用串口线将PC机的COM1与实验箱的UART1连起来,再用交叉网线将PC机的网口与实验箱的网口连起来,最后插上12V电源; (3) 下载、调试并运行:该步骤操作过程与第三章3.5小节的步骤是类似的; (4) (4) 结合实验内容和原理,观察实验现象,实验结果应该是D14灯不停的闪烁; (5) 完成实验练习题。 4.2.6 应用程序编程 1.参考程序代码 ;汇编参考代码init.s如下: ;汇编与C语言的混合调用实验 ;端口E寄存器的预定义 AREA Init,CODE,READONLY ENTRY ;程序的入口点标识 ResetEntry IMPORT Main /*声明主函数*/ BL Main /*调用主函数*/ /*定义一个汇编的延迟函数 *相当于C语言的void delay(int time); *r0?time的值 */ EXPORT delay delay sub r0,r0,#1 ;r0=r0-1 cmp r0,#0x0 ;将r3的值与0相比较
您可能关注的文档
最近下载
- 重症护理夜班值班课件.pptx VIP
- 医用空压机基础知识培训课件.pptx VIP
- 2026版高考物理专题提升练习-动量守恒在子弹打木块模型和滑块.docx VIP
- SICK西克KTS&KTX Prime色标传感器操作手册.pdf VIP
- 10.1《 劝学》课件(共36张PPT) 2024-2025学年统编版高中语文必修上册.pptx VIP
- 梅州围龙屋一种富有特色的典型客家围村建筑.pptx VIP
- SICK西克KTS&KTX Prime操作手册.pdf VIP
- [2025秋期版]国开电大专科《人力资源管理》一平台形考任务一至四在线形考试题及答案 (2).pdf
- 模型1弹簧模型-动量守恒的九种模型解读.docx VIP
- 二年级数学上册北师版25秋《小学学霸A卷》.pdf VIP
文档评论(0)