电子科技大学微嵌实验最新版_第1页
电子科技大学微嵌实验最新版_第2页
电子科技大学微嵌实验最新版_第3页
电子科技大学微嵌实验最新版_第4页
电子科技大学微嵌实验最新版_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

微处理器系统结构与嵌入式系统设计实验报告 电子科技大学电子科技大学 实实 验验 报报 告告 修正了修正了 MOOCMOOC 和旧版答案的错误 代码使用和旧版答案的错误 代码使用 KeilKeil uVision5uVision5 均已调试均已调试 通过 通过 课程名称课程名称 微处理器系统结构与嵌入式系统设计微处理器系统结构与嵌入式系统设计 实验名称实验名称 ARMARM 基础编程实验基础编程实验 任课教师任课教师实验教师实验教师姓名姓名学号学号 实验地点实验地点分组号分组号时间时间年年月月日日 一 实验目的实验目的 1 熟悉并掌握常用 ARM 汇编指令 2 熟悉并掌握 C 汇编 混合编程技术 3 熟练使用 ARM 软件开发调试工具 Keil 二 实验内容实验内容 1 学习使用 Keil 开发工具 2 使用 ARM 汇编语言 编程实现 1 2 N 累加运算功能 3 使用 C 调用汇编函数 实现字符串拷贝功能 4 使用汇编调用 C 函数 实现求和运算功能 5 使用 ARM 汇编语言 实现冒泡排序算法 选做 三 实验步骤实验步骤 微处理器系统结构与嵌入式系统设计实验报告 1 实验 1 1 运行 Keil 建立工程文件 单步运行调试演示 示例程序 深刻理解每一条指令 观察寄存器 内存空间 的变化 2 实验 1 2 用汇编语言实现 1 2 N 的累加 a 建立新工程 加入实验 1 2 文件夹中的 sum s b 用汇编补充算法核心部分 代码参考流程图如下 图 1 1 所示 c 使用单步调试 仔细观察过程中关键寄存器值的 变化 RO R0 R1 R1 R1 1 SUM END 结果溢出 R1 N NO YESYES YES NO 图 1 1 3 实验 1 3 C 调用汇编实现字符串拷贝功能 a 建立新工程 加入实验 1 3 文件夹中的 main c 和 testfile s 同一个工程下添加两个文件一起编译 b 补充完成源代码中缺失的部分 分别实现 1 拷贝源字符串的一个字节到 R2 中 2 将拷贝的字节复制到目标空间 c 运行 Debug 进行调试 4 实验 1 4 汇编调用 C 实现求和 1 2 10 a 建立新工程 加入实验 1 4 文件夹中的 sum c 和 testfile s 同一个工程下添加两个文件一起编译 b 补充完成源代码中缺失的部分 通过调用 c 函数 g 实现 1 2 3 glovb1 结果存在 R8 中 R1 自增 1 R0 暂存累加和 微处理器系统结构与嵌入式系统设计实验报告 c 运行 Debug 进行调试 5 实验 1 5 ARM 汇编实现冒泡算法 a 建立新工程 加入实验 1 5 文件夹中的 maopao s b 补充完成源代码中缺失的部分 实现冒泡排序功 能 c 运行 Debug 进行调试 四 实验结果实验结果 1 实验 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 实现了累加功能 2 实验 1 3 C 调用汇编实现字符串拷贝功能 核心代码如下 LDRB R2 R1 1 拷贝源字符串的一个字节 微处理器系统结构与嵌入式系统设计实验报告 STRB R2 R0 1 将拷贝的字节复制到目标空间 图 1 3 图 1 4 可以看出拷贝前 srcstr 是 aaaa dststr 是 bbbb 拷 贝后 srcstr 是 aaaa dststr 是 aaaa 实现了字符串 拷贝功能 3 实验 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 转换为十进制为 0 x10 4 实验 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 地址后 首先如上图 设置权限才 能正确执行程序 微处理器系统结构与嵌入式系统设计实验报告 图 1 7 排序前 图 1 8 排序后 地址 0 x0000005C 0 x00000078 中保存的排序后的结果正确 程序实现了冒泡法排序功能 五 实验总结实验总结 1 此次实验用汇编和 C 语言实现了 1 N 的累加 字符串的拷 贝 数字求和以及冒泡法排序这几项功能 了解了汇编语 言的基础指令及其意义 学会了使用了 Keil 编译器编写和 调试程序 2 知道了 C 程序与汇编语言相互调用的规则 寄存器的使用规则 子程序间 通过寄存器 R0 R3 来 传递参数 如果更多参数需要传递 则需要使用堆栈 这也是第二题字符串复制中使用这也是第二题字符串复制中使用 R0R0 和和 R1R1 的原因的原因 在 子程序中 使用寄存器 R4 R11 来保存局部变量 寄存器 R12 用于子程序间 scratch 寄存器 用于保存 SP 在函数返回时使用该寄存器出桟 记作 IP 寄存器 R13 用于数据栈指针 记作 SP 寄存器 SP 在进 入子程序时的值和退出子程序时的值必须相等 寄存器 R14 称为链接寄存器 记作 LR 它用于保存子程 序的返回地址 寄存器 R15 是程序计数器 记作 PC 六 实验思考题实验思考题 1 Q ADD 替换成 ADDS SUB 替换成 SUBS 有什么影响 A 替换后 运算结果会影响标志寄存器 因为 ADD SUB 不带进位与借位 ADDS SUBS 带有进位与借位 运算完成 要置符号位 微处理器系统结构与嵌入式系统设计实验报告 2 Q MOV 替换成 MOVNE 有什么影响 A 替换后只有在上一步比较结果为不相等的时候才会执行 该指令 NE 属于 cond 意义为不相等 3 Q STMIA 换成 STMIB STMIA 换成 STMDA 有什么区别 A 换成 STMIB 是将每次传送后地址 4 变成每次传送前地 址 4 换成 STMDA 是将每次传送后地址 4 变成每次传送 后地址 4 4 Q 思考用 ARM 汇编实现 1 3 5 2n 1 或者 2 4 6 2n A 实现 1 3 5 2n 1 将 ADD R1 1 改为 ADD R1 2 设置 R1 初始值为 1 实现 2 4 6 2n 将 ADD R1 1 改为 ADD R1 2 设 置 R1 初始值为 2 5 Q 实验 3 中如果去除汇编代码中的 EXPORT strcopy 会 有什么

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论