湖南工业大学ARM实验报告_第1页
湖南工业大学ARM实验报告_第2页
湖南工业大学ARM实验报告_第3页
湖南工业大学ARM实验报告_第4页
湖南工业大学ARM实验报告_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、arm嵌入式系统原理及应用开发实验报告学院:电气与信息工程学院班级:电子信息1204指导老师:谭会生姓名:学号:实验一:arm汇编指令使用实验基本数学/逻辑运算一、实验目的1. 初步学会使用arm ads / embest ide for arm开发环境及arm软件模拟器。2. 通过实验掌握数据传送和基木数学/逻辑运算的arm汇编指令的使用方法。二、实验设备1. 硬件:pc机。2. 软件:ads 1.2 / embest ide 200x集成开发环境。三、实验内容熟悉ads 1.2 / embest ide 200x开发环境的使用,使用ldr/str和mov等指令访问寄存器 或存储单元,实现数

2、据的加法运算。具体实验参考程序如下:四. 实验操作步骤1. 新建工程。先建立一个实验文件夹,如earmsyarmasml;然后运行embest ide集成开 发环境,选择file-new workspace菜单项,弹出一个对话框,输入工程名 armasmla/armasmlb等和关内容;最后单击0k按钮,将创建一个新工程,并同时创建一个 与工程名相同的工作区。此时在工作区窗口将能打开该工作区和工程。2. 建立源文件。选择file-new菜单项,弹出一个新的、没有标题的文木编辑窗口,输入 光标位于窗口小第一行,按照实验参考程序编辑输入源文件代码。编辑完后,保存文件 armasmla. so1)

3、armasmla. s 源程序:/* armasmla.s */equ x, 45/*定义变量x,并赋值为45*/.equ y,64严定义变量y,并赋值为64*/.equ stack_top, 0x1000/*定义栈顶 0x1000*/.global _start.textmovsp, #stack_topmov ro, #x/*x 的值放入 ro*/str ro, sp/*ro的值保存到堆栈*/mov ro, #y/*y 的值放入 ro*/ldr r1,sp /*取堆栈中的数到rl*/addro,ro,r1strro, spstop: bstop/*程序结束,进入死循环*/.end2).使用

4、add/sub/lsl/lsr/and/orr等指令,完成基本数学/逻辑运算。具体实验参考 程序如下:start:/*程序代码开始标志*/ /*x的值放入ro*/*r0的值乘以2的8次方*/stop:.endmovr1,#y/*y的值放入rl*/addr2, r0,rl,lsr#l/*r1的值除以2再加上r0示的值放入r2*/movsp, #0x1000strr2, spmovr0, #z/*z的值放入r0*/andr0, r0, #0xff/*取r0的低八位*/movr1,#y/*y的值放入rl*/addr2, ro,r1,lsr#1/*r1的值除以2再加上r0后的值放入r2*/ldrr0,

5、 sp/*y 的值放入 rl*/movrl,#0x01orrr0, r0, rlmovr1,r2/*y的值放入rl*/addr2, r0, r1,lsr#1/*r1的值除以2加上r0的值放入r2*/bstop/*程序结束,进入死循环*/mov ro, #xmov ro, ro, lsl#8/* armasmlb.s */.equx, 45/*定义变量x,并赋值为45*/.equy,64/*定义变量y,并赋值为64*/.equz, 87严定义变量z,并赋值为87*/.equstack_top, 0x1000 /*定义栈顶 0xi000*/ global _start.text3. 添加源文件。选

6、择project>add to project>file项或单击工程管理窗口中的相应右键快 捷菜单命令,打开文件选择对话框,在工程冃录下选择刚才建立的源文件armasmla.s/armasmlb.sos34基本设置。选择project>settings菜单项或按下快捷键alt + f7,弹出工程设置对话框; 在工程设置对话框中选择processor属性页,按照使用要求対目标板所用处理器进行设置。project settingssettings for :(=)£目 workspace 'asml : 2 proje>asml a filesw (_ p

7、roject source files i_| project header files b asm1_b filessprojert source files _| project header filesprocessor | remote | debug | directory | compiler | assemb i cpu module : jarm7support for arm7 familyver: 1187865endiang little endianl big endiancpuperipheralfamily :arm7maker :|member :arm7jdch

