1、实验一:ADS1.2 集成开发环境练习(注:实验一“ADS1.2 集成开发环境练习”为必做内容,选作实验一 “汇编指令实验 1”为选做内容。 )1实验目的 了解 ADS 12 集成开发环境的使用方法。 掌握 ARM7TDMI 汇编指令的用法并能编写简单的汇编程序。 建立汇编源程序文件、建立工程以及工程编译连接。2实验设备 硬件:PC 机 一台 软件:Windows XP 系统,ADS 12 集成开发环境3实验内容(1) 建立一个新的工程。(2) 建立一个汇编源程序文件,并添加到工程中。(3) 设置编译链接控制选项。(4) 编译链接工程。4实验预习要求仔细阅读“ADS1.2 集成开发环境练习”实
2、验指导书。5实验步骤 启动 ADSl.2 IDE 集成开发环境,选择 FileNew ,使用 ARM Executable Image 工程模板建立一个工程,工程名称为 ADS,见图 1.1。 选择 FileNew 建立一个新的文件 TESTlS,设置直接添加到项目中,见图 1.2。输入如程序清单 1.1 所示的代码并保存。程序清单 11 TESTlS 文件代码 选择 EditDebugRel Settings,在 DebugRel Settings 对话框的左边选择 ARM Linker 项,然后在 Output 页设置连接地址 (见图 1.3),在 Options 页设置调试入口地址(见图
3、 1.4)。 选择 ProjectMake 将编译链接整个工程。图21.1 建立 ARM 指令代码的工程图21.2 新建文件 TESTlS图 1.3 工程连接地址设置图 1.4 工程调试入口地址设置6思考(1) 工程模板有哪些作用? (例如:本实验中使用的“ARM Executable Image”工程模板。)ADS 工程文件的设置比较复杂,不同的实验板、开发板由于硬件电路结构和资源不同,需要进行不同的设置,而对于同一实验板,则启动文件、ADS 工程文件的配置及主要的初始化代码是相对固定的,因此可以把这些相关文件按一定方式组织起来,称为工作模板。在工程模板的基础上,可以很方便的在同一实验板上开
4、发或编写不同的应用程序。(2) 如何强行重新编译工程的所有文件? 选择 ProjectRemove Object Code,删除工程中的*.obj 文件。选作实验一:汇编指令实验 11实验目的 了解 ADS 12 集成开发环境及 ARMulator 软件仿真器的使用方法。 掌握 ARM7TDMI 汇编指令的用法并能编写简单的汇编程序。 掌握指令的条件执行以及使用 LDRSTR 指令完成存储器的访问。2实验设备 硬件:PC 机 一台 软件:Wiridows XP 系统,ADS 12 集成开发环境3实验内容(1) 使用 LDR 指令读取 0x40003100 上的数据,将数据加 1,若结果小于 1
5、0,则使用 STR指令把结果写回原地址;若结果大于或等于 10,则把 0 写回原地址。(2) 使用 ADSl2 软件仿真,单步、全速运行程序,设置断点,打开寄存器窗口(ProcessorRegisters)监视 RO 和 R1 的值,打开存储器观察窗口(Memory)监视 0x40003100 上的值。4实验预习要求(1) 仔细阅读 ARM 指令系统的内容。(2) 仔细阅读“汇编指令实验 1”选作实验指导书。5实验步骤 启动 ADS 12,使用 ARM Executable Image 工程模板建立一个工程 Instructionl。 建立汇编源文件 TEST2.S,编写实验程序,然后添加到工
6、程中 设置工程链接地址 RO Base 为 Ox40000000,RW Base 为 0x40003000。设置调试入口地址 Image entry point 为 0x40000000。 编译链接工程,选择 ProjectDebug,启动 AXD 进行软件仿真调试。 打开寄存器窗口(Processor Registers),选择 Current 项监视 R0 和 R1 的值。打开存 储器观察窗口(Memory)设置观察地址为 0x40003100,显示方式 size 为 32 Bit,监视0x40003100 地址上的值。说明:在 Memory 窗口中右击空白处,在快捷菜单的 Size 项中
7、可以选择显示格式为 8 Bit、16 Bit 或 32 Bit,如图 1 所示。可以单步运行程序,可以设置取消断点,或者全速运行程序,停止程序运行,调试时观察寄存器和 0x40003100 地址上的值。汇编指令实验 l 程序运行结果见图 2。6实验参考程序汇编指令实验 1 的参考程序见程序清单。程序清单 1 汇编指令实验 1 参考程序COUNT EQU 0x40003100 ; 定义一个变量,地址为 0x40003100AREA Example2,CODE,READONLY ; 声明代码段 Example2 ENTRY ; 标识程序入口CODE32 ; 声明 32 位 ARM 指令START
8、LDR R1,=COUNT ; R1 = COUNTMOV R0,#0 ; R0 = 0 STR R0,R1 ; R1 = R0,即设置 COUNT 为 0LOOP LDR R1,=COUNTLDR R0,R1 ; R0 = R1 ADD R0,R0,#1 ; R0 = R0 + 1CMP R0,#10 ; R0 与 10 比较,影响条件码标志MOVHS R0,#0 ; 若 R0 大于等于 10,则此指令执行,R0 = 0STR R0,R1 ; R1 = R0,即保存 COUNTB LOOPEND图 1 Memnry 窗口显示格式设置图 2 汇编指令实验 1 程序运行结果7思考(1) 若使用
9、LDRBSTRB 代替程序清单 1 中的所有加载存储指令(LDRSTR),程序还能正确执行吗?能,LDRB/STRB 指令用来加载无符号字节数据和存储字节数据,加载到寄存器中和存储的数据值最大为 10,一个字节足以表示这些数据,所以能正确执行。(2) LDR 伪指令与 LDR 加载指令的功能和应用有哪些区别,举例说明 ?(提示:LDR 伪指令的形式为“LDR Rn,=expr” 。)LDR 伪指令(大范围地址读取伪指令)用于加载 32 位的立即数或一个地址值到指定寄存器。常用于加载芯片外围功能部件的寄存器地址(32 位立即数) ,以实现各种控制操作。与 ARM指令的 LDR 相比,伪指令的 LDR 的参数有“=”号。LDR 指令用于从内存中读取数据放入寄存器中,可以搭配不同的后缀实现字节、半字节或字数据的访问,由基址寄存器和地址偏移量两部分组成。用于对内存变量的访问、内存缓冲区数据的访问、查表、外围部件的控制操作、程序散转等。(3) 在 AXD 调试时如何复位程序?选择 FileReload Current Image 重新加载映像文件。