ARM嵌入式实验报告(共10页)_第1页
ARM嵌入式实验报告(共10页)_第2页
ARM嵌入式实验报告(共10页)_第3页
ARM嵌入式实验报告(共10页)_第4页
ARM嵌入式实验报告(共10页)_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上实验一 ARM汇编指令使用实验基本数学/逻辑运算一、实验目的1. 初步学会使用ARM ADS / Embest IDE for ARM 开发环境及ARM软件模拟器。2. 通过实验掌握数据传送和基本数学/逻辑运算的ARM汇编指令的使用方法。二、实验设备1. 硬件:PC机。2. 软件:ADS 1.2 / Embest IDE 200X集成开发环境。三、实验内容1熟悉ADS 1.2 / Embest IDE 200X开发环境的使用,使用LDR/STR和MOV等指令访问寄存器或存储单元,实现数据的加法运算。具体实验程序如下:/* armasm1a.s */.EQU X, 45

2、 /*定义变量X,并赋值为45*/.EQU Y, 64 /*定义变量Y,并赋值为64*/.EQU STACK_TOP, 0X1000 /*定义栈顶0X1000*/.GLOBAL _START.TEXT_START: /*程序代码开始标志*/ MOVSP, #STACK_TOP MOV R0, #X /*X的值放入R0*/ STR R0, SP/*R0的值保存到堆栈*/ MOV R0, #Y /*Y的值放入R0*/ LDR R1, SP/*取堆栈中的数到R1*/ ADDR0, R0, R1 STR R0, SPSTOP: B STOP /*程序结束,进入死循环*/.END2使用ADD/SUB/L

3、SL/LSR/AND/ORR等指令,完成基本数学/逻辑运算。具体实验程序如下: /* armasm1b.s */.EQUX, 45/*定义变量X,并赋值为45*/.EQUY, 64/*定义变量Y,并赋值为64*/.EQU Z, 87/*定义变量Z,并赋值为87*/.EQUSTACK_TOP, 0X1000/*定义栈顶0X1000*/.GLOBAL _START.TEXT_START: /*程序代码开始标志*/ MOV R0, #X /*X的值放入R0*/ MOVR0, R0, LSL #8/*R0的值乘以2的8次方 */ MOV R1, #Y /*Y的值放入R1*/ ADDR2, R0, R1

4、, LSR #1 /*R1的值除以2再加上R0后的值放入R2*/ MOVSP, #0X1000 STRR2, SP MOV R0, #Z /*Z的值放入R0*/ ANDR0, R0, #0XFF/*取R0的低八位*/ MOV R1, #Y /*Y的值放入R1*/ ADDR2, R0, R1, LSR #1/*R1的值除以2再加上R0后的值放入R2*/ LDRR0, SP/*Y的值放入R1*/ MOVR1, #0X01 ORRR0, R0, R1 MOV R1, R2 /*Y的值放入R1*/ ADD R2, R0, R1, LSR #1/*R1的值除以2加上R0的值放入R2*/STOP: B S

5、TOP /*程序结束,进入死循环*/.END四、实验操作步骤1新建工程。先建立一个实验文件夹,如EARMSYarmasm1;然后运行Embest IDE集成开发环境,选择FileNew Workspace菜单项,弹出一个对话框,输入工程名armasm1a/armasmlb等相关内容;最后单击OK按钮,将创建一个新工程,并同时创建一个与工程名相同的工作区。此时在工作区窗口将能打开该工作区和工程。2建立源文件。选择FileNew菜单项,弹出一个新的、没有标题的文本编辑窗口,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。编辑完后,保存文件armasmla. s。3添加源文件。选择Pr

6、ojectAdd To ProjectFile项或单击工程管理窗口中的相应右键快捷菜单命令,打开文件选择对话框,在工程目录下选择刚才建立的源文件armasmla.s/armasmlb.s。4基本设置。选择ProjectSettings菜单项或按下快捷键Alt+F7,弹出工程设置对话框;在工程设置对话框中选择Processor属性页,按照使用要求对目标板所用处理器进行设置。5生成目标代码。选择BuildBuild armasmla菜单项或按下快捷键F7,生成目标代码。此步骤也可以通过单击工具栏上相应按钮来完成。6调试设置。选择选择ProjectSettings菜单项或按下快捷键Alt+F7,弹出

7、工程设置对话框;在工程设置对话框中,若选择Remote页面则对调试设备模块进行设置;若选择Debug页面则对调试模块进行设置。7选择DebugRemote Connect连接软件仿真器,执行Download命令下载程序,并打开寄存器窗口。8打开存储器窗口,观察地址0x80000x801F的内容以及地址0xFF00xFFF的内容。9单步执行程序,并观察和记录寄存器与存储器值的变化。10结合实验内容和相关资料观察程序运行,通过实验加深理解ARM指令的使用。五、实验结果分析1. 程序1用用来实现加法运算;程序2使用ADD/SUB/LSL/AND/ORR等指令,完成基本的数学/逻辑运算。2. 通过记录

