基本操作步骤
重建项目
(1) 在E:\新建一个目录,目录名为armads。启动ADS1.2 IDE集成开发环境,选择[file]->[new…],使用ARM Executable Image 工程模板建立一个工程,工程名称为test,工程目录为E:\armads,
在项目中添加文件
(2) 选择[file]->[new…]建立一个新的文件test1.s,设置直接添加到项目中,见图1.2。输入如程序清单1.1所示的代码,并保存,此时在工程窗口中可以看到test1.s文件,见图1.3。
修改对应的字体
(3) 由于ADS安装以后默认字体是Courier New,对于中文支持不完善,因此建议修改字体。选择[edit]->[perferrences…],可以看见以下对话框,如图1.4所示。在Font 选项设置字体是Fixedsys,Script是CHINESE_GB2312。由于Tab在不同文本编辑器解释不同,建议在Tab Inserts Spaces前打勾,使Tab键插入的是多个空格。
设置程序的入口地址和调试入口地址
(4) 选择[edit]->[DebugRel Settings…],在DebugRel Settings对话框的左边选择ARM Linker项,然后在Output页设置链接地址,如图1.5所示,在Options页设置调试入口地址,如图1.6所示。
编译整个程序
(5) 选择[project]->[make…],将编译链接整个工程。如果编译成功,见图1.7,Errors&Warnings对话框会报告编译错误为0,那么就可以对工程进行仿真。
图1.7 编译错误和警告对话框
调试程序
(6) 选择[project]->[debug],或者按下快捷键F5。IDE环境就会启动AXD调试软件,如图1.8所示,接着可以执行单步、全速运行调试。注意,要在AXD的Choose Target窗口中选用ARMUL软件仿真。
图1.8 AXD调试窗口
(7) 断点调试方法:首先设置断点,只需要在第6行灰色区域双击鼠标即可,如果出现红色实心圆点,那么表示断点设置成功,然后选择[execute]->[go]全速运行,可以发现程序停止在第6行。还有一种比较方便的调试方法就是Run to Cursor,单击鼠标第8行灰色区域,如果AXD将第8行高亮就表示设置成功,然后选择[execute]->[ Run to Cursor]运行到光标,可以发现程序停止在第8行。通过断点调试可以观察ARM寄存器数值变化,具体的操作方法在后面的实验会具体介绍。
出现问题
- 并不知道为什么?不兼容对应的文件
源码
实验一
;test1.s file assemble code
AREA example,CODE,READONLY
;AREA伪操作指示汇编器汇编新的代码段或数据段
;指示example段位代码段并且是只读段
ENTRY
;声明程序入口点Entry,一个源文件中只能有一个entry
CODE32
;下述的程序为32位的arm指令
START
MOV R0,#15
MOV R1,#8
ADDS R0,R0,R1
B START
;B是分支指令,start是程序员开始的入口,跳转到start处重新执行
;上述程序是一个无限循环程序
END
;源程序结尾标志
实验二
;16-bits dat transfer
;TTL Ch4ex1 - move16 - p.57
AREA Program, CODE, READONLY
ENTRY
Main
Value DCW &C123
Result DCW 0
LDRH R1, Value
; 将value半字数据保存到R1寄存器中
STRH R1, Result
; 将result半字结果保存到R1寄存器中
SWI &11
; Value to be moved
ALIGN
; Need to do this because working with 16bit value
; Storage space
END
- LDR系列之令,将右边的数据保存到坐标的地址
- LDRH指令:半字数据加载指令
- LDRB:字节数据加载指令
- LDR:字数据加载指令
- STR指令:将左侧的地址送到右侧地址指向的存储器中
- STR:字数据存储指令
- STRB:字节数据存储指令
- STRH:板子数据存储指令
- DCW指令:分配一段半字存储单元,并用表达式的值进行初始化。定义的存储空间是版字对齐的
- ALIGN指令:对齐方式的设置,什么都不加,默认下述的程序标号是按照字对齐进行保存的。
- SWI指令:软中断指令,使用swi来访问操作系统实例或者第三方模块。
- 进入swi处理程序,并传递对应的值,执行编号为你传入标号的值
- swi &2;处理程序,跳出来,执行编号为2的程序