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

付费下载

下载本文档

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

文档简介

1、精品文档实验一 ARM汇编语言程序设计一、实验目的1. 了解 IAR Embedded Workbench 集成开发环境2. 掌握 ARM汇编指令程序的设计及调试二、实验设备1. PC操作系统 WIN98或 WIN2000或 WINXP,ADSI.2 集成开发环境,仿真驱动程序三、实验内容1. 熟悉 IAR Embedded Workbench 集成开发环境2. 理解下列程序,新建工程,加入下面的程序,并观察实验结果,解释程序实现的功能分析:该程序实现的功能是 程序功能: Y = A*B+C*D+E*F 程序代码:AREA Examl, CODE,READONLY定;义一个代码段ENTRY;

2、程序入口MOV R0,#0;设置 R0寄存器的值为 0MOV R8,#0;设置 R8寄存器的值为 0ADR R2,N;将 R2寄存器的值设为数据域N的地址LDR R1,R2;将以 R2的值为地址的数据读入 R1MOV R2,#0;设置 R2的值为 0ADR R3,C;将 R3寄存器的值设为数据域C的地址ADR R5,X;将 R5寄存器的值设为数据域X的地址LOOPLDR R4,R3,R8;将 R3+R8的数据读入 R4LDR R6,R5,R8;将 R5+R8的数据读入 R6MUL R9,R4,R6;R9 = R4*R6ADD R2,R2,R9;R2 = R2+R9ADD R8,R8,#4;R8

3、 = R8+4ADD R0,R0,#1;R0 = R0+1CMP R0,R1;比较 R0和 R1的值BLT LOOP;R0<R1的话执行循环N DCD 0X03;C DCD 0X01,0X02,0X03,0X04,0X05,0X06;X DCD 0X01,0X02,0X03,0X04,0X05,0X06;END程序结果: 各个寄存器的结果。1欢迎下载精品文档执行结果如下:3. 实现 1+2+3+4+····+100,求的值,并保存在地址 0x90018 的地址里面程序代码:MOV R0,#100;设置 R0寄存器的值为 100LDR R2,=0X9

4、0018;设置 R2寄存器指向地址 0x90018。2欢迎下载精品文档MOV R1,#0;设置 R1的值为 0MOV R3,#0;设置 R3的值为 0LOOPADD R3,R3,R0;R3 = R3+R0SUB R0,R0,#1;R0 = R0-1CMP R0,R1;将R0和 R1的值比较BNE LOOP;不相等的话继续执行循环STR R3,R2;将 R3的值装入到 R2指向的地址块中。END程序执行结果: 程序执行完在 0x90018 内存入的数据是0x13ba 即 5050实验二 ARM汇编语言程序设计一、实验目的1. 了解 ARM汇编语言的基本框架,学会使用 ARM的汇编语言编程;2.

5、掌握 ARM汇编指令中的堆栈指令的操作,以及存储器的装载指令操作。二、实验设备。3欢迎下载精品文档1. PC操作系统 WIN98或 WIN2000或 WINXP, ADS1.2. 集成开发环境, 仿真器驱动程序。三、实验内容1. 理解下列程序,新建工程,加入下面的程序,并观察实验结果程序代码:x EQU 15; 定义常量 x=15y EQU 61; 定义常量 y=61stack_top EQU 0X1000;定义堆栈栈顶地址为0x1000ENTRY;程序入口处MOV sp,#stack_top;将堆栈指针指向栈顶MOV r0,#x;将x 的值放入 r0STR r0,sp;将 r0 的值压入堆栈

6、MOV r0,#y;将y 的值放入 r0LDR r1,sp;将 x的值放入 r1ADD r0,r0,r1;r0 = r0+r1STR r0,sp;将 r0 的值装入堆栈Stop;B stop;程序结果为 : r1 = x+y = 0x6D2. 编写程序循环 R4R11进行累加 8次赋值, R4R11初始值是 18,每次操作后把R4R11的内容放到 SP栈中, SP初始设置为 0x800,最后把 R4R11用 LDMFD指令清空为 0程序代码如下:。4欢迎下载精品文档X EQU 1; 定义常量 x = 1stack_top EQU 0X800;定义栈顶地址ENTRY;MOV SP,#stack_