8、ip :jdbuild tools :| gnu tools for armokcancel5. 生成目标代码。选择build->build armasmla菜单项或按下快捷键f7,生成目标代码。此 步骤也可以通过单击工具栏上相应按钮來完成。0 w0 a t * *d 0s 期 smbi*: 7 9 annl imr»j re*t<1 bmtcw2 ml.a.tj r0t«血 0 qim mr«_jsmtm6. 调试设置。选择选择projectsettings.单项或按下快捷键alt + f7,弹出丄程设置对 话框;在工程设置对话框屮,若选择remot

9、e页而则对调试设备模块进行设置;若选择debug 页面则对调试模块进行设置。7. 选择debug>remote connect连接软件仿真器,执行download命令下载程序,并打开寄 存器窗口。!9iisilasssmassmssq三三三二三三 二 二 - . 一 .二 .f. .二 t - - 一 二 .f. -f- - -<<j<«se«5er$<je<j<<吏-te<<*<<s<«9x o 0=_8. 打开存储器窗口,观察地址0x80000x801f的内容以及地址oxffooxf

10、ff的内容。address: 0 *1 *2 *3 *4 *5 *6 *7 8 +9 “+c *d *e +f *0 *1 2 *300000000ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff00000014ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff00000028ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ffooo0003cff ff ff ff ff ff ff ff f

11、f ff ff ff ff ff ff ff ff ff ff ff00000050ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff00000064ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff00000078ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff9. 单步执行程序,并观察和记录寄存器与存储器值的变化。五、实验报告_执行-start前将45赋值给x,将64赋值给y,并定义栈顶

12、为0x00001000,执 行 mov sp, #stack_top 后 sp: 0x00001000,执行 movr0, #乂后 r0:0x0000002d执行 movro, #y 后 ro: 0x00000040ldrrl, sp取堆栈屮的数到r1add ro, ro, rl 执行前 r0:0x0000002d rl: 0x00000040 执行后:ro: 0x0000006d 最终实现了两个数字的相加。六实验总结本次实验主要是熟悉arm汇编指令和学习使用arm ads / embest ide for arm开发环境 及arm软件模拟器。本次为验证试验,通过本次实验掌握了基本的汇编语句,

13、实现了基本的 加法运算和基本的数学/逻辑运算。在实验过程中记录了在但不运行吋有关寄存器和存储器 的值,经过查询分析,查看寄存器和存储器的值,检查结果是否正确;通过这次实验熟练掌 握了软件的操作和使川,学到了很多。实验二arm汇编指令使用实验存储区数据块的传送一. 实验目的1熟悉arm ads 1.2 / embest ide for arm开发环境及arm软件模拟器的使用。2.通过实验掌握使用ldm/stm. b、bl等指令完成较为复杂的存储区访问和分支程 序的方法,学习使用条件码,加强对cpsr的认识。二. 实验设备1. 硬件:pc机。2软件:ads 1.2 / embest ide 200

14、x集成开发环境。三. 实验内容设计并调试一个存储区数据块的传送程序,具体数据块的传送耍求为:将数据从源数据 区snum复制到目标数据区dnum,数据的个数num假定为20,复制时以8个字为单位进行, 对于最后不足8个字的数据,以字为单位进行复制。用arm汇编语言设计该数据块复制程 序的设计思想如下:先将源数据区的起始地址、口标数据区的起始地址以及数据个数赋给选 定的寄存器ro、rl、r2,再根据每次批量/单个复制数据的个数r3确定川于数据复制的中 间寄存器r4r11,之后先将源数据区的若干个数据批量装载到屮间寄存器屮,再将小间寄 存器的数据批址存储到目的数据存储区,随示进行数据是否复制完毕的判

15、断,若未复制完毕, 则修改冇关操作数据地址,并重复前面的数据复制操作,否则,终止操作,程序结束。四. 实验操作步骤1. 新建丄程。先建立一个实验文件夹,如earmsyarmasm2;然后运行embest ide 集成开发环境,选择file>new workspace菜单项,弹出一个对话框,输入匚程名armcode 等相关内容;最后单击ok按钮,将创建一个新工程,同时创建一个与工程名相同的工作区。 此吋在工作区窗口将打开该工作区和工程。输入光标位于窗口屮第一行, armasm2. so .global _start.text.equ num, 20start:2. 建立源文件。选择file

