ARM基础

7种工作模式:

1.User         用户模式          正常程序执行

2.FIQ          快速中断模式      高优先级中断

3.IRQ          外部中断模式      通常中断处理

4.Surpervisor  管理模式          复位或软中断

5.Abort        中止模式          存取异常

6.Undefined    未定义模式        执行未定义指令

7.System       系统模式          特权级的

 

寄存器:

ARM37个寄存器:3132位通用寄存器,6个状态寄存器(只用12位)。

未分组寄存器R0R7  是真正的通用寄存器

分组寄存器R8R14   使用FIQ模式时,访问R8_fiq~R12_fiq

寄存器R13ARM指令中常用作堆栈指针SP,这是一种习惯用法

R14 作为子程序连接寄存器 当BL指令执行时,R14中得到R15(程序计数器)的备份 其他情况作通用寄存器

R15 程序计数器 ARM状态下:位[10]为0,位[312]用于保存PC,在Thumb状态下,位[0]为0,位[311]用于保存PC

PC总指向正在取指的指令,也就是当前指令的下两条指令的地址,

对于ARM状态,指向当前指令地址值加8个字节的地址

对于Thumb状态,指向当前指令地址值加4个字节的地址

 

CPSR Current Program Status Register

M[4:0] 处理器模式选择

T 处理器工作状态选择,T=1Thumb状态;T=0ARM状态

I=1,禁止IRQ中断

F=1,禁止FIQ中断

N:判负标志

Z:判0标志

C:进位标志

V:溢出标志

 

ARM基础 - xgc94418297 - 小超hide的博客 

M40

模式

10000

User

10001

FIQ

10010

IRQ

10011

Supervisor

10111

Abort

11011

Undefined

11111

System

 

Thumb状态和ARM状态下寄存器的映射

Thumb     ARM

R0~R7     R0~R7

CPSR      CPSR

SPSR      SPSR

SP        R13

LR      R14

PC      R15

 

异常:

进入异常行为:

1.将下一条指令的地址保存到相应的Link寄存器中(R14),如果是ARM状态进入异常,根据异常状态,数值为当前PC+4PC+8

2.拷贝CPSR到相应的SPSR

3.根据异常类型强制改变CPSR模式位的值,禁止IRQ,禁止FIQ(这两个在需要时才禁止)

4.PC的值指向异常处理向量所指的下一指令(执行中断处理程序)

 

异常返回行为:

1.Link寄存器减去相应的偏移量,赋给PC

2.拷贝回SPSRCPSR

3.清除中断禁止标志

 

每个异常模式对应有两个寄存器R13保存堆栈指针,R14保存返回地址

 

异常响应过程:

R14_<mode>=return link        //保存返回地址

SPSR_<mode>=CPSR              //拷贝CPSR

CPSR[4:0]=mode number         //改变模式

CPSR[5]=0                     //运行于ARM状态

CPSR[6]=1                     //禁止IRQ中断

if <mode>=Reset or FIQ then   //ResetFIQ异常中断时

CPSR[7]=1                     //禁止FIQ中断

PC=exception vector address   //PC转到中断向量地址

 

异常中断向量:

地址

异常

进入模式

0x0000 0000

复位

管理模式

0x0000 0004

未定义指令

未定义模式

0x0000 0008

软件中断

管理模式

0x0000 000C

预取指中止

中止模式

0x0000 0010

数据中止

中止模式

0x0000 0014

保留

保留

0x0000 0018

IRQ

IRQ

0x0000 001C

FIQ

FIQ

 

ARM中断优先级:

优先级

异常

1

复位

2

数据中止

3

FIQ

4

IRQ

5

预取指中止

6

未定义指令,SWI

 

ARM中的大端小端格式:

大端格式中,字数据的高字节存储在低地址,低字节存储在高地址

ARM基础 - xgc94418297 - 小超hide的博客

小端格式中,字数据的低字节存储在低地址, 高字节存储在高地址

ARM基础 - xgc94418297 - 小超hide的博客

 

 

0   分享到:         
阅读(166) | 评论(1) | 引用(3) | 举报
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值