8、程序1和程序2单步运行时有关寄存器与存储器的值,可以看出运行结果正确。实验二 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 200X集成开发环境。三、实验内容设计并调试一个存储区数据块的传送程序,具体数据块的传送要求为:将数据从源数据区snum复制到目标数据区dnum,数

9、据的个数num假定为20,复制时以8个字为单位进行,对于最后不足8个字的数据,以字为单位进行复制。用ARM汇编语言设计该数据块复制程序的设计思想如下:先将源数据区的起始地址、目标数据区的起始地址以及数据个数赋给选定的寄存器R0、R1、R2,再根据每次批量/单个复制数据的个数R3确定用于数据复制的中间寄存器R4R11,之后先将源数据区的若干个数据批量装载到中间寄存器中,再将中间寄存器的数据批量存储到目的数据存储区,随后进行数据是否复制完毕的判断,若未复制完毕,则修改有关操作数据地址,并重复前面的数据复制操作,否则,终止操作,程序结束。程序如下:.GLOBAL _START.TEXT.EQU NU

10、M, 20 /*定义需要复制的字数据个数NUM为20*/_START: LDR R0, =SRC /*将R0指向源数据区的起始地址*/ LDR R1, =DST /*将R1指向源数据区的起始地址*/ MOV R2, #NUM /*将需要复制的字数据个数存放在R2中*/ MOV SP, #0X400 /*将堆栈指针SP指向#0X400*/ BLKCOPY: MOVS R3, R2, LSR #3 /*R2的值除以8的结果存入R3*/ BEQ COPYWORDS /*若Z=1,则转COPYWORDS*/ STMFD SP!, R4-R11 /*将R4R11的内容存入堆栈进行保护*/OCTCOPY:

11、 LDMIA R0!, R4-R11 /*从源数据区装载8个字数据到R4R11*/ STMIA R1!, R4-R11 /*将R4R11中的8个字数据存入目的数据区*/ SUBS R3, R3, #1 /*每复制一次R3减1*/ BNE OCTCOPY /*若R3不等于0,则转移到OCTCOPY*/ LDMFD SP!, R4-R11 /*将堆栈内容恢复到R4R11*/ COPYWORDS: ANDS R2, R2, #7 /*计算需复制的奇数个字的个数*/ BEQ STOP /*若R2=0则停止*/WORDCOPY: LDR R3, R0, #4 /*将源数据区的一个字装载至R3*/ STR

12、 R3, R1, #4 /*将R3中的数据存到目的数据区*/ SUBS R2, R2, #1 /*数据传输控制计数器减1*/ BNE WORDCOPY /*若R2不等于0,则转移到WORDCOPY*/STOP: B STOP.LTORGSRC: /*源数据区起始地址标号*/ .LONG 1, 2,3 ,4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4DST: /*目的数据区起始地址标号*/ .LONG 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.END四、实验操作步骤1新

13、建工程。先建立一个实验文件夹,如EARMSYarmasm2;然后运行Embest IDE集成开发环境,选择FileNew Workspace菜单项,弹出一个对话框,输入工程名ARMcode等相关内容;最后单击OK按钮,将创建一个新工程,同时创建一个与工程名相同的工作区。此时在工作区窗口将打开该工作区和工程。2建立源文件。选择FileNew菜单项,弹出一个新的、没有标题的文本编辑窗口,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。编辑完后,保存文件armasm2.s。3添加源文件。选择ProjectAdd To ProjectFile项,或单击工程管理窗口中的相应右键快捷菜单命令

14、,打开文件选择对话框,在工程目录下选择刚才建立的源文件armasm2.s。4基本设置。选择ProjectSettings菜单项或按下快捷键Alt+F7,弹出工程设置对话框;然后在工程设置对话框中,选择Processor属性页,对目标板所用处理器进行设置。5生成目标代码。选择BuildBuild armasm2菜单项或按下快捷键F7,生成目标代码。也可以单击工具栏上的相应按钮来完成。6调试设置。选择ProjectSettings菜单项或按下快捷键Alt+F7,弹出工程设置对话框;在工程设置对话框中,若选择Remote页面则对调试设备模块进行设置;若选择Debug页面,则对调试模块进行设置。7选择

