图2-3 调试程序窗口
六、思考题
1.LDR伪指令与LDR加载指令的功能和应用有何区别,举例说明? 2.LDR/STR指令的前索引偏移指令如何编写?指令是怎样操作的? 3.在AXD调试时如何复位程序?
(提示:选择【File】->【Reload Current Image】重新加载映象文件)
七、参考程序
COUNT EQU 0x40003100 ; 定义一个变量,地址为0x40003100
AREA
Example2,CODE,READONLY ; 声明代码段Example2
ENTRY ; 标识程序入口 CODE32
; 声明32位ARM指令 START LDR R1,=COUNT ; R1 <= COUNT MOV R0,#0 ; R0 <= 0
STR R0,[R1]
; [R1] <= R0,即设置COUNT为0 LOOP
LDR R1,=COUNT LDR R0,[R1] ; R0 <= [R1] ADD R0,R0,#1 ; R0 <= R0 + 1
CMP R0,#10 ; R0与10比较,影响条件码标志
MOVHS R0,#0
; 若R0大于等于10,则此指令执行,R0 <= 0 STR R0,[R1] ; [R1] <= R0,即保存COUNT
B LOOP
END
实验预作关键过程及结果图:
10
单步运行观看寄存器和存储器的变化:
11
具体指令讲解见指令手册。
12
实验三:基于ADS的C语言程序实验
一、实验环境
PC机
一台
ADS 1.2集成开发环境 一套
二、实验目的
通过实验了解使用ADS 1.2编写C语言程序,并进行调试。
三、实验内容
编写一个汇编程序文件Startup.S和一个C程序文件Test.c。汇编程序的功能是初始化堆栈指针和初始化C程序的运行环境,然后调跳转到C程序运行,这就是一个简单的启动程序。C程序使用加法运算来计算1+2+3+...+(N-1)+N的值(N>0)。
四、实验预习要求
(1)仔细阅读《ARM嵌入式系统基础教程》中第4章ARM指令系统的内容。 (2)仔细阅读产品配套光盘附带文档《ADS集成开发环境及仿真器应用》或其他相关资料,了解ADS工程编辑和AXD调试的内容。(本实验使用软件仿真)
五、实验步骤
(1)启动ADS 1.2,使用ARM Executable Image工程模板建立一个工程ProgramC。 (2)建立源文件Startup.S和Test.c,编写实验程序,然后添加到工程中。 (3)设置工程链接地址RO Base为0x40000000,RW Base为0x40003000。设置调试入口地址Image entry point为Ox40000000。
(4)设置位于开始位置的起始代码段,如图3-1,3-2所示。
图3-1设置位于开始位置的起始代码段(1)
13
图3-2 设置位于开始位置的起始代码段(2)
(5)编译链接工程,选择Project—Debug,启动AXD进行软件仿真调试。 (6)在Startup.s的“B Main”处设置断点,然后全速动行程序。
(7)程序在断点处停止。单步运行程序,判断程序是否跳转到C程序中运行。
(8)诜择Processor vlews—variables打开变量观察窗口,观察全局变量的值,然后单步/全速运行程序,判断程序的运算结果是否正确。如图3-3所示。
图3-3 ARM实验3的运行观察结果
六、思考题
14