ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:684.24KB ,
资源ID:4690192      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4690192.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ARM汇编实验报告.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ARM汇编实验报告.docx

1、ARM汇编实验报告嵌入式系统原理与应用B课程实验报告 ARM汇编语言编程与调试要求完成的主要实验1、给出的数据中寻找最大、最小数问题2、两种求和运算的编程与调试3、第四章作业第9题4、排序冒泡程序的调试与总结5、第四章作业第11题说明:标注完成的实验,未完成的给予说明专业名称: 通信工程班 级: 1510班 * *学号(8位): * *给出的数据中寻找最大、最小数问题一、实验目的 1、学习汇编软件的安装、使用,熟悉汇编环境。2、学会使用汇编软件,如何新建一个工程,如何书写源代码,如何进行链接、编译,以及如何调试。3、尝试一些简单的指令,学会用汇编指令写一些简单的程序。二、实验内容编写一个汇编程

2、序,要求在给定的一组数中找到最大数和最小数。三、实验主要步骤1、首先建立一个工程2、再新建.s的源文件,添加到工程中3、编写源代码,这里主要是实现在一组数中寻找最大数和最小数,最后将找到的两个数放到相应的寄存器中。4、进行链接编译,看看有没有语法的错误,如果有错误编译器会提示错误的类型以及在哪里出错。5、进行debug调试,查找代码中的逻辑错误,若无逻辑错误,可在debug界面查看运行结果,其最需要的关注的几个地方是菜单栏的一组运行按钮、源码执行的步骤以及断点、左边的寄存器状态、下方的存储器状态,将这些综合起来,就可以很明确的回到程序如何运行,运行结果如何。四、实验代码 AREA symbol

3、,CODE,READONLY ENTRY CODE32START LDR R0, =nums MOV R2, #1 INITNUMS STR R2, R0, #4 ADD R2, R2, #2 CMP R2, #101 BNE INITNUMS LDR R0, =nums LDR R2, R0 LDR R3, R0 MOV R1, #1 FINDMAXMIN LDR R4, R0, #4 CMP R2, R4 MOVCC R2, R4 CMP R3, R4 MOVCS R3, R4 ADD R1, R1, #1 CMP R1, #101 BNE FINDMAXMINSTOP b STOP AR

4、EA Data, DATA, READWRITEnums SPACE 100 END五、实验总结与分析1、实验结果分析其中用红色方框框起来的是最后程序运行的结果,也就是在R3中保存了最小数在R2中保存了最大数,完成了实验要求。2、在用汇编语言编程之前首先要看看有没有汇编软件ADS、没有的话需要安装,Windows XP安装起来比较简单,只需要点击setup,一直点击写一部就可以,但是如果是Windows 7或者更高版本的话就需要在setup的属性里点击兼容Windows XP,运行时以管理员身份运行才能正确进行安装。两种求和运算的编程与调试一、实验目的 1、掌握循环的使用技巧,主要确定循环的上

5、下界,以及循环体里需要执行的代码,防止一些越界的操作。2、尝试不同的求和运算的算法。二、实验内容给定一个正整数,求从零到这个数的所有整数的和。简单得对问题进行分析可知,这个功能能过用两种方式实现,一种是循环,一种是直接用求和公式计算出来,如果从算法的时间复杂度来说,那肯定是后者时间复杂度低,只有O(1),但是从学习的角度,还是要练习一下循环结构,因此,这里主要用循环语句实现,以研究其中的问题。三、实验主要步骤1、打开ADS,新建一工程,再新建一个.s的源文件,将其添加到工程中去,开始编写源代码。2、链接、编译源文件,检查语法错误 3、用debug进行调试,观察寄存器的状态,在stop前打断点,

6、全速运行代码,这样就可以在代码最后天下来,查看运行结果。四、实验代码 AREA symbol,CODE,READONLY ENTRY CODE32START LDR R0, =sum MOV R1, #100 MOV R2, #0 MOV R3, #0LOOP ADD R2, R2, #1 ADD R3, R3, R2 SUB R1, R1, #1 CMP R1, #0 BNE LOOP STRCS R3, R0STOP MOV R0, #0x18 LDR R1, =0x20026 AREA Data, DATA, READWRITEsum DCD 0END五、实验总结与分析1、实验结果分析用

