第三章 嵌入式软件开发基础实验
3.1 ARM汇编指令实验一
3.1.1 实验目的
? 初步学会使用Embest IDE for ARM 开发环境及ARM软件模拟器; ? 通过实验掌握简单ARM汇编指令的使用方法。
3.1.2 实验设备
? 硬件:PC机
? 软件:Embest IDE Pro ARM集成开发环境,Windows 98/2000/NT/XP。
3.1.3 实验内容
? 熟悉开发环境的使用并使用ldr/str,mov等指令访问寄存器或存储单元。 ? 使用add/sub/lsl/lsr/and/orr等指令,完成基本数学/逻辑运算。
3.1.4 实验原理
1. 存储器格式
ARM体系结构可以用两种方法存储字数据,分别称为大端格式和小端格式。 1) 大端格式
在这种格式中,字数据的高位字节存储在低地址中,而字数据的低位字节则存放在高地址中,如下图所示。
高地址 31 23 22 16 15 8 7 0 字地址 低地址 2) 小端格式
在这种格式中,字数据的高位字节存储在高地址中,而字数据的低位字节则存放在低地址中,如下图所示。
8 4 0 9 5 1 10 6 2 11 7 3 8 4 0
高地址 31 23 22 16 15 8 7 0 字地址 11 10 9 8 8 7 6 5 4 4 3 2 1 0 0 低地址
26
3. GNU基础知识
Embest IDE集成了GNU 汇编器as,编译器gcc,链接器ld。因此,我们写程序要符合GNU的语法和规则。关于as、gcc和ld的具体使用,请参照Embest IDE所带的电子文档ProgRef.chm,在此不再赘述。这里简单介绍几点基本知识:
1) 程序默认入口点为“_start”,代码段默认起始地址为0x8000 2) as常用伪操作符 .equ
.equ伪操作为数字常量、基于寄存器的值和程序中的标号定义一个字符名称。 语法格式
.equ symbol, expr
其中,expr为基于寄存器的地址值、程序中的标号,32位的地址常量或者32位的常量。
Symbol为.equ伪操作为expr定义的字符名称。 示例
.equ Version, \.global及.globl
.global声明一个符号可以被其他文件引用。相当于声明了一个全局变量,.globl与.global相同。
语法格式
.global symbol
其中,symbol为声明的符号的名称。它是区分大小写的。
示例
.global MyAsmFunc .text
.text伪操作将操作符开始的代码编译到代码段或代码段子段(subsection) 语法格式
.text {subsection} 示例
.text .end
标记汇编文件的结束行,即标号后的代码不作处理。 语法格式
.end
3.1.5 实验操作步骤
1) 新建工程:
运行Embest IDE集成开发环境,选择菜单项File → New Workspace,系统弹出一个对话框,按照图3-1所示输入相关内容。
27
图3-1 新建工作区
点击OK按钮,将创建一个新工程,并同时创建一个与工程名相同的工作区。此时在工作区窗口将打开该工作区和工程。
2) 建立源文件:
点击菜单项File → New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码。编辑完后,保存文件asm1_a.s。
3) 添加源文件:
选择Project → Add To Project → Files 命令,或单击工程管理窗口中的相应右键菜单命令,弹出文件选择对话框,在工程目录下选择刚才建立的源文件asm1_a.s。
4) 基本配置:
选择菜单项Project → Settings…或快捷键Alt+F7,弹出工程设置对话框。在工程设置对话框中,选择Processor设置对话框,按照图3-2所示,进行目标板所用处理器的配置。
图3-2 新的工作区处理器配置
5) 生成目标代码:
选择菜单项Build → Build asm1_a或快捷键F7,生成目标代码。
28
图3-3 Embest IDE编译按钮面板
6) 调试设置:
选择菜单项Project → Settings…或快捷键Alt+F7,弹出工程设置对话框。在工程设置对话框中,选择Remote设置对话框,按照图3-4所示对调试设备模块进行设置。
图3-4 新工作区仿真器配置
选择Debug设置对话框,按照下面各图进行调试模块配置。
(a)连接相关配置
29
(b)下载相关配置 图3-5 新工作区调试器配置
注意: Symbol file与Download file设置应该相同,用户可以从Linker页面拷贝系统默认的输出文件配置;且该实验输入下载地址为0x8000,即为AS默认的代码段起始地址。由于汇编和链接选项在本实验中没有进行配置,完全使用其默认选项,所以,代码段是从0x8000开始的,下载地址应该与它保持一致。
7) 选择Debug菜单Remote Connect 进行连接软件仿真器,执行Download命令下载程序,并打开寄存器窗口。打开memory窗口,观察地址0x8000~0x801f的内容,与地址0xff0~0xfff的内容。
8) 单步执行程序并观察和记录寄存器与memory的值变化。
9) 结合实验内容和相关资料,观察程序运行,通过实验加深理解ARM指令的使用。 10)理解和掌握实验后,完成实验练习题。
3.1.6 实验参考程序
实验A参考程序:
/********************************************************************************************* # NAME: # Desc:
asm1_a.s
* * * *
# Author: Embest
ARM instruction examples
# History: shw.He 2005.02.22
/********************************************************************************************* /*----------------------------------------------------------------------------------------------------------*/
30