ARM开发工具和汇编基础

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值