ARM汇编实验报告_第1页
ARM汇编实验报告_第2页
ARM汇编实验报告_第3页
ARM汇编实验报告_第4页
ARM汇编实验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统原理与应用嵌入式系统原理与应用 B 课程实验报告课程实验报告 ARM 汇编语言编程与调试汇编语言编程与调试 要求完成的主要实验要求完成的主要实验 1 给出的数据中寻找最大 最小数问题给出的数据中寻找最大 最小数问题 2 两种求和运算的编程与调试两种求和运算的编程与调试 3 第四章作业第第四章作业第 9 题题 4 排序冒泡程序的调试与总结排序冒泡程序的调试与总结 5 第四章作业第第四章作业第 11 题题 说明 标注完成的实验 未完成的给予说明说明 标注完成的实验 未完成的给予说明 专业名称 专业名称 通信工程通信工程 班班 级 级 1510 班班 学生姓名 学生姓名 石龙飞石龙飞 学号 学号 8 位 位 03151307 指导教师 指导教师 刘钊远刘钊远 给出的数据中寻找最大 最小数问题给出的数据中寻找最大 最小数问题 一 实验目的 1 学习汇编软件的安装 使用 熟悉汇编环境 2 学会使用汇编软件 如何新建一个工程 如何书写源代码 如何进行链接 编译 以及如何调试 3 尝试一些简单的指令 学会用汇编指令写一些简单的程序 二 实验内容 编写一个汇编程序 要求在给定的一组数中找到最大数和最小数 三 实验主要步骤 1 首先建立一个工程 2 再新建 s 的源文件 添加到工程中 3 编写源代码 这里主要是实现在一组数中寻找最大数和最小数 最后将找到 的两个数放到相应的寄存器中 4 进行链接编译 看看有没有语法的错误 如果有错误编译器会提示错误的类 型以及在哪里出错 5 进行 debug 调试 查找代码中的逻辑错误 若无逻辑错误 可在 debug 界面 查看运行结果 其最需要的关注的几个地方是菜单栏的一组运行按钮 源码执 行的步骤以及断点 左边的寄存器状态 下方的存储器状态 将这些综合起来 就可以很明确的回到程序如何运行 运行结果如何 四 四 实验代码实验代码 AREA symbol CODE READONLY ENTRY CODE32 START LDR R0 nums MOV R2 1 INITNUMS STRR2 R0 4 ADDR2 R2 2 CMPR2 101 BNEINITNUMS LDRR0 nums LDRR2 R0 LDRR3 R0 MOVR1 1 FINDMAXMIN LDRR4 R0 4 CMPR2 R4 MOVCC R2 R4 CMPR3 R4 MOVCS R3 R4 ADDR1 R1 1 CMPR1 101 BNEFINDMAXMIN STOP bSTOP AREA Data DATA READWRITE numsSPACE 100 END 五 五 实验总结与分析实验总结与分析 1 实验结果分析 其中用红色方框框起来的是最后程序运行的结果 也就是在 R3 中保存了最 小数在 R2 中保存了最大数 完成了实验要求 2 在用汇编语言编程之前首先要看看有没有汇编软件 ADS 没有的话需要安装 Windows XP 安装起来比较简单 只需要点击 setup 一直点击写一部就可以 但是如果是 Windows 7 或者更高版本的话就需要在 setup 的属性里点击兼容 Windows XP 运行时以管理员身份运行才能正确进行安装 两种求和运算的编程与调试两种求和运算的编程与调试 一 实验目的 1 掌握循环的使用技巧 主要确定循环的上下界 以及循环体里需要执行 的代码 防止一些越界的操作 2 尝试不同的求和运算的算法 二 实验内容 给定一个正整数 求从零到这个数的所有整数的和 简单得对问题进行分 析可知 这个功能能过用两种方式实现 一种是循环 一种是直接用求和公式 计算出来 如果从算法的时间复杂度来说 那肯定是后者时间复杂度低 只有 O 1 但是从学习的角度 还是要练习一下循环结构 因此 这里主要用循环 语句实现 以研究其中的问题 三 实验主要步骤 1 打开 ADS 新建一工程 再新建一个 s 的源文件 将其添加到工程中去 开始编写源代码 2 链接 编译源文件 检查语法错误 3 用 debug 进行调试 观察寄存器的状态 在 stop 前打断点 全速运行 代码 这样就可以在代码最后天下来 查看运行结果 四 四 实验代码实验代码 AREA symbol CODE READONLY ENTRY CODE32 START LDR R0 sum MOV R1 100 MOV R2 0 MOV R3 0 LOOP ADD R2 R2 1 ADD R3 R3 R2 SUBR1 R1 1 CMP R1 0 BNE LOOP STRCS R3 R0 STOP MOV R0 0 x18 LDR R1 0 x20026 AREA Data DATA READWRITE sum DCD 0 END 五 五 实验总结与分析实验总结与分析 1 实验结果分析 用红色框圈起来的是最后执行的结果 也就是将最后 0 100 的和放在了 R3 中 是 0 x13BA 二这个程序采用的是循环的方式求 1 100 的和 所以最后一个 数字是 100 正是 R2 中的 0 x64 2 实验总结 因为这个程序里用到了循环语句 所以就有几个点需要注意 也就是循环的上下界和循环体力边的语句 在代码实现中 将 R1 寄存器的值置 为 100 然后再循环体里每次减一 然后和 0 进行比较 大于零的话继续 小 于等于零的话就跳出循环 这里容易出错的地方就是最后到底是和谁比较或者 R1 的初值给多少合适 再循环体里主要做了两件事 R2 从零开始每次加一 而 R3 就是截止目前所有数的和 排序冒泡程序的调试与总结排序冒泡程序的调试与总结 一 实验目的 1 更加深入理循环程序设计 注意循环嵌套中的一些问题 比如条件判断 步长 两层循环中间的代码设计 2 深入学习掌握 debug 调试的使用技巧 以及存储器窗口数据的观察 在 存储器中找到代码需要的地址 3 学会如何遍历存储在存储器中的数据 将其读入寄存器进行处理 二 实验内容 利用冒泡排序将给定的一组数进行排序 这里采用升序 在排序完和排序 后查看存储器的状态 检查排序是否成功 三 实验主要步骤 1 打开 ADS 新建一工程 再新建一个 s 的源文件 将其添加到工程中去 开始编写源代码 2 链接 编译源文件 检查语法错误 3 用 debug 进行调试 观察寄存器的状态 在 stop 前打断点 全速运行 代码 这样就可以在代码最后天下来 查看运行结果 四 四 实验代码实验代码 AREA symbol CODE READONLY ENTRY CODE32 START MOV R0 0 FOR1 LDRR2 nums MOVR1 0 FOR2 LDRR3 R2 LDRR4 R2 4 CMPR3 R4 LDRGT R5 R2 4 STRGT R3 R2 4 STRGT R5 R2 ADDR2 R2 4 ADDR1 R1 1 CMPR1 9 BCCFOR2 ADDR0 R0 1 CMPR0 9 BCCFOR1 AREA Data DATA READWRITE numsDCD12 3 45 1 44 100 0 12 10 3 END 五 五 实验总结与分析实验总结与分析 1 实验分析 第一张图为排序前寄存器以及存储器的状态及数据 主要观察两个部分 一 个是寄存器的 R2 它代表的是存放哪些数组地址的首地址 所以从这里开始读 取数据 然后找到地址为 0 x8040 的存储器 可以看到其中存放了数组中的十个 数 其顺序和定义时的顺序是一样的 也就是没有顺序 再看第二张图 这是程序执行完以后的寄存器和存储器的状态以及数据 从 标红的数据看一看出 这十个数据都发生了变化 第一个是最小的 0 x00 最后 一个是最大的 0 x0100 这样就将这十个数排序好了 冒泡排序的实现方法有很多种 比如可以先将最大的数推到数组的末尾 也 可以将最小的数先拿到数组的前边 两者道理其实都是一样 时间复杂度更是 一样 都是 O N2 对于大型的数据来说 最好还是采用快速排序 它的速度 是相当快的 2 实验总结 在定义数组的时候最好将其直接定义为十六进制 这样在存 储器中观察的时候就非容易 不需要自己进行十进制和十六进制的转化 在代 码全速运行前先进行单步的运行 以确定数组开始的地址 这样就能在存储器 中找到对应的数据了 统计字符个数统计字符个数 一 实验目的 1 学会使用字符串编程 如何在代码中定义字符串 字符串字存储器中占 有几个字节 如何将字符串中的每个字符取出来 2 再一次熟悉循环结果 CMP 的条件判断 如何执行 二 实验内容 自定义一个字符串 编写代码来统计这个字符串中的字符个数 这里还是 采用循环的方法来遍历整个字符串 没遍历一次字符数目加一 然后判断当前 是不是 0 时 0 则结束 三 实验主要步骤 1 打开 ADS 新建一工程 再新建一个 s 的源文件 将其添加到工程中去 开始编写源代码 2 链接 编译源文件 检查语法错误 3 用 debug 进行调试 观察寄存器的状态 由于此处的数据量较少 因此 可以点击单步运行 一直到运行到 stop 在此期间观察 R1 和 R2 数据的变化 R1 代表的是字符数目 R2 代表的是当前字符的 ASCII 码值 当 R2 的值为 0 时 退出循环 四 四 实验代码实验代码 AREA symbol CODE READONLY ENTRY CODE32 START LDR R0 strs MOV R1 1 LOOP LDRBR2 R0 1 ADDR1 R1 1 CMPR2 0 BNELOOP STOP MOVR0 0 x18 LDRR1 20026 SWI0 x12456 AREA Data DATA READWRITE strsDCB Hello ARM 0 END 五 五 实验总结与分析实验总结与分析 1 实验分析 图一是程序运行前的各寄存器和存储器的状态以及数据 可以看到字符串被 存储在 0 x802c 开始的地址中 每个字符占一个字节 因此可以知道 在往外读 取的时候应该一次读取一个字节 R1 的值是字符个数 再运行的时候 每读取 一个字符 R1 就加一 这样到最后就能统计到这个字符串总的字符个数 图二是程序运行结束时的寄存器的数据 可以看到 R1 最后统计的字符个数 是 0 x0c 也就是 11 个 而 R2 当前的值是 0 x00 也就是 0 结束标志 这刚好符 合事先给定的字符串 Hello ARM 2 实验总结 实验中比较容易出错的地方就是读取字符串中的每个字 符 单个字符在存储器中是以一个字节的 ASCII 码来存储的 所以每次读取 完指针加一就好 合并两个有序数组到第三个数组合并两个有序数组到第三个数组 一 实验目的 1 熟悉掌握比较跳转结构 能在程序中对复杂的跳转结构处理的清晰明朗 设计良好的判断语句 2 深入理解存储器中数组的存放顺序 能够按照程序给定的条件按需取出 需要的数据进行处理 二 实验内容 已知 BUF1 中有 N1 个按从小到大排序的互补相等的字符号 BUF2 中有 N2 个 按从小到大排序的互不相等的字符号 将 BUF1 和 BUF2 中的数合并到 BUF3 中按 从小到大的顺序排序 且互不相等 三 实验主要步骤 1 打开 ADS 新建一工程 再新建一个 s 的源文件 将其添加到工程中去 开始编写源代码 2 链接 编译源文件 检查语法错误 3 用 debug 进行调试 观察寄存器的状态 由于此处的数据量较少 因此可以 点击单步运行 一直到运行到 stop 在此期间观察 R1 R10 的变化 四 四 实验代码实验代码 AREA symbol CODE READONLY ENTRY CODE32 N1 EQU 10 N2 EQU 5 N3 EQU 15 START LDR R0 BUF1 LDR R1 BUF2 LDR R2 BUF3 MOV R3 0 MOV R4 0 MOV R5 0 LOOPI ADD R6 R0 R3 LSL 2 ADD R7 R1 R4 LSL 2 ADD R8 R2 R5 LSL 2 LDR R9 R6 LDR R10 R7 CMP R9 R10 BLT LOOPJ BGT LOOPK BEQ LOOP CMP R5 N3 BEQ STOP LOOPJ STR R9 R8 ADD R3 R3 1 ADD R5 R5 1 ADD R3 R3 1 CMP R3 N1 BLT LOOPI B LOPI LOPI STR R10 R8 04 ADD R4 R4 1 ADD R5 R5 1 ADD R7 R1 R4 LSL 2 LDR R10 R7 CMP R4 N2 BLT LOPI LOOPK STR R10 R8 ADD R4 R4 1 ADD R5 R5 1 CMP R4 N2 BLT LOOPI B LOPJ LOPJ STR R9 R8 04 ADD R3 R3 1 ADD R5 R5 1 ADD R6 R0 R3 LSL 2 LDR R9 R6 CMP R3 N1 BLT LOPJ LOOP STR R9 R8 ADD R3 R3 1 ADD R4 R4 1 ADD R5 R5 1 CM

温馨提示

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

评论

0/150

提交评论