7、红色框圈起来的是最后执行的结果,也就是将最后0100的和放在了R3中,是0x13BA,二这个程序采用的是循环的方式求1100的和,所以最后一个数字是100,正是R2中的0x64。2、实验总结:因为这个程序里用到了循环语句,所以就有几个点需要注意,也就是循环的上下界和循环体力边的语句。在代码实现中,将R1寄存器的值置为100,然后再循环体里每次减一,然后和0进行比较,大于零的话继续,小于等于零的话就跳出循环。这里容易出错的地方就是最后到底是和谁比较或者R1的初值给多少合适。再循环体里主要做了两件事,R2从零开始每次加一,而R3就是截止目前所有数的和。排序冒泡程序的调试与总结一、实验目的 1、更加

8、深入理循环程序设计,注意循环嵌套中的一些问题,比如条件判断、步长、两层循环中间的代码设计。2、深入学习掌握debug调试的使用技巧,以及存储器窗口数据的观察,在存储器中找到代码需要的地址。3、学会如何遍历存储在存储器中的数据,将其读入寄存器进行处理。二、实验内容利用冒泡排序将给定的一组数进行排序,这里采用升序,在排序完和排序后查看存储器的状态,检查排序是否成功。三、实验主要步骤1、打开ADS,新建一工程,再新建一个.s的源文件,将其添加到工程中去,开始编写源代码。2、链接、编译源文件,检查语法错误。 3、用debug进行调试,观察寄存器的状态,在stop前打断点,全速运行代码,这样就可以在代码

9、最后天下来,查看运行结果。四、实验代码 AREA symbol,CODE,READONLY ENTRY CODE32START MOV R0, #0FOR1 LDR R2, =nums MOV R1, #0FOR2 LDR R3, R2 LDR R4, R2, #4 CMP R3, R4 LDRGT R5, R2, #4 STRGT R3, R2, #4 STRGT R5, R2 ADD R2, R2, #4 ADD R1, R1, #1 CMP R1, #9 BCC FOR2 ADD R0, R0, #1 CMP R0, #9 BCC FOR1 AREA Data, DATA, READWR

10、ITEnums DCD 12, 3, 45, 1, 44, 100, 0, 12, 10, 3 END 五、实验总结与分析1、实验分析第一张图为排序前寄存器以及存储器的状态及数据,主要观察两个部分,一个是寄存器的R2,它代表的是存放哪些数组地址的首地址,所以从这里开始读取数据。然后找到地址为0x8040的存储器,可以看到其中存放了数组中的十个数,其顺序和定义时的顺序是一样的,也就是没有顺序。再看第二张图,这是程序执行完以后的寄存器和存储器的状态以及数据,从标红的数据看一看出,这十个数据都发生了变化,第一个是最小的0x00,最后一个是最大的0x0100,这样就将这十个数排序好了。冒泡排序的实现方

11、法有很多种,比如可以先将最大的数推到数组的末尾,也可以将最小的数先拿到数组的前边,两者道理其实都是一样,时间复杂度更是一样,都是O(N2),对于大型的数据来说,最好还是采用快速排序,它的速度是相当快的。2、实验总结:在定义数组的时候最好将其直接定义为十六进制,这样在存储器中观察的时候就非容易,不需要自己进行十进制和十六进制的转化。在代码全速运行前先进行单步的运行,以确定数组开始的地址,这样就能在存储器中找到对应的数据了。统计字符个数一、实验目的 1、学会使用字符串编程,如何在代码中定义字符串,字符串字存储器中占有几个字节,如何将字符串中的每个字符取出来。2、再一次熟悉循环结果,CMP的条件判断

