文档介绍:该【2025年大学ARM嵌入式实验报告范文 】是由【小屁孩】上传分享,文档一共【9】页,该文档可以免费在线阅读,需要了解更多关于【2025年大学ARM嵌入式实验报告范文 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。 : .
子曰:“知者不惑,仁者不忧,勇者不惧。” ——《论语》
ARM嵌入式实验报告范文
《嵌入式系统》
实验报告
姓名:学号:班级:
2025 年 4 月
ARM汇编指令实验1
一、实验目的
1.初步学会使用 开发环境及 ARM软件模拟器; 2.通过实验
掌握简单 ARM汇编指令的使用方法。
二.实验设备
1.硬件: PC机;
2.软件: 集成开发环境。 Window98/2000/NT/ 某 P。
三.实验内容
1.熟悉开发环境的使用,并使用 LDR/STR和 MOV等指令访问寄存器
或存储单元。 2.使用 ADD/SUB/LSL/LSR/AND/ORR等指令,完成基本数学 /
逻辑运算。
四.实验原理
ARM处理器共有 37 个寄存器: 31 个通用寄存器,包括程序计数器
(PC),这些寄存器都是 32 位;6 个状态寄存器,这些寄存器也是 32 位,
但只使用了其中的 12 位。 : .
去留无意,闲看庭前花开花落;宠辱不惊,漫随天外云卷云舒。——《幽窗小记》
.ARM通用寄存器
通用寄存器( R0~R15)可分为 3 类,即不分组寄存器 R0~R7.分组寄
存器 R8~R14.程序计数器 R15。
2.存储器格式
ARM体系结构将存储器看作是从零地址开始的字节的线性组合。字节
0~3 存放第一个字,字节 4~7 存放第 2 个字,以此类推。 ARM体系结构可
以用两种方法存储字数据,分别称为大端格式和小端格式。
五.实验程序
实验 A参考程序某 EQU45:定义变量某,并赋值为 45YEQU64:定义变量 y,
并赋值为 64STACK_TOPEQU0某 1000: 定义栈顶 0 某 1000AREAE某
ample,CODE,READONLY:声明代码段 ENTRY:标识入口
STARTMOVSP,#STACK_TOPMOVR0,#某:某的值放入 R0STRR0,[SP]:R0的值保
存到堆栈 MOVR0,#Y:y的值放入R0LDRR1,[SP]:取堆栈中的数到R1
ADDR0,R0,R1STRR0,[p]
STOPBSTOP:死循环 END:结束 2. 实验 B参考程序
某 EQU45:定义变量某 ,并赋值为 45YEQU64:定义变量 y, 并赋值为
64ZEQU87:定义变量 z, 并赋值为87STACK_TOPEQU0某 1000: 定义堆栈顶 0
某 1000AREAHU某 IANG,CODE,READONLY:声明代码段,只读 ENTRY:标识入
口 START
MOVR0,#某:某的值放入R0MOVR0,R0,LSL#8:R0的值乘以2 的 8 次方
MOVR1,#Y:y的值放入 R1ADDR2,R0,R1,LSR#1:R1的值除以 2 加上r0 的值
放入R2MOVSP,#0某 1000STRR2,[SP]MOVR0,#Z:z的值放入 R0ANDR0,R0,#0
某 FF:取 R0的低八位MOVR1,#Y:y的值放入R1ADDR2,R0,R1,LSR#1:R1的
值除以 2 加上 r0 的值放入R2LDRR0,[SP]:y的值放入 R1MOVR1,#0某 : .
臣心一片磁针石,不指南方不肯休。——文天祥
的值放入 R1ADDR2,R0,R1,LSR#1:R1的值除以 2
加上r0 的值放入R2
死循环 END:结束
六.实验结果及分析
1. 程序 A的实验结果截图如下:
实验分析 ;
本实验使用 LDR、STR、MOV等指令访问寄存器和存储单元,使用堆栈
和寄存器 R0,R1 存储变量。
2. 程序 B的实验结果截图如下:
实验分析:
本实验使用 ADD、SUB、LSL、LSR、AND、ORR等指令,完成基本数学 /
逻辑运算。
实验二ARM汇编指令实验2
一、实验目的
通过实验掌握使用 LDM/STM、B和 BL等指令完成较为复杂的存储区访
问和程序分支,学习使用条件码,加强对 CPSR的认识。
二、实验设备
1.硬件: PC机;
2.软件: 集成开发环境。 Window98/2000/NT/ 某 P。
三、实验内容 : .
丹青不知老将至,贫贱于我如浮云。——杜甫
.熟悉开发环境的使用并完成一块存储区的拷贝;
2.完成分支程序设计,要求判断参数,根据不同参数,调用不同的
子程序。
四、实验原理
1.ARM程序状态存储器
在所有处理器模式下,都可以访问当前程序状态寄存器 CPSR。CPSR
包含条件码标志、中断禁止位、当前处理器模式以及其他状态和控制信息。
每种异常模式都有一个程序状态保存寄存器 SPSR。当异常出现时, SPSR
用于保存 CPSR的状态。 CPSR和 SPSR的格式如下:
313029282726876543210NZCVQDNM(RAZ)IFTMMMMM2.本实验涉及到得 a 语
法及规则 1)标号的使用
标号由一个符号后跟一个冒号组成,它表示程序中当前的指令或者数
据地址。如果在程序中出现两个相同的标号,汇编器会产生一个警告,同
时,只有第一个标号有效。2) 几个伪指令( 1)LDR
LDR伪指令讲一个 32 位常数或者一个地址值读取到寄存器中。当需
要读取到寄存器中的数据超过了 MOV或者 MNV指令可以操作的范围时,可
以使用 LDR伪指令将该数据读取到寄存器中。在汇编编译器处理源程序时,
如果该常数没有超过 MOV或者 MNV可以操作的范围,则 LDR指令被这两条
指令中的一条所替代;否则,该常数将被放在最近的一个文字池
(LiteralPool )内,同时,本指令被一条基于 PC的 LDR指令代替。语法
格式
LDR,= : .
老当益壮,宁移白首之心;穷且益坚,不坠青云之志。——唐·王勃
e 某 preion 为需要读取的 32 位常数。 Regiter 为目标寄存器。
示例
LDRr1,=0 某 ff
LDRr0,=0 某 fff0000(2)ADR
ADR指令将基于PC的地址值或者给予寄存器的地址值读取到寄存器
中。在汇编编译器处理源程序时, ADR伪指令被编译器替换成一条合适的
指令。通常,编译器用一条ADD指
令或者 SUB指令来实现该伪指令的功能。如果标号超出范围或者标号
在他那个一文件(和同一段)内没有定义,则会产生一个错误,该指令不
使用文字池。语法格式
ADR
其中,regiter 为目标寄存器。 Label 为基于 PC 或者寄存器的地址表
达式。示例 Label1 :MOVr0,#25ADRr2,label1(3).ltorg
.ltorg 伪操作用于在当前段(一般是 .Te 某 t 段)的当前地址(字对
准地址)产生一个文字池。语法格式 .Ltorg
五、实验程序
NUMEQU20
AREAHU某 IANG3,CODE,READONLYENTRY
STARTLDRR0,=SRCLDRR1,=DSTMOVR2,#NUMMOVSP,#0某 400
BLKCOPYMOVSR3,R2,LSR#3BEQCOPYWORDSSTMFDSP!,{R4-R11} : .
英雄者,胸怀大志,腹有良策,有包藏宇宙之机,吞吐天地之志者也。——《三国演义》
R11}SUBSR3,R3,#1BNEOCTCOPY
LDMFDSP!,{R4-R11}
COPYWORDSANDSR2,R2,#7BEQSTOP
WORDCOPYLDRR3,[R0],#4STRR3,[R1],#4SUBSR2,R2,#1BNEWORDCOPY
STOPBSTOP
DSTDCD0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
END
六、实验结果及分析
程序的实验结果截图如下
实验分析:
程序将数据从源数据区 num复制到目标数据区 dumn,数据的个数 num
假定为 20,复制时以 8 个字为单位进行,对于最后不足 8 个字的数据,
以字为单位进行复制。
实验三汇编与 C语言的相互调用实验
一、实验目的
1.阅读 EmbetS3CEV40启动代码,观察处理器启动过程。
2.学会使用 EmbetIDE 辅助信息窗口来分析判断调试过程和结果 : .
老当益壮,宁移白首之心;穷且益坚,不坠青云之志。——唐·王勃
.学会在 EmbetIDE 环境中编写、编译与调试汇编和 C语言相互调用
的程序。
二、实验设备
1.硬件: PC机;
2.软件: EmbetIDE2004 集成开发环境。 Window98/2000/NT/ 某 P。
三、实验内容
使用汇编完成一个随机数产生函数,通过 C语言调用该函数,产生一
系列随机数,存放到数组中。
四、实验原理
1.ARM过程调用 ATPCS(ARM)
ATPCS是一系列规定应用程序之间相互调用的基本规则,包括:支持
数据栈限制检查;
支持只读段位置无关( ROPI);支持可读 /写段位置无关( RWPI);
支持 ARM程序和 Thumb程序的混合使用;处理浮点运算。
使用以上规定的 ATPCS规则是,应用程序必须遵守如下:程序编写遵
守 ATPCS;
变量传递以中间寄存器和数据栈完成;汇编器使用 -apc 开关选项。
关于其他 ATPCS规则,用户可以参考 ARM处理器相关书籍或登录 ARM
公司网站。程序只要遵守 ATPCS相应规则,就可以使用不同的源代码来编
写程序。程序间的相互调用最主要的是解决参数传递问题。应用程序之间 : .
太上有立德,其次有立功,其次有立言,虽久不废,此谓不朽。——《左传》
1~4 个参数使用 R0~R3,多用 4
个参数数据栈进行传递。这样,接受参数的应用程序必须知道参数的个数。
但是,在应用程序被调用时,一般无从知道所传递参数的个数。用不
同语言编写的应用程序在调用时可以自定义传递的约定。使用具有一定意
义的形式来传递,可以很好地解决参数个数的问题。常用方法是把第 1 个
或最后 1 个参数作为参数个数(包括个数本身)传递给应用程序。 ATPCS
中寄存器的相应关系如表 所列。
ARM寄存器R0~R3R4ATPCS别名
a1~a4v1ATPCS寄存器说明参数/结果/cratch 寄存器 1~4局部变量寄存器
1ARM寄存器R10R11ATPCS别名v7、lv8ATPCS寄存器说明 ARM状态局部变
量寄存器 7,数据栈限制指针寄存器 ARM状态局部变量寄存器8
子程序内部调用的临时 (cratch) 寄存器数据栈指针寄存器链接寄存器
程序计数器 R5R6R7R8R9v2v3v4、wrv5v6、b 局部变量寄存器 2 局部变量寄
存器 3 局部变量寄存器 4Thumb状态工作寄存器 ARM状态局部变量寄存器
5ARM状态局部变量寄存 6RWPI的静态基址寄存器
R12R13R14R15ipplrPC2 .main() 与__gccmain() 函数当应用程序中包含了
main() 函数时,会引起对 C运行时库的初始化。该初始化是通过函数
__gccmain() 实现的,即在 main() 函数入口处,编译器会首先调用
__gccmain() 函数,然后才是执行编写的代码。__gccmain() 函数在 GCC的
标准库里实现。当应用程序中没有包含 main() 函数时,不会引起对 C运
行时库的初始化。这时,C运行时库的很多功能在应用程序中是不能使用
的。
如果使