- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
项目9.C与汇编的互相调用
编制部门:计算机系 编制人:王晓春 编制日期:2011.1
项目编号
Item No. 项目名称
Item C与汇编的互相调用 训练对象
Class 计算机应用
技术专业大
二学生 学时
Time 2 课程名称
Course RISC微控制器嵌入式系统技术 教 材
Textbook
目的
Objective 熟悉ARM系统中C与汇编互相调用的规则
熟悉ADS1.2编译、下载、调试程序的基本方法
内容(方法、步骤、要求或考核标准及所需工具、材料、设备等)
一、实验内容
学习C与汇编互相调用的规则
实现二个内嵌汇编的实例
基于上述实例,修改程序实现指定的操作
二、准备知识
在汇编程序中访问C程序变量
在C程序中声明的全局变量,可以被汇编程序通过地址间接访问。具体方法如下:
使用IMPORT伪操作声明该全局变量
使用LDR指令读取该全局变量的内存地址,通常该全局变量内存地址值存放在程序的数据缓冲池中
根据该数据的类型,使用相应的LDR指令读取该全局变量的值,使用相应的STR指令修改该全局变量的值
各数据类型及其对应的LDR/STR指令为:
对于无符号的char类型的变量通过指令LDRB/STRB来读写
对于无符号的short类型的变量通过指令LDRH/STRH来读写
对于int类型的变量通过指令LDR/STR来读写
对于有符号的short类型的变量通过指令LDRSH来读取
对于有符号的short类型的变量通过指令STRH来写入
对于小于8个字的结构型变量,可以通过一条LDM/STM指令来读写整个变量
汇编程序与C程序的相互调用
在C程序中调用汇编程序
汇编程序的设计要遵守一定的规则,保证程序调用时参数的正确传递。在汇编程序中使用EXPORT伪操作声明本程序,使得本程序可以被别的程序调用,在C语言程序中使用extern关键词说明本程序声明该汇编程序。
在汇编程序中调用C程序
汇编程序的设计要遵守一定的规则,保证程序调用时参数的正确传递。在汇编程序中使用IMPORT伪操作声明要调用的C程序。
ATPCS规则(ARM/Thumb Procedure Call Standard specification)
ATPCS规则定义了子程序之间调用的一些规则:
寄存器的使用规则
子程序间通过寄存器R0-R3来传递参数,也可以记作A1-A4
在子程序中,使用寄存器R4-R11来保存局部变量,也可以记作V1-V8
R12用作子程序间内部调用,记作ip
R13用作数据堆栈指针,记作sp
R14用作连接寄存器,记作lr
参数传递的规则
当参数个数不超过4个时,可以使用寄存器R0-R3来传递参数,参数超过4个时,多余的参数传送到数据栈中,入栈的顺序与参数顺序相反,即最后一个参数先入栈。
对于结果返回的规则有:
结果为一个32位数,可以通过寄存器R0返回
结果为一个64位数,可以通过寄存器R0和R1来返回,依次类推。
多个结果时用堆栈返回其他结果
三、实训步骤、方法与要求
输入并调试以下程序:
程序strtest.c
#include stdio.h
extern void strcopy(char *s, char *d); extern起申明作用
int main()
{ char *srcstr = First string - source ;
char *dststr = Second string - destination ;
printf(Before copying:\n);
printf( %s\n %s\n,srcstr,dststr);
strcopy(srcstr,dststr);
printf(After copying:\n);
printf( %s\n %s\n,srcstr,dststr);
return (0);
}
程序scopy.s
AREA StrCopy, CODE, READONLY
EXPORT strcopy
strcopy
LDRB r2, [r0],#1
STRB r2, [r1],#1
CMP r2, #0
BNE strcopy
MOV pc,lr
END
主程序是汇编,程序是C语言的步骤:
主程序:
您可能关注的文档
- 凉山煤矿安监调基础A1-A8表.doc
- 江苏省2012年普通高校对口单招文化统考数学答案.doc
- 2010年秋季学期11月四年级竞赛测试卷.doc
- 2.1椭圆 二 .doc
- Lesson19VegetablesandFruit说课稿.ppt
- 塔里木大学第一届校园模拟招聘会.doc
- 第十一讲80C51单片机的中断0911.ppt
- 13章实数章节测试 三 拔高题.doc
- 1、3、2《有理数的减法》导学案.doc
- 正弦交流电的相量表示法 2 .ppt
- 2025至2030年中国单柄浅煲市场分析及竞争策略研究报告.docx
- 2025至2030年中国单组份环氧树脂胶粘剂市场分析及竞争策略研究报告.docx
- 2025至2030年中国挡风玻璃胶市场分析及竞争策略研究报告.docx
- 2025至2030年中国登山扣指南针市场现状分析及前景预测报告.docx
- 2025至2030年中国地产交易电话短信查询系统市场分析及竞争策略研究报告.docx
- 2025至2030年中国低起泡性精炼剂市场分析及竞争策略研究报告.docx
- 2025至2030年中国套装雨衣行业发展研究报告.docx
- 2025-2031年中国扑克牌行业发展前景预测及投资战略规划研究报告.docx
- 2025年中国进油细管数据监测报告.docx
- 2025年中国后搁板数据监测报告.docx
文档评论(0)