5.1 ARM汇编指令实验一
5.1.1 实验目的
(1)初步学会使用μVision3IDE for ARM开发环境及ARM软件模拟器.
(2)通过实验掌握简单ARM汇编指令的使用方法.
5.1.2 实验设备
(1)硬件:PC.
(2)软件:μVision IDE for ARM集成开发环境,Windows 98/2000/NT/XP.
5.1.3 实验内容
(1)熟悉开发环境的使用并使用ldr/str,mov等指令访问寄存器或存储单元.
(2)使用add/sub/lsl/lsr/and/orr等指令,完成基本算术/逻辑运算.
5.1.4 REALVIEW基础知识
μVision3IDE集成了RealView汇编器AARM、编译器CARM、链接器LARM,若采用GNU编译器则需要下载安装相应的工具包.本书所有例程代码均按照RealView的语法和规则来书写.关于AARM、CARM和LARM的规范和具体使用,可参照μVision3IDE所带的帮助文档,在此不再赘述.这里简单介绍几个相关基本知识:
(1)ENTRY.
设置程序默认入口点,一个程序可有多个ENTRY,但一个源文件最多只有一个ENTRY.
(2)EQU.
EQU伪操作用于将数字常量、基于寄存器的值和程序中的标号定义为一个字符名称.语法格式:
symbol EQU expression
其中,expression可以是一个寄存器的名字,也可以是由程序标号、常量或者32位的地址常量组成的表达式.symbol是EQU伪操作所定义的字符名称.示例:COUNT EQU 0X1FFF
(3)EXTERN/IMPORT.
IMPORT(EXTERN功能完全相同)用于声明在其他模块中定义但需要在本文件中使用的符号.EXTERN声明的变量必须是在其他模块中用EXPORT或GLOBAL声明过的.语法格式:
IMPORT class(symbol,symbol...)
其中,class为变量的类型,可以为ARM、CODE16、CODE32、DATA、CONST、THUMB;symbol为所声明的变量名.
(4)EXPORT/GLOBAL.
EXPORT(GLOBAL功能完全相同)用于声明在本文件中定义但能在其他模块中使用的变量,相当于定义了一个全局变量.语法格式:
EXPORT symbol,symboly...
其中,symbol为所声明的变量名.
(5)AREA.
AREA用于定义一个代码段或数据段,ARM汇编程序设计采用分段式设计,一个ARM源程序至少有一个代码段,大的程序会有若干个代码段和数据段.语法格式:
AREA segment-name,class-name,attributes,...
其中,segment-name为所定义段的名称;class-name为所定义段的类型名称,可以为系统类型(CODE,CONST,DATA,ERAM)或用户定义类型;attributes为段的属性.
(6)END.
END用于标记汇编文件的结束行,即标号后的代码不做处理.
5.1.5 实验操作步骤
(1)新建工程.
首先在\Keil\ARM\Examples\EduKit2410_for_MDK\3.1_asm1目录下建立文件夹并命名为Asm1_a,运行μVision3IDE集成开发环境,选择菜单项Project-New…-μVision Project,系统弹出一个对话框,按照图5-1所示输入相关内容.点击“保存”按钮,创建一个新工程asm_1a.Uv2.
(2)为工程选择CPU.
新建工程后,要为工程选择CPU,如图5-2所示,在此选择Samsung的S3C2410A.
(3)添加启动代码.
在图5-2中点“确定”后,会弹出一个对话框,问是否要添加启动代码.如图5-3所示.
由于本实验是简单的汇编实验,因此不需要启动代码,选择否.
(4)选择开发工具.
要为工程选择开发工具,在Project-Manage-Components,Environment and Books-Folders/Extensions对话框的Folders/Extensions页内选择开发工具,如图5-4所示.
从图中可以看到,有三个开发工具可选,在此选择RealView Compiler.
(5)建立源文件.
图5-1 新建工程
图5-2 选择CPU
图5-3 添加启动代码
点击菜单项File-New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码.编辑完后,保存文件asm1_a.s.(源代码可以参考光盘\software\EduKit2410_for_MDK\3.1_asm1\Asm1_a中的asm1_a.s文件.)
图5-4 选择开发工具
(6)添加源文件.
单击工程管理窗口中的相应右键菜单命令,选择Add Files to…,会弹出文件选择对话框,在工程目录下选择刚才建立的源文件asm1_a.s.如图5-5所示.
图5-5 添加源文件
(7)工程配置.
把光盘\software\EduKit2410_for_MDK\3.1_asm1\Asm1_a目录中的DebugINRam.ini文件拷贝到\Keil\ARM\Examples\EduKit2410_for_MDK\3.1_asm1\Asm1_a目录下.选择菜单项Project→Options for Target…,将弹出工程设置对话框,如图5-6所示.对话框会因所选开发工具的不同而不同,在此仅对Target选项页、Linker选项页及Debug选项页进行配置.Target选项页的配置如图5-6;Linker选项页的配置如图5-7;Debug选项页的配置如图5-8.需要注意,在Debug选项页内需要一个初始化文件:DebugINRam.ini.此.INI文件用于设置生成的.AXF文件下载到目标中的位置,以及调试前的寄存器、内存的初始化等配置操作.它是由调试函数及调试命令组成调试命令脚本文件.
图5-6 基本配置——Target
图5-7 基本配置——Linker
图5-8 基本配置——Debug
(8)生成目标代码.
选择菜单项Project-Build target或快捷键F7,生成目标代码.在此过程中,若有错误,则进行修改,直至无错误.若无错误,则可进行下一步的调试.
(9)调试.
选择菜单项Debug-Start/Stop Debug Session或快捷键Ctrl+F5,即可进入调试模式.若没有目标硬件,可以用μVision IDE中的软件仿真器.如果使用MDK试用版,则在进入调试模式前,会有如下对话框弹出,如图5-9所示.
图5-9 在软件仿真下调试程序
确定后即可调试了,做如下调试工作:
①打开memory窗口,单步执行,观察地址0x30200000中内容的变化;
②单步执行,观察寄存器的变化;
③结合实验内容和相关资料,观察程序运行,通过实验加深理解ARM指令的使用;
④理解和掌握实验后,完成实验练习题.
实验B与上述步骤完全相同,只要把对应的asm1_a.s文件改成asm1_b.s以及工程名即可.
5.1.6 实验参考程序及流程图
(1)实验A.
图5-10 实验A流程图
汇编程序
export Reset_Handler
调试命令脚本文件
(2)实验B.
图5-11 实验B流程图
汇编程序
stop
调试命令脚本文件与实验A相同.
5.1.7 练习题
1.编写程序循环对R4~R11进行累加8次赋值,R4~R11起始值为1~8,每次加操作后把R4~R11的内容放入SP栈中,SP初始设置为0x800.最后把R4~R11用LDMFD指令清空赋值为0.
2.更改实验A中x、y的值,观察执行结果.
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。