关于ARM寄存器组及工作模式知识.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

?

关于ARM寄存器组及工作模式知识

(周方辉)

?

?

2012/8/10

?

编改记录

编写日期

内容概要

2012-08-10

创建

?

?

?

?

?

?

?

?

目??录

1??参考文献??2

1.1??内部参考文献??2

1.2??外部参考文献??2

2??名词解释??2

3??ARM核工作模式??2

3.1??程序状态寄存器??3

3.2??寄存器分组??4

3.3??何为特权(异常)模式??6

3.4??各种模式工作机制??7

3.5??各种模式工作返回用户模式机制??9

4??ARM核工作模式初始化参考代码??11

1参考文献

1.1内部参考文献

内部参考文献指的是周方辉自生的百度博文中的文件。

无内部参考文献。

1.2外部参考文献

外部参考文献指的是相对于上述内部参考文献以外的文件。

《ARMv8_ISA_PRD03-GENC-010197-24-0.pdf》

《cortex_a8_r3p2_trm.pdf》

《CortexA8TechRefManul.pdf》

2名词解释

cpsr:??当前程序状态寄存器,其数值反映出当前程序运行的一些状态指示。

SPSR:??保存程序状态寄存器,在程序调用等情况下,需要保存一下当前程序状态寄存器的值(SPSR=CPSR),便于日后回复。

SP:??堆栈指针寄存器,其值用于执行当前堆栈栈顶(或栈底)位置。

PC:???程序指针寄存器,其值用于指向要执行的程序代码地址。

LR:????连接返回寄存器,保存要返回的地址,PC=LR。

3ARM核工作模式

常规CPU工作核心模块都是由:寄存器组和ALU两大模块组成,ALU完成数据的加工处理,寄存器用来保存数据,这些数据是直接参与ALU运算。ARM的处理器也不例外。

ARM处理器的寄存器分成许多组,不同的组完成不同环境下的工作,不过它们都共用一套ALU数据处理模块。ARM寄存器一般用了37个,CortexA8的ARM核的寄存器多大40个。

我们学习ARM工作模式需要了解和解决下面问题:

ARM寄存器为什么要分组?又是如何分组?

各组与CPU工作模式是如何关联?

各个组或工作模式是如何切换的?

我们在学习ARM寄存器分组工作模式之前,先来看一下很特殊的一个寄存器——PSR程序状态寄存器。

3.1程序状态寄存器

程序状态寄存器是一个32bits的寄存器,它记录和指示出当前程序运行状态。

格式如下:

31

30

29

28

27

26-25

24

23-20

19-16

15-10

9

8

7

6

5

4-0

N

Z

C

V

Q

IT[1:0]

J

DNM

GE[3:0]

IT[7:2]

E

A

I

F

T

M[4:0]

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

条件状态位:

N:Negative/Lessthan,负数/小于0,而置1。

Z:Zero,为0时该位置1。

C:Carry/Borrow/Extend,发生了进位/借位/扩伸,该位将置1。

V:Overflow,溢出时该位置1。

它们之间关系:

指令中的条件编码码

记助符

PSR中标志位

用意

0000

EQ

Z=1

相等

0001

NE

Z=0

不相等

0010

CS

C=1

=(无符号数)

0011

CC

C=1

(无符号数)

0100

MI

N=1

负数

0101

PL

N=0

正数或为零

0110

VS

V=1

溢出

0111

VC

V=0

未溢出

1000

HI

C=1,且Z=0

(无符号数)

1001

LS

C=0,且Z=1

=(无符号数)

1010

GE

N=V

=(带符号数)

1011

LT

N!=V

(带符号数)

1100

GT

Z=0,且Z==V

(带符号数)

1101

LE

Z=1,或N!=V

=(带符号数)

1110

AL

忽略

无条件执行

?

?

?

?

Q:Stickyoverflow,饱和计算溢出标志。(有符号运算,确保数的极性不会翻转)发生时溢出,该位置1。例如:假设8bits符号数据,125+9=127,133超过127成为负数,而Q算法保持127最大数,确保不会变成负数。

IT[7:0]:[7:2]用于IF….ELSE…条件执行状态位。

GE[3:0]:用于SIMD指令,大于或等于。

使能控制位:

A:A=1时,禁止不确定数据异常。

I:IRQ中断使能位,当其置1时,禁止IRQ发生。

F:FIQ中断使能位,当其置1时,禁止FIQ中断。

指令类别状态位:

J:Javastatebit,当T为1时,J=0,表示执行Thumb指令状态,J=1表示执行ThumbEE指令状态。

T:当其为1

文档评论(0)

ryaoo + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档