1、ARM家族大检阅
①芯片:6410,210,2440 (三星出的)
②ARM核:A8,ARM11,ARM9
③指令架构:armv7,armv6,armv4
芯片中包含了一个ARM核:
2440(ARM9)---->armv4(采用的指令架构)
6410(ARM11)---->armv6
210(A8)---->armv7
2、ARM核演变图
|
处理速度
|
缓存
|
内存接口
|
支持OS
|
其他
|
S3C24400
|
402-500Mhz
|
16KB
|
SDRAM
|
LINUX/WINCE
|
停产
|
S3C6410
|
533-667Mhz
|
16KB
|
SDRAM/DDR
|
LINUX/WINCE/ANDROID
|
|
S5PV210
|
800Mhz--1Ghz
|
32KB
|
LPDDR/LPDDR2
|
LINUX/WINCE/ANDROID
|
|
3、ARM工作模式
Processor mode
|
|
Mode numbe
|
Description
|
User
|
usr
|
0b10000
|
Normal program execution mode
|
FIQ
|
fiq
|
0b10001
|
Supports a high-speed data transfer or channel process
|
IRQ
|
irq
|
0b10010
|
Used for general-purpose interrupt handling
|
Supervisor
|
svc
|
0b10011
|
A protected mode for the operating system
|
Abort
|
abt
|
0b10111
|
Implements virtual memory and/or memory protection
|
Undefined
|
und
|
0b11011
|
Supports software emulation of hardware coprocessors
|
System
|
sys
|
0b11111
|
Runs privileged operating system tasks (ARMv4 and above)
|
4、ARM寄存器详解
CPSR: Current Program Status Registers
SPSR: Save Program Status Registers
寄存器纵览
ARM微处理器共有
37个32位寄存器,其中
31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决
ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器
R14~
R0、程序计数器
PC、一个状态寄存器都是可访问的。
不分组寄存器(
The unbanked registers)
R0-R7:R0-R7是不分组寄存器。这意味着在所有处理器模式下,访问的都是同一个物理寄存器。不分组寄存器没有被系统用于特别的用途,任何可采用通用寄存器的应用场合都可以使用未分组寄存器。
分组寄存器(
The banked registers)
R8-R14:
分组寄存器R8-R12
1. FIQ模式分组寄存器R8-R12
2. FIQ以外的分组寄存器R8-R12
分组寄存器R13、R14
1. 寄存器R13通常用做堆栈指针SP
2. 寄存器R14用作子程序链接寄存器(Link Register-LR),也称为LR,指向函数的返回地址
程序计数器:
R15(
PC)
寄存器
R15被用作程序计数器,也称为
PC 。其值等于当前正在执行的指令的地址
+8(因为在取址和执行之间多了一个译码的阶段
)。
状态寄存器
ARM所有工作模式下都可以访问程序状态寄存器
CPSR。
CPSR包含条件码标志、中断禁止位、当前处理器模式以及其它状态和控制信息。
CPSR在每种异常模式下都有一个对应的物理寄存器——程序状态保存寄存器
SPSR。当异常出现时,
SPSR用于保存
CPSR的值,以便异常返回后恢复异常发生时的工作状态。
5、ARM寻址方式
所谓寻址方式就是
处理器根据指令中给出的信息来
找到指令所需
操作数的方式。
①立即数寻址:ADD R0,R0,
#0X3F
#0X3F就是立即数。立即数寻址,是一种特殊的寻址方式,
操作数本身就在指令中给出,只要取出指令也就取到了操作数。这个操作数被称为立即数,对应的寻址方式也就叫做立即数寻址。
②寄存器寻址:ADD R0,R1,R2
利用寄存器中的数值作为操作数,这种寻址方式是一种执行效率较高的寻址方式。
③寄存器间接寻址: LDR R0,
[R2]
寄存器间接寻址就是
寄存器中的存放的是操作数在内存中的地址。
④基地址变址寻址: LDR R0,[R1 #4]
基址变址寻址就是将寄存器里的内容(
基地址)与指令中给出的地址
偏移量相加,从而得到操作数在
内存中的地址.
⑤相对寻址:
与基址变址寻址方式相类似,相对寻址
PC指针的当前值为基地址,指令中的地址标号作为偏移量,将两者相加之后得到操作数的有效地址。
BL NEXT;跳转到子程序NEXT处执行
...
NEXT
...
MOV PC,LR;
阅读(585) | 评论(0) | 转发(0) |