7、top;将栈顶地址指向 0x800MOV R4,#1;设置R4 = 1MOV R5,#2;设置R5 = 2MOV R6,#3;设置R6 = 3MOV R7,#4;设置R7 = 4MOV R8,#5;设置R8 = 5MOV R9,#6;设置R9 = 6MOV R10,#7;设置R10=7MOV R11,#8;设置R11=8LOOPADD R4,R4,#x; R4累加 1ADD R5,R5,#x; R5累加 1ADD R6,R6,#x; R6累加 1ADD R7,R7,#x; R7累加 1ADD R8,R8,#x; R8累加 1ADD R9,R9,#x; R9累加 1ADD R10,R10,#x;

8、 R10累加 1ADD R11,R11,#x; R11累加 1STMIA SP!,R4-R11;将 R4-R11的值压入堆栈CMP R4,#9; 比较 R4和 9的大小BLT LOOP;R4 < 9 继续执行循环LDMFD SP!,R4-R11;将 R4-R11清零END;实验结果: 主要实现将数据2-9,3-10,4-11 9-16 压入堆栈(初始地址是0x800处开始),最后将 R4-R11全部清零。5欢迎下载精品文档3. 更改实验中 1中的 X,Y的值,观察期结果程序代码:x EQU 20y EQU 120stack_top EQU 0X1000ENTRYMOV sp,#stack

9、_topMOV r0,#xSTR r0,spMOV r0,#yLDR r1,spADD r0,r0,r1STR r0,spStopB StopEND程序结果为: r0 = x+y = 140 = 0X8C。6欢迎下载精品文档实验三 ARM汇编语言程序设计一、实验目的1. 了解 ARM汇编语言的基本框架,学会使用 ARM的汇编语言编程2. 掌握 ARM汇编的存储器加载 / 存储指令,及 if 条件、循环、循环及循环的汇编实现二、实验设备1.PC 操作系统 WIN98或 WIN2000或 WINXP,ADS1.2集成开发环境,仿真器驱动程序三、实验内容1. 理解下列程序,新建工程,加入下面的程序,

10、并观察实验结果程序代码:Num EQU 20;定义常量 Num = 20START;LDR r0,=src;将 src 数据块的开始地址存入r0 中LDR r1,=dst;将 dst 数据块的开始地址存入r1 中MOV r2,#Num; 设置 r2 的值为 20MOV sp,#0x400;堆栈指针 sp指向 0x400blockcopy;MOVS r3,r2,LSR #3; 将r2 左移 3位移入 r3 并且影响标志位 BEQ copywords; 结果为 0的话跳转到 copywords。7欢迎下载精品文档STMFD SP!,r4-r11;将r4-r11 的值入栈octcopy;LDMIA

11、r0!,r4-r11;将src 的前 8个字数据存入让 r4-r11STMIA r1!,r4-r11;将r4-r11 中的数据放入 dst 数据块中SUBS r3,r3,#1;r3 = r3-1BNE octcopy; 结果不为 0跳转到 octcopyLDMFD SP!,R4-R11;恢复原来的 r4-r11copywords;ANDS r2,r2,#7; r2= r2&7BEQ stop; 结果为 0跳转到 stopwordcopy;LDR r3,r0,#4;将 r0指向的字数据放入r3 中, r0 = r0+4STR r3,r1,#4;将 r3中的数据存入到 dst 数据块中,

12、r1 = r1+4SUBS r2,r2,#1;r2 = r2 -1BNE wordcopy;不为 0跳转到 wordcopy 处stop;B stop;src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4;dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;END;程序结果: 将 src 的数据全部存入到dst 中2.新建工程,并自行编写程序,分别使用LDR,STR,LDMIA,STMIA操作,实现对某段连续存储单元写入数据,并观察结果程序代码:MOV R4,#1;设置 r4 = 1 ;。8欢迎下载精品文档M

13、OV R5,#2;设置 r5 = 1 ;MOV R6,#3;设置 r4 = 1 ;LDR R0,=dst;R0保存 dst 的首地址STR R4,R0;将r4 的值装入 r0 执行的内存中STR R5,R0,#4;将r5 的值装入 r0+4 执行的内存中STR R6,R0,#8;将r6 的值装入 r0+8 执行的内存中LDR R7,=src; R0保存 src 的首地址LDMIA R7,R8-R10;将 r7 执行的地址的数据读入r8=r10LDR R3,=N;r3 保存 N的首地址STMIA R3!,R8-R10;将 r8-r10 装入 r3 指向的内存N DCD 0,0,0src DCD

