arm开发

ADS集成开发环境

ARM工作模式

1)工作状态

从编程的角度看,ARM微处理器的工作状态一般有两种,并可在两种状态之间切换

*ARM状态,此时处理器执行32位的字对齐的ARM指令

Thumb状态,此时处理器执行16位的,半字对齐的Thumb指令

 

存储器的格式

ARM体系结构将存储器看作是从零地址开始的字节的线性组合。

从0字节到3字节放置第一个存储的字(32位)数据。。。。。。

32为微处理器,arm体系结构所支持的最大寻找空间为4GB

 

存储格式

大小端支持

大端:逻辑数据的低位 存储在 物理地址的高位

小端: 正好相反。

工作模式

1用户模式Usr

用于正常执行的程序

其余6中模式为非用户模式,也叫特权模式

2

。。。

7

运行模式可以通过软件改变,也可以通过外部中断或异常处理改变。

ARM处理器

37个32位寄存器,其中31个通用寄存器,6个程序状态寄存器。

通用寄存器:

不分组通用寄存器     R0~R7

分组寄存器  R8~R14

       1 R8~R12 FIQ模式分组寄存器

       2  FIQ外的寄存器分组寄存器

        R13通常用作对栈指针SP

        R14 用作子程序链接寄存器(LR,指向函数的返回地址)

程序计数器 R15(PC)

 

状态寄存器

CPSR

SPSR_svc

SPSR_abt

SPSR_und

SPSR_irq

SPSR_fiq

 

ARM寻址方式

寻址:处理器根据指令中给出的地址信息来寻找物理地址的方式。

 

立即寻址(立即数寻址),操作数本身就在指令中给出,取出指令就取出了操作数。这个操作被称为立即数。

例:   ADD R0,R0,#0x3f

以#为前缀,对于16进制的立即数还要在#后加上0x或&

 

寄存器寻址

利用寄存器中的数值作为操作数。

效率最高的寻址方式。

如:ADD R0,R1,R2

 

寄存器间接寻址

以寄存器中的值作为操作数的地址,而操作数放在存储器中。

如: ADD R0,R1,[R2]   ;R0->R1 +[R2]

 

基址变址寻址

将寄存器的内容与指令中给出的地址的偏移量相加,从而得到一个操作数的有效地址。

LDR R,[R1,#4] ; R0<-[R1+4]

LDR R0,[R1,#4]!; R0<-[R1+4],R1<-R1+4

LDR R0,[R1],#4;R0<-[R1], R1<-R1+4

LDR R0,[R1,R2]

 

多寄存器寻址

一条指令可以完成多个寄存器的访问

 

相对寻址

以程序计数器PC的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。

 

堆栈寻址

递增堆栈:向高地址方向生长

递减堆栈:

满堆栈:堆栈指针指向最后压入堆栈的有效堆栈

空堆栈:堆栈指针指向下一个要放入数据的空位置

 

arm指令

跳转指令

实现程序流程的跳转的方法:

1 使用专门的跳转指令(前后32M的地址空间)

B  跳转指令

BL 呆返回的跳转指令

BLX 呆返回和状态切换的跳转指令

BX 带状态切换的跳转指令

详细:

B{条件}  目标地址;无条件是直接跳转, 有条件时检查CPSR寄存器条件码置位时,程序跳转。

{条件指令: EQ,NE,CS......
}

 

BL{条件} 目的地址; 在R14中保存PC的值

BLX 目的地址 ;  将处理器的工作状态从arm状态切换到thumb状态,并且保存pc值到R14

BX{} 目的地址; 目的地址可以是arm也可以是thumb地址。

 

 

2 直接向程序计数器PC写入跳转地址值(4G地址空间的任意跳转)

如 MOV LR,PC

 


数据处理指令

分为:数据传送,

MOV{条件}{S} 目的寄存器,源操作数

没有S时指令不更新CPSR中的条件标准位的值。

 

MOV{条件}{S} 目的寄存器,源操作数

与mov的区别是在传送强把源操作数按位取反

 

CMP{条件} 操作数1,操作数2 

比较结果,同时更新CPSR中的条件标志位的值。(该指令进行一次减法运算,不存储结果,只更改条件标志位)
 

TST指令

用于把一个寄存器的内容和另一个寄存器的内容或立即数进行按位的与运算,并根据运算结果更新CPSR中的条件标准位的值。

TST R1,#%1;用于测试在寄存器R1中是否设置了最低位(%表示二级制数),EQ位被置位。

 

ADD指令

ADD{条件}{S} 目的寄存器,操作数1,操作数2

ADD R0,R2,R3,LSL#1;   R0=R2+(R3<<1)

 

SUB{条件}{S} 目的寄存器,操作数1,操作数2

AND{条件}{S} 目的寄存器,操作数1,操作数2

ORR{条件}{S} 目的寄存器,操作数1,操作数2

 
BIC{cond}{S} RD,Rn,operand2
 
清除Rn中的某些位,并把结果存放在Rd中,操作数operand2为32位的掩码,如果掩码中设置了某一位为1,则清除这一位。
 
MRS{条件} 通用寄存器,程序状态寄存器(CPSR或SPSR)
把参数状态寄存器的内容传送到通用寄存器中
 
MSR{条件} 程序状态寄存器(CPSR或SPSR)_<域>,操作数
把操作数的内容传送到程序状态寄存器的特殊域中。
 
加载和存储指令
LDR指令
LDR{条件} 目的寄存器,<存储寄存器>;取32bit
LDR{条件}B 目的寄存器,<存储寄存器>;取8bit
LDR{条件}H 目的寄存器,<存储寄存器>;取16bit
 
STR指令
STR{条件}源寄存器,<存储器地址>
 
 
批量加载和存储指令
LDM{条件}{类型} 基址寄存器{!},寄存器列表{^}
 
STM
 
 
数据交换指令
SWP{条件} 目的及长期,源寄存器1,[源寄存器2]
SWPB
 
LSL   左移,低位用0填充
ROR 循环右移
 
SWI 软件中断指令
BKPT 断点中断指令
 

你可能感兴趣的:(开发,职场,ARM,休闲)