实验二 基于ARM的汇编语言程序设计
一、实验目的
1. 了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程
二、实验内容
1. 用汇编语言编写一个简单的应用程序
三、实验设备
1. PentiumII以上的PC机。
2. PC操作系统WIN98或WIN2000或WINXP, ADS1.2集成开发环境,仿真调试驱动程序
四、汇编语言简介
1. ARM汇编的一些简要的书写规范
ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。ARM汇编对标识符的大小写敏感,书写标号及指令时字母大小写要一致。在ARM汇编中,ARM指令、伪指令、寄存器名等可以全部大写或者全部小写,但不要大小写混合使用。
2. ARM汇编语言程序的基本结构
在ARM汇编语言程序中,是以程序段为单位来组织代码。段是相对独立的指令或数据序列,具有特定的名称。段可以分为代码段的和数据段,代码段的内容为执行代码,数据段存放代码运行时所需的数据。一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形成一个可执行文件。可执行映像文件通常由以下几部分构成:
◆ 一个或多个代码段,代码段为只读属性。
◆ 零个或多个包含初始化数据的数据段,数据段的属性为可读写。 ◆ 零个或多个不包含初始化数据的数据段,数据段的属性为可读写。
链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定相同。
3. 简单的小例子
下面是一个代码段的小例子
AREA Init,CODE,READONLY ENTRY
LDR R0, =0x3FF5000 LDR R1, 0x0f
STR R1, [R0]
LDR R0, =0x3F50008 LDR R1, 0x1 STR R1, [R0] ? ? END
在汇编程序中,用AREA指令定义一个段,并说明定义段的相关属性,本例中定义了一个名为Init的代码段,属性为只读。ENTRY伪指令标识程序的入口,程序的末尾为END指令,该伪指令告诉编译器源文件的结束,每一个汇编文件都要以END结束。
下面是一个数据段的小例子
AREA DataArea, DATA, NOINIT, ALIGN=2 DISPBUF SPACE 200 RCVBUF SPACE 200 ? ?
DATA为数据段的标识。
五、实验步骤
1. 本实验仅使用实验教学系统的CPU板,串口。在进行本实验时,LCD电源开关、音频的左右声道开关、AD通道选择开关、触摸屏中断选择开关等均应处在关闭状态。 2.打开ADS1.2开发环境,创建工程Test2,创建test2.s文件
3.在test2.s文件中编辑汇编代码,然后编译,编译通过后,进入ADS1.2调试界面,加载第二个仿真器,运行映象文件test2.axf。
4.打开ProgramViews-registers,单击单步执行(step),查看各寄存器的值。 参考程序:
; 文件名:TEST2.S
; 功能:实现两个寄存器相加
; 说明:使用ARMulate软件仿真调试
AREA Example1,CODE,READONLY ; 声明代码段Example1 ENTRY ; 标识程序入口
CODE32 ; 声明32位ARM指令 START MOV R0,#0 ; 设置参数 MOV R1,#10
LOOP BL ADD_SUB ; 调用子程序ADD_SUB B LOOP ; 跳转到LOOP ADD_SUB
ADDS R0,R0,R1 ; R0 = R0 + R1 MOV PC,LR ; 子程序返回 END ; 文件结束
相关推荐: