首页 百科知识 汇编指令实验一

汇编指令实验一

时间:2022-10-27 百科知识 版权反馈
【摘要】:(2)软件:μVision IDE for ARM集成开发环境,Windows 98/2000/NT/XP.μVision3IDE集成了RealView汇编器AARM、编译器CARM、链接器LARM,若采用GNU编译器则需要下载安装相应的工具包.本书所有例程代码均按照RealView的语法和规则来书写.关于AARM、CARM和LARM的规范和具体使用,可参照μVision3IDE所带的帮助文档,在

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)建立源文件.

img150

图5-1 新建工程

img151

图5-2 选择CPU

img152

图5-3 添加启动代码

点击菜单项File-New,系统弹出一个新的、没有标题的文本编辑窗,输入光标位于窗口中第一行,按照实验参考程序编辑输入源文件代码.编辑完后,保存文件asm1_a.s.(源代码可以参考光盘\software\EduKit2410_for_MDK\3.1_asm1\Asm1_a中的asm1_a.s文件.)

img153

图5-4 选择开发工具

(6)添加源文件.

单击工程管理窗口中的相应右键菜单命令,选择Add Files to…,会弹出文件选择对话框,在工程目录下选择刚才建立的源文件asm1_a.s.如图5-5所示.

img154

图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文件下载到目标中的位置,以及调试前的寄存器、内存的初始化等配置操作.它是由调试函数及调试命令组成调试命令脚本文件.

img155

图5-6 基本配置——Target

img156

图5-7 基本配置——Linker

img157

图5-8 基本配置——Debug

(8)生成目标代码.

选择菜单项Project-Build target或快捷键F7,生成目标代码.在此过程中,若有错误,则进行修改,直至无错误.若无错误,则可进行下一步的调试.

(9)调试.

选择菜单项Debug-Start/Stop Debug Session或快捷键Ctrl+F5,即可进入调试模式.若没有目标硬件,可以用μVision IDE中的软件仿真器.如果使用MDK试用版,则在进入调试模式前,会有如下对话框弹出,如图5-9所示.

img158

图5-9 在软件仿真下调试程序

确定后即可调试了,做如下调试工作:

①打开memory窗口,单步执行,观察地址0x30200000中内容的变化;

②单步执行,观察寄存器的变化;

③结合实验内容和相关资料,观察程序运行,通过实验加深理解ARM指令的使用;

④理解和掌握实验后,完成实验练习题.

实验B与上述步骤完全相同,只要把对应的asm1_a.s文件改成asm1_b.s以及工程名即可.

5.1.6 实验参考程序及流程图

(1)实验A.

img159

图5-10 实验A流程图

汇编程序

img160

export Reset_Handler

img161

调试命令脚本文件

img162

(2)实验B.

img163

图5-11 实验B流程图

汇编程序

img164

img165

stop

img166

调试命令脚本文件与实验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的值,观察执行结果.

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