ARM裸机开发工具ADS
ADS由命令行开发工具,ARM运行时库,GUI开发环境(Code Warrior和AXD),实用程序和支持软件组成
ANSI C编译器
ISO/Embedded C++ 编译器
ARM/Thumb 汇编器
Linker
Windows集成开发环境
Debugger-AXD
格式转换器
过程
1.编写源程序
2.编译生成.o文件
3.link .axf
4.输出二进制文件
5.烧写到ROM上
工具使用
ARM汇编基础
指令集:
跳转指令
数据处理指令
程序状态寄存器(PSR)处理指令
加载/存储指令
协处理指令
异常产生指令
指令格式:
<opcode>{<cond>}{S} <Rd>, <Rn> {,<Operand2>}
<opcode>:指令助记符
{<cond>} :是指令执行的条件,可选项
{S}:决定指令的操作是否影响CPSR的值,可选项
<Rd>:表示目标寄存器,必有项
<Rn> :表示包含第一个操作数的寄存器,当仅需要一个源操作数时可省略
{,<Operand2>}:表示第二个操作数,可选项
ADDEQS R0,R1,#8
EQ是否相等
跳转指令
B指令:最简单的跳转指令
B Label
BL :带连接的指令
BX :带状态切换的指令
BLX:状态切换加子程序
例:
area test,code,readonly entry mov r1,#0 Label1 add r1,r1,#1 b Label2 mov r2,#10 Label2 cmp r1,#3 ble Label1 end
数据处理指令
数据传送指令:用于寄存器和存储器之间进行数据的双向传输:mov
MOV{条件}{S} 目的寄存器,源操作数
CMP{条件}{S} 操作数1,操作数2
程序状态寄存器处理指令
MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR)
算术逻辑运算指令:完成常用的算数与逻辑的运算 add
比较指令:不保存运算结果,只更新CPSR中对应的条件标志位
<域>用来设置程序寄存器中需要操作的位,32位程序状态寄存器可分为4个域 位[31:24]为条件位域,用f表示 位[23:16]为状态位域,用s表示 位[15:8]为扩展位域,用x表示 位[7:0]为控制位域,用c表示 eg:MSR CPCS_c,R0:仅仅修改CPSR中的控制位域
加载/存储指令
LDR{条件}目的寄存器,<存储器地址>
LDR R1,=0X60000000
LDR R0,[R1]
LDR R0,[R1,R2]
LDR R0,[R1,#8]
STR{条件}源寄存器,<存储器地址>
STR R0,[R1]
STR R0,[R1,R2]
STR R0,[R1,#8]
ARM汇编伪指令
没有对应的操作码,汇编结束,伪指令使命完成
符号定义伪指令,数据定义伪指令,汇编控制伪指令,宏指令,以及其他伪指令
数据定义伪指令
DCB(字节:字符串),DCW(字节),DCD(字:整型数组)
DataTest DCD 4,5,6
其他伪指令
AREA
CODE16/CODE32
ENTRY:一个源文件只能有一个入口,一个完成程序至少一个,多个时由链接器决定
END
EQU;TEST EQU 50
EXPORT:声明一个全局标号,可在其他文件中引用
IMPORT:在当前源文件中引用
area datase,data,readwrite