西安电子科技大学
嵌入式系统 课程实验报告
实验名称 ARM开发基础
** 学院 1518021 班
成 绩 姓名 ** 学号
同作者 无 实验日期 2018 年 6 月 14 日
指导教师评语: 指导教师: 年 月 日
一、 实验目的
??初步学会使用 μVision3 IDE for ARM 开发环境及 ARM 软件模拟器; ??通过实验掌握简单 ARM 汇编指令的使用方法;
二、 实验内容
??熟悉开发环境的使用并使用 ldr/str, mov 等指令
??学习使用 add/sub/lsl/lsr/and/orr 等指令,完成基本算术/逻辑运算; ??设计实现表达式 y=a*8+b/2-c, 并验证之。
三、 实验原理
ARM9 处理器内核共有 37 个寄存器: ??31 个通用寄存器,包括程序计数器(PC)。这些寄存器都是 32 位的; ??6 个状态寄存器。这些寄存器也是 32 位的,但是只是使用了其中的 12 位。
这里简要介绍通用寄存器,关于状态寄存器的介绍。 1. ARM 通用寄存器
通用寄存器(R0-R15)可分为三类: ??不分组寄存器 R0~R7; ??分组寄存器 R8~R14; ??程序计数器 PC。
(1)不分组寄存器 R0~R7
不分组寄存器 R0~R7 在所有处理器模式下,它们每一个都访问一样的 32 位寄存器。它们是真正的通用寄存器,没有体系结构所隐含的特殊用途。
(2)分组寄存器 R8~R14
分组寄存器 R8~R14 对应的物理寄存器取决于当前的处理器模式。若要访问特定的物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。 寄存器 R8~R12 各有两组物理寄存器:一组为 FIQ 模式,另一组为除了 FIQ 以外的所有模式。寄存器 R8~R12 没有任何指定的特殊用途,只是在作快速中断处理时使用。寄存器 R13, R14 各对应 6 个分组的物理寄存器, 1 个用于用户模式和系统模式,其它 5 个分别用于 5 种异常模式。寄存器 R13 通常用做堆栈指针,称为SP;寄存器 R14 用作子程序链接寄存器,也称为 LR。
(3)程序计数器 PC
寄存器 R15 用做程序计数器 (PC)。
在本实验中, ARM 核工作在用户模式, R0~R15 可用。 2.存储器格式
ARM 体系结构将存储器看作是从零地址开始的字节的线性组合。字节零到字
节三放置第一个字(WORD),字节四到字节七存储第二个字,以此类推。 ARM 体系结构可以用两种方法存储字数据,分别称为大端格式和小端格式。
??大端格式 在这种格式中,字数据的高位字节存储在低地址中,而字数据的低位字节则存放在高地址中,如图 4-1 所示。
??小端格式 在这种格式中,字数据的高位字节存储在高地址中,而字数据的低位字节则存放在低地址中,如图 4-2 所示。
3. Realview 基础知识
μVision3 IDE 集成了 REALVIEW 汇编器 AARM、编译器 CARM、链接器LARM,若采用 GNU 编译器则需要下载安装相应的工具包。本书所有例程代码均按照 REALVIEW 的语法和规则来书写。关于AARM、 CARM 和 LARM 的规范和具体使用,可参照 μVision3 IDE 所带的帮助文档,在此不再赘述。
四、 实验步骤
1) 拷贝整个实验例程源码目录到本地磁盘自己的工作目录下;
2) 使用 μVision IDE for ARM 通过 ULINK2 仿真器连接实验板,打开实验例程目录 ARM 体系\\1.1_asm1 子目录下的 asm_1a.Uv2 例程,编译链接工程;
3)该工程配置为在模拟器中运行。可以通看工程属性查看:菜单“Project”?”Options for Target Asm1”,在弹出的对话框中点击“Debug”:
可以看到选择为“Use Simulator”, 在 Debug 选项页内设置了一个初始化文件:DebugINRam.ini。此.INI 文件用于设置生成的.AXF 文件下载到目标中的位置,以及调试前的寄存器、内存的初始化等配置操作。它是由调试函数及调试命令组成调试命令脚本文件。 4)接下来开始编译链接工程,在菜单栏“Projiet”选择“Build target”或者“Rebuildall target files”编译整个工程,用户也可以在工具栏单击“ ”或者“ ”进行编译。
5) 编译完成后,单击菜单栏 Debug->Start/Stop Debug Session 项将编译出来的
映像文件下载到模拟器中运行,或者单击工具栏“ ”按钮来下载。 6)下载完成后,进入到了调试界面。可以单步调试程序来查看运行结果。可以通过寄存器窗口来观察寄存器的值的变化。通过指令代码的运行,结合寄存器值的变化,了解 ARM 指令代码。
7)拷贝以上示例实验源码工程,编辑汇编源程序,设计实现 表达式
y=a*8+b/2-c, 并验证之。
五、 实验结果
六、 程序说明
为了实现表达式y=a*8+b/2-c,先将a,b,c分别赋值然后将a放入寄存器
r0中,再将寄存器r0中的值向左移动3位,也就是乘以8;接着将b放入寄存器r1中,并向右移动1位,即除以2;再将寄存器r0和r1值相加放入r0,此时将c移入寄存器r1;最后将寄存器r0中的值减去r1中的值存于r0即可。