12、,如何执行。二、实验内容自定义一个字符串,编写代码来统计这个字符串中的字符个数。这里还是采用循环的方法来遍历整个字符串,没遍历一次字符数目加一,然后判断当前是不是0,时0则结束。三、实验主要步骤1、打开ADS,新建一工程,再新建一个.s的源文件,将其添加到工程中去,开始编写源代码。2、链接、编译源文件,检查语法错误。3、用debug进行调试,观察寄存器的状态,由于此处的数据量较少,因此可以点击单步运行,一直到运行到stop,在此期间观察R1和R2数据的变化,R1代表的是字符数目,R2代表的是当前字符的ASCII码值,当R2的值为0时退出循环。 四、实验代码 AREA symbol,CODE,R

13、EADONLY ENTRY CODE32START LDR R0, =strs MOV R1, #-1 LOOP LDRB R2, R0, #1 ADD R1, R1, #1 CMP R2, #0 BNE LOOPSTOP MOV R0, #0x18 LDR R1, =20026 SWI 0x12456 AREA Data, DATA, READWRITEstrs DCB Hello, ARM!, 0 END 五、实验总结与分析1、实验分析图一是程序运行前的各寄存器和存储器的状态以及数据,可以看到字符串被存储在0x802c开始的地址中,每个字符占一个字节,因此可以知道,在往外读取的时候应该一次

14、读取一个字节,R1的值是字符个数,再运行的时候,每读取一个字符,R1就加一,这样到最后就能统计到这个字符串总的字符个数。图二是程序运行结束时的寄存器的数据,可以看到R1最后统计的字符个数是0x0c,也就是11个,而R2当前的值是0x00,也就是0结束标志,这刚好符合事先给定的字符串“Hello, ARM!”。 2、实验总结:实验中比较容易出错的地方就是读取字符串中的每个字符,单个字符在存储器中是以一个字节的ASCII码来存储的,所以每次读取完指针加一就好。合并两个有序数组到第三个数组一、实验目的 1、熟悉掌握比较跳转结构,能在程序中对复杂的跳转结构处理的清晰明朗,设计良好的判断语句。2、深入理

15、解存储器中数组的存放顺序,能够按照程序给定的条件按需取出需要的数据进行处理二、实验内容已知BUF1中有N1个按从小到大排序的互补相等的字符号,BUF2中有N2个按从小到大排序的互不相等的字符号,将BUF1和BUF2中的数合并到BUF3中按从小到大的顺序排序,且互不相等。三、实验主要步骤1、打开ADS,新建一工程,再新建一个.s的源文件,将其添加到工程中去,开始编写源代码。2、链接、编译源文件,检查语法错误。3、用debug进行调试,观察寄存器的状态,由于此处的数据量较少,因此可以点击单步运行,一直到运行到stop,在此期间观察R1R10的变化。四、实验代码 AREA symbol,CODE,R

16、EADONLY ENTRY CODE32N1 EQU 10N2 EQU 5N3 EQU 15START 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

17、 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 CM

18、P R3,#N1 BLT LOPJ LOOP STR R9,R8 ADD R3,R3,#1 ADD R4,R4,#1 ADD R5,R5,#1 CMP R3,#N1 BLT LOOPI BEQ LOPI CMP R4,#N2 BLT LOOPI BEQ LOPJ STOP MOV R0,#0x18 LDR R1,=0X20026 SWI 0X123456 AREA Data,DATA,READWRITEBUF1 DCD 0x03, 0x12, 0x20, 0x21, 0x43, 0x50, 0x70, 0x75, 0x90, 0x91BUF2 DCD 0x21, 0x44, 0x45, 0x5

19、0, 0x99BUF3 DCD 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 END五、实验总结与分析1、实验分析实验中用到了复杂的判断和跳转,其中需要分各种情况进行讨论,比如两个数组中的数据是否都已经存完,或者第三个数组是否存满,来确定下一步需要做什么,在这个程序中处理的不好的地方是当有重复的数据的时候,最后第三个数组不能很好的判断,出现了问题,没有相同数据的情况下可以正常运行。一下两图是运行前后寄存器和存储器数据的对比,可以看出来,除去重复数据,其他都正常运行。2、实验总结:此程序最难得地方就在于如何如何设置条件进行判断,如何进行跳转,每种情况可能会如何出现等等都是需要慎重考虑的问题。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1