15、DebugRemote Connect连接软件仿真器,执行Download命令下载程序,并打开寄存器窗口。8打开存储器窗口,观察地址0x80540x80A0的内容以及地址0x80A40X80F0的内容。9单步执行程序并观察和记录寄存器与存储器值的变化,注意观察步骤8的地址中的内容变化。当执行STMFD、LDMFD、LDMIA和STMIA指令时,注意观察其后面的参数所指的地址段或寄存器段的内容变化。10结合实验内容和相关资料观察程序运行,通过实验加深理解ARM指令的使用。五、实验结果分析执行-START之后:R0:0X R1:0Xa4 R2:0X SP:0X执行STMIA R1!,R4R11后:

16、R0:0X R1:0Xa4 R4R11:0X0X执行LDMFD之后:SP:0X R4R11:0X0X实验最终完成了将数据从源数据区snum复制到目标数据区dnum。实验三 汇编语言与C语言的相互调用实验随机数发生器一、 实验目的1阅读实验程序,观察处理器启动过程,学会使用ADS1.2/Embest IDE辅助信息窗口来分析判断调试过程和结果。2学会在ADS1.2/Embest IDE中编写、编译与调试汇编语言和C语言相互调用的程序。二、实验设备1. 硬件:PC机。2. 软件:ADS 1.2 / Embest IDE 200X集成开发环境。三、实验内容使用汇编语言设计一个产生随机数的函数,然后通

17、过C语言来调用该函数产生一系列随机数,并存放到数组中。程序如下。1randtest.c源代码/*随机数产生测试例子,程序通过调用random.s中的函数randomnumber来生成随机数*/#include <stdio.h>extern unsigned int randomnumber( void );int main( ) int i; int nTemp; unsigned int random10; for( i = 0; i < 10; i+ ) nTemp = randomnumber( ); randomi = nTemp; return( 0 );2ini

18、t.s源代码/*系统初始化程序,用于硬件初始化设置,并转入外部的随机数产生主函数main( )*/#程序入口,ARM汇编#.ARM.GLOBAL _START.TEXT_START: B RESET_HANDLERUNDEFINED_HANDLER: B UNDEFINED_HANDLERSWI_HANDLER: B SWI_HANDLERPREFETCH_HANDLER: B PREFETCH_HANDLERABORT_HANDLER: B ABORT_HANDLER NOP/* RESERVED VECTOR */IRQ_HANDLER: B IRQ_HANDLERFIQ_HANDLER:

19、 B FIQ_HANDLERRESET_HANDLER: LDRSP, =0X .EXTERN MAIN LDR R0, = MAIN MOV LR, PC BX R0#- LOOP FOR EVEREND: B END.GLOBAL _GCCMAIN_GCCMAIN:MOV PC, LR .END 3random.s源代码# 这是一个使用33位反馈移位寄存器产生伪随机数的函数产生器RANDOMNUMBER# AREA |Random$code|, CODE, READONLY .GLOBAL RANDOMNUMBERRANDOMNUMBER:# ON EXIT:# A1 = 32伪随机数的低

20、位数据# A2 = 32伪随机数的高位数据 LDR IP, SEEDPOINTER LDMIA IP, A1, A2 TST A2, A2, LSR#1 MOVS A3, A1, RRX ADC A2, A2, A2 EOR A3, A3, A1, LSL#12 EOR A1, A3, A3, LSR#20 STMIA IP, A1, A2 MOV PC, LRSEEDPOINTER: .LONG SEED.DATA .GLOBAL SEEDSEED: .LONG 0X .LONG 0X# END4链接脚本文件ldscript参考源代码SECTIONS. = 0x0;.text : *(.te

21、xt) .data : *(.data) .rodata : *(.rodata) .bss : *(.bss) 链接脚本程序主要是描述编写的文件中的各个部分如何摆放在输出文件中,并控制这些文件如何定位这些输出文件。链接脚本文件必须以关键词SECTIONS开始,紧接着式大括号,后面是所有需要输出地描述部分,最后是闭括号收尾,并且全部使用半角符号。本ldscript文件中各语句的含义是:“.=0x0”为将当前地址计数器指向0x0,“.text : *(.text) ”为程序代码必须放在当前的地址计数器指向的0x0处,“.data : *(.data) ”为已经初始化的数据必须放在当前的地址计数器指向的地方(紧接text区域后),“.rodata : *(.rodata) ”为只读数据必须放在当前的地址计数器指向的地方(紧接data区域后),“.bss : *(.bss) ”为未初始化的数据必须放在当前的地址计数器指向的地方(紧接rodata区域后)。四、实验操作步骤1创建新的工程,工程名为armcasm。2 按照参考程序编写源代码文件,并分别保存为 randtest.c、init. s、random. s和ldscript,然后把它们加入工程中。3按照编译汇编器设置链接器设置调试器设置的顺序来设置新工

温馨提示

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

评论

0/150

提交评论