16、->new菜单项,弹出一个新的、没冇标题的文木编辑窗口,/*定义需要复制的字数据个数num为20*/按照实验参考程序编辑输入源文件代码。编辑完后,保存文件ldrr0,=srcldrrl,二 dstmovr2,#nummovsp,#0x400movsr3,r2, lsrblkc0py:beq/*将r0指向源数据区的起始地址*/*将r1指向源数据区的起始地址*/*将需要复制的字数据个数存放在r2中*/*将堆栈指针sp指向#0x400*/#3/*r2的值除以8的结果存入r3*/copywordsstmfd sp!, r4-r11/*若 z=1,则转 copywords*/*将r4r11的内容存

17、入堆栈进行保护*/0ctc0py:ldmia r0!, r4-r11/*从源数据区装载8个字数据到r4r11*/stmia rl!, r4-r11/*将r4r11中的8个字数据存入目的数据区*/subsr3, r3,#1/*每复制一次r3减1*/bxe0ctc0py/*若r3不等于0,则转移到0ctc0py*/ldmfdsp!,r4-r11/*将堆栈内容恢复到r4r11*/copywords:axdsr2, r2, #7/*计算盂复制的奇数个字的个数*/beqstop/*若r2=0则停止*/wordcopy:ldrr3,r0,#4/*将源数据区的一个字装载至r3*/strr3,rl,#4/*将

18、r3屮的数据存到目的数据区*/subsr2,r2, #1/*数据传输控制计数器减1*/bxewordcopy/*若r2不等于0,则转移到wordcopy*/stop:stop.ltorgsrc:/*源数据区起始地址标号*/.long1, 2,3 ,4, 5, 6, 7, & 1,2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4dst:/* fl的数据区起始地址标号*/ long0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.end3.添加源文件。选择 project>add to project&g

19、t;filc 项,快捷菜单命令,打开文件选择对话框,在工程冃录下选择刚才建立的源文件armasm2.se或单击工程管理窗口中的相应右键4.基本设置。选择project>settings菜单项或按下快捷键alt+f7,弹出工程设置对话框;然后在工程设置対话框中,选择processor属性页,対目标板所用处理器进行设置。projort sottincjssettings for :rroccssor | remote | debug directory | compiler assemb icrij module :2>rm7support for arm7 family*vter:

20、1 1 k/hsscpufamilv : (arm7member : |arm7build tools :(gnu tools for armine ndlangendianc hii|okcancel5.牛成h标代码。选择build>build annasm2菜单项或按卜快捷键f7,牛成h标代码。也可以单击工具栏上的相应按钮来完成。(=)-a/orkt»pt»ce anmco<lc,: 1 pro 曰 isjs) afimcodc filcef=ihoiaro<?卜ileals2i ammcodc.fi ,n“x is 11 it it 11 it、ta

21、f 1 isx0x o0oo0m0hs wl. n vex oer rr riiox ociooohocs wl. omox >c>ffffffox uuooc9u 1 os w±fl vox ooffffffux uuuuum *4r wdl n mux卜卜卜w卜0x o0oohhi8s wl n vox eer r r r r rmx n m n n n mi nwl n vhx mmffffffox c> ci n n n ci? on voxooffffff"x 19 11 c1 u u 119 wi. n mux 1119f 卜 wox 0000

22、0028、w jt ibmex oer m i icix<z £ n o“x nclf f f f f fox m m (1 (> o (9b os wi. omox 0offffffmx i) (1 u4w333 w1. vi mmx mmf 卜 wox o0ooo03803 1 iimoxoorrrrrrox nnnnnnnc:v>1 noox noffffffax anonoan os £ nmox 0offffffox oc9oo0o««i4swl vimox oof fffffux 11 hum 11w i ibmux uu*

23、 ax<;wl flmox aoy <=ox () o o » o os q&£ nmoxox ouo00ms14swl vimox ooffffffmx oi1sht> wjl iimoxcw ax nannansc:vwt noox ooffffff»x m m m » » ma q& ft. nm»m hof f f f f fox uuooou6 *s w±fl vox ooffffff、w jl iimux uuf f f f f fox oooooikscs wl. n vox

24、oor m i i0x 00ooooz o. rw m m"p s wl.nmox 0of fffff6.调试设置。选择project-settings菜单项或按下快捷键alt+f7,弹出工程设置对话框; 在工程设置对话框中,若选择remote页面则对调试设备模块进行设置;若选择debug页面, 则对调试模块进行设置。7选择debugremote connect连接软件仿真器,执行download命令卜载程序,并打开寄 存器窗口。b-current ro: oxoooooooor1: 0x00000000r2: 0x00000000r3: 0x00000000r4: 0x006000

25、00r5: 0x00006000r6: 0x00000000r7: 0x00008060r8: 0x00000000r9: 0x00000000r10: 0x00060808r11: 0x06000000r12: 0x00000000r13: 0x06000000r14: 0x00000000r15: 0x00008000sp: 0x00000000lr: 0x00000008pc: 0x00008000cpsr: 0xo0ooo(d3spsr: 0x000000005; register | a peripheral |8.打开存储器窗口,观察地址0x80540x80a0的内容以及地址0x8

26、0a40x80f0的内容。o0oo23o46m9o8cmfw2- 0008000 0 0 0 0 0 9 0*f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ff f f f f f f f f f f f f f f ff f f f f f f f f f f f f f f ff f f f f f f f f f f f f f f f f f f fffffffff ff ff ff ff ff ff ff f f f f f f f f f

27、 f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f f ff f f f f f f f f f f f f f f f f f f f f f f f五、实验报告执行-start z后:r0:0x00008054rl:0x000080a4r2:0x00000014 sp:0x00004000执行 stmia rl!,r4r 11后:r0:0x00008074r1:0x000080a4r4r11: 0x00000001-0x00000008执行ldmfd之后:sp:0x000004000r4 r11:0x000000000x

28、000000000实验最终完成了将数据从源数据区snum复制到目标数据区dnumo六、实验总结进一步熟悉了 armads 1.2/embest ide for arm开发环境及arm软件模拟器的使 用。通过本次实验掌握使川ldm/stm. b、bl等指令完成较为复杂的存储区访问和分支程 序的方法,学习使用条件码,加强对cpsr的认识,掌握了存储数据块的传送,加强了对操 作命令符的认识,以及选择wire型和reg型的区别,更加熟悉和编写程序,对程序的理解 也进一步加深,同时也发现了许多不足,有很多指令需进一步弄懂和多向其他人请教学习。实验三 汇编语言与c语言的相互调用实验随机数发生器一、实验目的

29、1. 阅读实验程序,观察处理器启动过程,学会使用ads1.2/embest ide辅助信息窗口 来分析判断调试过程和结果。2. 学会在ads1.2/embest ide中编写、编译与调试汇编语言和c语言相互调用的 程序。二、实验设备1. 硬件:pc机。2. 软件:ads 1.2 / embest ide 200x集成开发环境。三、实验内容使川汇编语言设计一个产牛随机数的两数,然后通过c语言來调用该函数产生一系列 随机数,并存放到数组屮。四、实验步骤1. 创建新的工程,工程名为armcasmo2. 按照参考程序编写源代码文件,并分别保存为randtest.c>init. s>rand

30、om, s和idscript, 然后把它们加入工程中。1). randtest.c参考源代码/*随机数产牛测试例了,程序通过调用random.s小的函数randomnumber來生成随机数*/#includc <stdio.h>extern unsigned int randomnumber( void ); int main()int i;int ntcmp;unsigned int random10;for( i = 0; i < 10; i卄)ntemp = randomnumber(); randomi = ntemp;return( 0);2). inits参考源代

31、码严系统初始化程序,用丁诬件初始化设置,并转入外部的随机数产生主函数main( )*/ #程序入口,arm汇编#.arm.global _start.textstart:bundefined_handler:swi handler:bresethandlerbundefined_handlerswi handlerprefetchhandler:bprefetchhandlerabort_handler:babort_handlernop /* reserved vector */irq_handler:bfiq handler: reset_handler: .extern ldr mov

32、bx # loop for ever end:birq handlerbfiqhandlerldr sp, =0x00002000mainr0, = mainlr, pcr0end.global _gccmain_gccma1n:movpc, lr.end3). random.s参考源代码#这是一个使用33位反馈移位寄存器产生伪随机数的函数产生器randomnumber#area |random$code|, code, readonly.global randomnumberrandomnumber:# on exit:# al =32伪随机数的低位数据# a2 = 32伪随机数的高位数据l

33、dr ip, seedpointerldmia ip, a1,a2tsta2,a2,lsr#1movsa3, al, rrxadca2, a2, a2eora3,a3,a1,lsl#12eora1,a3,a3, lsr#20stmiaip, a1,a2movpc, lrseedpointer:.longseed.data.globalseedseed:.long0x55555555.long0x55555555#end4).链接脚木文件idscript参考源代码sections = 0x0;.text: *(.text).data : *(.data) .rodata : *(.rodata) .bss : *(.bss)3. 编译一汇编器设置一链接器设置一调试器,并编译、链接工程

温馨提示

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

评论

0/150

提交评论