嵌入式实验二

上传人:ni****g 文档编号:508899922 上传时间:2023-06-23 格式:DOCX 页数:4 大小:142.34KB
返回 下载 相关 举报
嵌入式实验二_第1页
第1页 / 共4页
嵌入式实验二_第2页
第2页 / 共4页
嵌入式实验二_第3页
第3页 / 共4页
嵌入式实验二_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《嵌入式实验二》由会员分享,可在线阅读,更多相关《嵌入式实验二(4页珍藏版)》请在金锄头文库上搜索。

1、实验二 c语言与汇编语言编程实验实验目的1. 掌握在ADT IDE中编写汇编语言和C语言混合编程程序。2. 掌握C语言和汇编语言相互调用的过程。3. 掌握GNU C中内嵌汇编语言的编程方法。实验内容编写程序实现如下目的,从汇编语言切换到C语言代码,然后在C代码中分别使用内嵌 汇编语言和汇编子函数的方法实现同一功能。【预备知识】1. ARM汇编语言基础知识。2. C语言基础知识。3. 程序调试的基础知识和方法。实验设备1. 硬件:JXARM9-2410教学实验箱,PC机。2. 软件:PC机操作系统Wlndowsg98 (2000、XP, ADT IDE集成开发环境。 基础知识在ARM编程中,一个

2、程序往往采用汇编语言和C语言混合编程。本实验的目的就是为 了讲解ARM中C语言和汇编语言混合编程的方法。1汇编语言切换到C语言的方法C语言中定义的函数名在汇编语言中可以作为标号使用,因此,在汇编语言中可以使用 程序分支指令直接转移到C语言中定义的标号(函数)中。下面代码实现从汇编语言跳转到C 语言的Main函数中,汇编代码:_start:MOV sp,#0x0c700000/*建立栈指针(r13) */BMain/*跳转到C语言程序*/C代码:void Main() 2. 汇编语言中函数的实现ARM编程中,不同语言的程序只要遵守ATPCS规则,就可实现不同语言间的相互调用, 程序间的相互调用最

3、主要的是解决参数传递问题。应用程序之间使用中间寄存器及数据栈来 传递参数,其中,第14个参数使用r0r3传递,多于4个参数则使用数据栈进行传递。输 出参数由r0传递。下面的代码就是用汇编语言写的一个简单函数:asse_add:ADDr0,r0,r1/*r0=r0+r1*/MOVpc,lr/*函数返回*/它相当于如下声明的C语言函数:int asse_add(int x,int y);在汇编语言中可以便用BL asse_add指令调用该函数。输人时,r0为x参数,r1为y参数,输出rO,该函数实现功能很简单, 返回参数x与y的和。3. C语言调用汇编文件中的函数以上面的asse_add函数为例,

4、在C语言中声明该函数在其他文件中实现:extern int asse_add(int x,int y);然后,就可以像调用C函数一样调用该函数,x=asse_add(10,20);4. C语言中内嵌汇编语言gcc支持大部分基本的内嵌汇编语言。下面为C语言中采用内嵌汇编语言的方式实现 asse_add相同的功能:int embed_add(int x,int y)_asm_(“and rO,rO,r1);实验步骤新建一个工程asse2。新建asse2.S文件,并参考如下代码编辑该文件:/*汇编语言编写实验*该程序演示C语言和汇编语言的相互调用方法*/.global_start.global as

5、se_add.text.EQU num,20/*程序入口地址,传递参数并设置堆栈*/_start:MOVsp,#0x0c700000/* 建立栈指针(r13)*/BMain/*跳转到C语言程序*/*int asse_add(int x,int y);*/asse_add:ADDr0,r0,r1/*r0=r0+r1*/MOVpc,lr/*函数返回*/.end新建main.c文件,并参考如下代码编辑该文件:/*C语言演示程序*/extern int asse_add(int x,int y);ixnt embed_add(int x,int y);void Main() maing:-T Kids

6、cript -o debnc$ (Taretlfame) $(ObjFiles)Select ztr flle 1 eProject SettingsMlMMHKint x,y;/*调用汇编函数asse_add */ x=asse_add(10,20);y=embed_add(10,20);int embed_add(int x,int y) _asm_(“add r0,r0,r1);将asse2.S和main.c文件加人工程asse2。设置工程。与4.2节一样,设置调试设备为SoftSim即软件仿真器,拷贝参考工程目录 下的旧ldscript到当前目录,并设置该文件为链接脚本文件;另外设置a

7、sse2.o文件为入口文 件,如图4-16所示。编译asse2工程。调试asse2工程,下载程序后,单步执行程序,执行过程中打开寄存器观察窗口和变量 观察窗口观察Main函数中x,y值的变化。试验程序:图4-16入口文件设置/*汇编语言编写实验*该程序演示C语言和汇编语言的相互调用方法*/.text.EQU num,20.global_start.global asse_add*程序入口地址,传递参数并设置堆栈*/_start:MOVsp,#0x0c700000/* 建立栈指针(rl3)*/BMain/*跳转到C语言程序*/严*int asse_add(int x,int y);*/asse_add:ADDr0,r0,r1/*rO=rO+r1*/MOVpc,lr/*函数返回*/.end/*C语言演示程序*/extern int asse_add(int x,int y);ixnt embed_add(int x,int y); void Main() int x,y;/*调用汇编函数asse_add */ x=asse_add(10,20);y=embed_add(10,20);int embed_add(int x,int y) _asm_( “add rO,rO,r1”);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号