- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
微处理器系统结构与嵌入式系统设计实验报告
电子科技大学
实 验 报 告
修正了MOOC和旧版答案的错误,代码使用Keil uVision5均已调试通过。
课程名称 微处理器系统结构与嵌入式系统设计
实验名称 ARM基础编程实验
任课教师
实验教师
姓名
学号
实验地点
分组号
时间
年
月
日
实验目的
熟悉并掌握常用ARM汇编指令
熟悉并掌握“C+汇编”混合编程技术
熟练使用ARM软件开发调试工具Keil
实验内容
学习使用Keil开发工具
使用ARM汇编语言,编程实现1+2+……+N累加运算功能
使用C调用汇编函数,实现字符串拷贝功能
使用汇编调用C函数,实现求和运算功能
使用ARM汇编语言,实现冒泡排序算法(选做)
实验步骤
实验1.1:运行Keil,建立工程文件,单步运行调试演示示例程序,深刻理解每一条指令,观察寄存器,内存空间的变化。
实验1.2:用汇编语言实现1+2+...+N的累加:
建立新工程,加入实验1.2文件夹中的sum.s。
用汇编补充算法核心部分,代码参考流程图如下图1.1所示。
使用单步调试,仔细观察过程中关键寄存器值的变化。
R0暂存累加和R1自增
R0暂存累加和
R1自增1
图1.1
实验1.3:C调用汇编实现字符串拷贝功能:
建立新工程,加入实验1.3文件夹中的main.c和testfile.s(同一个工程下添加两个文件一起编译)。
补充完成源代码中缺失的部分,分别实现
拷贝源字符串的一个字节到R2中;
将拷贝的字节复制到目标空间。
运行Debug进行调试。
实验1.4:汇编调用C实现求和1+2+...+10:
建立新工程,加入实验1.4文件夹中的sum.c和testfile.s(同一个工程下添加两个文件一起编译)。
补充完成源代码中缺失的部分,通过调用c函数g()实现1+2+3+glovb1,结果存在R8中。
运行Debug进行调试
实验1.5:ARM汇编实现冒泡算法:
建立新工程,加入实验1.5文件夹中的maopao.s。
补充完成源代码中缺失的部分,实现冒泡排序功能。
运行Debug进行调试
实验结果
实验1.2:用汇编语言实现1+2+...+N的累加
核心代码如下:
ADD R0,R1
BVS SUM_END
CMP R1,R2
BHS SUM_END
ADD R1,#1
B SUN_L1
图1.2
可以看见最终结果显示在寄存器R8处,十六进制为13BA,转换成十进制为5050,实现了累加功能。
实验1.3:C调用汇编实现字符串拷贝功能
核心代码如下:
LDRB R2,[R1],#1 ;拷贝源字符串的一个字节
STRB R2,[R0],#1 ;将拷贝的字节复制到目标空间
图 1.3
图 1.4
可以看出拷贝前srcstr是”aaaa”,dststr是”bbbb”,拷贝后srcstr是”aaaa”,dststr是”aaaa”,实现了字符串拷贝功能。
实验1.4:汇编调用C实现求和1+2+...+10
核心代码如下:
MOV R0,#1
MOV R1,#2
MOV R2,#3
MOV R3,#10
BL g
MOV R8,R0
图1.5
可以看出最终结果显示在寄存器R8处,十六进制表示为0010,转换为十进制为0x10
实验1.5:ARM汇编实现冒泡算法
代码如下:
AREA Sort,CODE,READONLY
ENTRY
start
MOV R4,#0
LDR R6,=src
ADD R6,R6,#len
LDR R7,=src
;初始化R4作为循环计数器
inner2
MOV R1,R7
CMP R6,R7
BLE outer
;将每次循环开始,正确设置R1的值为数组开始地址
;如果所有数字均已排序,即R6=R7输出跳转到outer函数
inner
LDR R2,[R1]
LDR R3,[R1,#4]
CMP R2,R3
BGT exchange
;判断相邻数字是否符合规律,不符合跳转到exchange函数
inner1
ADD R1,R1,#4
CMP R1,R6
BLT inner
ADD R4,R4,#4
CMP R4,#len
BLE subtraction
exchange
STR R3,[R1]
STR R2,[R1,#4]
B inner1
subtraction
SUB R6,R6,#4
B inner2
outer
LDR R1,=src
src DCD 2,4,10,8,14,1,20
AREA Array,DATA,READWRITE
len EQU 7*4
END
图1.6 排序前
在star函数中获得R6地址
文档评论(0)