14、1,2,3dst DCD 0,0,0END程序结果: 熟悉使用 LDMIA,STMIA和 LDR,STR指令3. 使用 ARM汇编指令实现 if 条件执行,使用 ARM汇编指令实现 for 条件执行,使用 ARM汇编指令实现 while 条件执行,使用 ARM汇编指令实现 dowhile 条件执行。程序代码:实现 if 条件:MOV R0,#1 MOV R1,#2 CMP R0,R1BGT LOOP1 BLT LOOP2LOOP1。9欢迎下载精品文档MOV R3,R0LOOP2MOV R3,R1END程序结果:实现 for 和 while 条件:MOV R1,#1MOV R3,#0MOV R2

15、,#101;LOOPADD R3,R1,R3ADD R1,R1,#1CMP R1,R2BLT LOOPEND程序结果:。10欢迎下精品文档实现 dowhile 条件:MOV R0,#1MOV R1,#100MOV R3,#0LOOPCMP R0,R1BGT STOPADD R3,R0,R3ADD R0,R0,#1B LOOP STOPEND程序结果:。11欢迎下精品文档实验四基于 ARM的 C语言程序设计一、实验目的1. 了解 ARM C语言的基本框架,学会使用ARM的 C 语言编程。2. 掌握 C 语言和汇编语言编程的相互调用。二、实验设备1. EL-ARM-830 教学实验箱, Penti

16、umII 以上的 PC机,仿真器电缆。三、 ARM C语言简介与使用规则1. ARM 使用 C语言编程是大势所趋在应用系统的程序设计中, 若所有的编程任务均由汇编语言来完成, 其工作量巨大,并且不宜移植。 由于 ARM的程序执行速度较高, 存储器的存储速度和存储量也很高,因此, C 语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容易等等。因此,C语言的在 ARM编程中具有重要地位。2. ARM C 语言程序的基本规则在 ARM程序的开发中, 需要大量读写硬件寄存器, 并且尽量缩短程序的执行时间的代码一般使用汇编语言来编写

17、,比如ARM的启动代码, ARM的操作系统的移植代码等,除此之外,绝大多数代码可以使用C语言来完成。C 语言使用的是标准的C 语言, ARM的开发环境实际上就是嵌入了一个C 语言的集。12欢迎下精品文档成开发环境,只不过这个开发环境和ARM的硬件紧密相关。在使用 C 语言时, 要用到和汇编语言的混合编程。当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用将汇编文件以文件的形式加入项目当中,通过ATPCS的规定与C 程序相互调用与访问。ATPCS,就是 ARM、Thumb的过程调用标准 ( ARM/ThumbProcedureCallStandard ),它规定了一些子程序间调用的基本规

18、则。如寄存器的使用规则,堆栈的使用规则,参数的传递规则等。在 C 程序和 ARM的汇编程序之间相互调用必须遵守ATPCS。而使用 ADS的 C语言编译器编译的C 语言子程序满足用户指定的ATPCS的规则。但是,对于汇编语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。 具体来说, 汇编语言的子程序应满足下面3 个条件: 在子程序编写时,必须遵守相应的ATPCS规则; 堆栈的使用要遵守相应的ATPCS规则; 在汇编编译器中使用-atpcs选项。基本的 ATPCS规定,请详见相关技术文档。汇编程序调用C程序汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。在汇编程序中使用I

19、MPORT伪指令声明将要调用的C 程序函数。在调用 C 程序时,要正确设置入口参数,然后使用BL 调用。C程序调用汇编程序汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子程序。在 C 语言中使用 extern 关键字声明外部函数(声明要调用的汇编子程序)。在 C 语言的环境内开发应用程序, 一般需要一个汇编的启动程序, 从汇编的启动程序,跳到 C 语言下的主程序,然后,执行 C程序,在 C 环境下读写硬件的寄存器,一般是通过宏调用, 在每个项目文件的 Startup44b0/INC 目录下都有一个 44b.h 的头文件,那里面定义了所有关于44B0 的硬件寄存器的宏,对宏的读写,就能操作44B0 的硬件。具体的编程规则同标准C 语言。四、实验内容1、理解下列程序,新建工程,加入下面的程序,并观察实验结果。13欢迎下精品文档程序代码:/*实现 5 个数的相加 */int sum5(int a,int b,int c,int d,int e)return (a+b+c+d+e); 汇编语言IMPORT sum5; 声明调用 c函数CALLSUMSSTMFD SP!,LR;将 LR寄存器入栈MOV R0,#1;r0 = 1ADD R1,R0,R0;r1 =

温馨提示

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

最新文档

评论

0/150

提交评论