网站大量收购独家精品文档,联系QQ:2885784924

项目9.C与汇编的互相调用.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
项目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语言的步骤: 主程序:

文档评论(0)

asd522513656 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档