- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验指导书注释版exp1.pdf
实验一 ARM 汇编基础实验
Reference: 《ARM 体系结构不编程》-杜春雷
一、实验目的
1.掌握ARM 汇编指令
2 .学习掌握C 与汇编混合编程基础
3 .熟练使用ARM 调试工具RVDS 进行调试操作
二、实验内容
1.熟悉ARM 汇编
2 .用ARM 汇编实现1+2+...+N
3 .C 调用汇编实验(实现字符串拷贝功能)
4 .汇编调用C 实验
5 .ARM 汇编实现冒泡算法 (选做)
三、预备知识
1.C 语言、ARM 汇编
2. 混合编程
四.实验设备与工具
硬件:ARM 嵌入式开发平台,PC 机Pentium100 以上。
软件:Windows 操作系统,RVDS 软件
四、实验原理
1、ARM 中的C 和汇编混合编程
在嵌入式系统开发中,目前使用的主要编程语言是C 和汇编。在稍大规模的嵌入式软件中,
例如操作系统,大部分的代码都是用C 编写的,主要是因为C 语言的结构比较好,便于人
的理解,而且有大量的支持库。
尽管如此,很多地方还是要用到汇编语言,例如开机时硬件系统的初始化,包括CPU 状态
的设定,中断的使能,主频的设定,以及RAM 的控制参数及初始化,一些中断处理方面也
可能涉及汇编。另外一个使用汇编的地方就是一些对性能非常敏感的代码块,这是不能依靠
C 编译器生成代码,而要手工编写汇编,达到优化的目的。而且,汇编语言是和CPU 指令
集紧密相连的,作为涉及底层的嵌入式系统开发,熟练对应汇编语言的使用也是必须的。
单纯的C 或者汇编编程请参考相关的书籍或者手册,这里主要讨论C 和汇编的混合编程,
包括相互之间的函数调用。下面分四种情况来进行讨论。
1) 在C 语言中内嵌汇编
在C 中内嵌的汇编指令包含大部分的ARM 和Thumb 指令,不过其使用与汇编文件中
的指令有些不同,存在一些限制,主要有下面几个方面:
a) 不能直接向PC 寄存器赋值,程序跳转要使用用B 或者BL 指令
b) 在使用物理寄存器时,不要使用过于复杂的C 表达式,避免物理寄存器冲突
c) R12 和 R13 可能被编译器用来存放中间编译结果,计算表达式值时可能将 R0 到
R3 、R12 及R14 用于子程序调用,因此要避免直接使用这些物理寄存器
d) 一般不要直接指定物理寄存器,而让编译器进行分配
内嵌汇编使用的标记是__asm 或者asm 关键字,用法如下:
__asm
{
instruction [; instruction]
…
[instruction]
}
asm(“instruction [; instruction]”);
下面通过一个例子来说明如何在C 中内嵌汇编语言,
#include stdio.h
void my_strcpy(const char *src , char *dest) /* 自定义的字符串拷贝函数*/
{
char ch; /*ch 实际用来做中间(缓冲/临时)变量*/
__asm /*内嵌汇编的标志*/
{
loop:
ldrb ch, [src], #1
/* LDRB:加载无符号字节数据;*/
/*src 指针指向源字符串,#1 表示拷贝一个字符后,src 指针指向下一个字符;*/
strb ch, [dest], #1
/*STRB :存储字节数据;*/
/*dest 指向目的字符串,#1 表示存到目的字符串后,dest 指向下一个待存位置*/
cmp ch, #0 /*将 ch 和立即数 0 迚行比较*/
bne loop /*当上一步比较结果丌一样时,表示拷贝尚未结束,继续循环*/
}/*当 ch 读到 0 时代表需要拷贝的字符串已读完,这时候在目的字符串末尾已经
添加了 0 字符,这是 C 中字符串的结束标志*/
}
int main()
{
char *a = forget it and move on!;
/*C 中初始化定义的字符串自动在
您可能关注的文档
最近下载
- 华为战略神器“五看三定”模型究竟是什么.doc VIP
- 【PPT课件】2018版安徽省建设工程计价依据宣贯(房建、装饰工程宣贯课件).docx
- 人教版英语八年级下册 Unit 9 Have you ever been to a museum 单元整体教学设计.docx VIP
- 表9.1.7 OPGW光缆安装检验批质量验收记录表.docx VIP
- 尊师惠师工作的创新策略与实施方案.docx
- 《旅游景区服务与管理》教案 第1课 认识旅游景区.pdf VIP
- 2025年宁夏中考语文试题及答案(word版).doc VIP
- 表9.1.3 导线、地线耐张管施工检验批质量验收记录表.docx VIP
- 麻醉术后苏醒延迟病例分析与管理.pptx VIP
- 2025至2030中国儿童口腔护理行业发展趋势与未来销售规模研究报告.docx VIP
文档评论(0)