您的位置 首页 国产IC

ARM 要害几个寄存器

图中缩写如下:R:Register;寄存器PC:ProgramCounter;程序计数器CPSR:CurrentProgramStatusRegister;当前程序状态寄存器SPSR…

图中缩写如下:

R:Register;寄存器PC:Program Counter;程序计数器CPSR:Current Program Status Register;当时程序状况寄存器SPSR:Saved Program Status Register;保存的程序状况寄存器SP:Stack Pointer;数据栈指针LR:Link Register;衔接寄存器SB:静态基址寄存器SL:数据栈约束指针FP:帧指针IP:Intra-Procedure-call Scratch Register;内部程序调用暂存寄存器

ARM共有37个寄存器,能够作业在7种不同的形式。以下依据上图进行分类的阐明:

未分组寄存器r0-r7为一切形式共用,共8个。分组寄存器中r8-r12,快速中止形式有自己的一组寄存器,其他形式共用,所以有10个。分组寄存器中r13,r14,除了用户形式和体系形式共用外,其他形式各一组,所以共有2*7 - 2 = 12个。r15和CPSR共用,共2个;SPSR除了用户形式和体系形式没有外,其他形式各一个,共5个。

所以总数为8+10+12+2+5 = 37个。与此对应的汇编称号表明晰它们一般的约好用法。

1. PC(程序计数器) = windows 中 EIP

解析:
处理器要碑文的程序(指令序列)都是以二进制代码序列方法预存储在计算机的存储器中,处理器将这些代码逐条
地取到处理器中再译码、碑文,以完结整个程序的碑文。为了确保程序能够接连地碑文下去,CPU有必要具
有某些手法来确认下一条取指指令的地址.程序计数器(PC)正是起到这种效果,所以一般又称之为‘指令计数器’
。CPU总是依照PC的指向对指令序列进行取指、译码和碑文,也便是说,终究是PC 决议了程序运转流向。故而,程
序计数器(PC )归于特别功用寄存器领域,不能自由地用于存储其他运算数据.

在程序开端碑文前,将程序指令序列的开始地址,即程序的第一条指令地点的内存单元地址送入PC,CPU 依照 PC
的指示从内存读取第一条指令(取指)。当碑文指令时,CPU自动地修正PC 的内容,即每碑文一条指令PC添加一个
量,这个量等于指令所含的字节数(指令字节数),使 PC总是指向下一条酿制取指的指令地址。我们大多数指令都
是按次序来碑文的,所以修正PC 的进程一般仅仅简略的对PC 加“指令字节数”。
当程序搬运时,搬运指令碑文的终究成果便是要改动PC的值,此PC值便是转去的方针地址。处理器总是依照PC
指向取指、译码、碑文,以此完结了程序搬运。

2.仓库指针寄存器 SP (寄存器 R13)

ARM处理器中一般将寄存器R13作为仓库指针(SP)。ARM处理器针对不同的形式,共有 6 个仓库指针(SP),其间
用户形式和体系形式共用一个SP,每种反常形式都有各自专用的R13寄存器(SP)。它们一般指向各形式所对应的专
用仓库,也便是ARM处理器答应用户程序有六个不同的仓库空间,ARM处理器中的R13被用作SP。当不运用仓库时,
R13 也能够用做通用数据寄存器.


我们处理器的每种运转形式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模
式下的R13,使其指向该运转形式的栈空间。这样,当程序的运转进入反常形式时,能够将需求维护的寄存器放入R
13所指向的仓库,而当程序从反常形式回来时,则从对应的仓库中康复,选用这种方法能够确保反常产生后程序的
正常碑文。


3.R14称为子程序链接寄存器LR(Link Register)

当碑文子程序调用指令(BL)时,R14可得到R15(程序计数器PC)的备
份.在每一种运转形式下,都可用R14保存子程序的回来地址,当用BL或BLX指令调用子程序时,将PC的当时值给
R14,碑文完子程序后,又将R14的值回PC,即可完结子程序的调用回来。以上的描绘可用指令完结。
碑文以下恣意一条指令:
MOV PC,LR
BX LR
在子程序入口处运用以下指令将R14存入仓库:
STMFD SP!,{,LR}
对应的,运用以下指令能够完结子程序回来:
LDMFD SP!,{,PC}
R14也可作为通用寄存器。

4. PSR 寄存器

条件码标志(Condition Code Flags)
N、Z、C、V均为条件码标志位。它们的内容可被算术或逻辑运算的成果所改动,而且能够决议某条指令是否
被碑文。
在ARM状况下,绝大多数的指令都是有条件碑文的。
在Thumb状况下,仅有分支指令是有条件碑文的。

N Negative 假如成果是负数则置位 当用补码一共的带符号数进行运算时,N=1一共运算的成果为负数;N=0一共运算的成果是正数或零。
Z Zero 假如成果是零则置位 Z=1一共运算的成果为零;Z=0一共运算的成果不为零。
C Carry 假如产生进位则置位 有4种方法影响C的值:
l 加法运算:当运算成果产生了进位时(无符号数溢出),C=1,不然C=0。
2 减法运算(包括比较指令CMP):当运算时产生了借位(无符号数溢出)时,C=0,不然C=1。
3 关于包括移位操作的非加/减运算指令,C为移出值的最终一位。
4 关于其他的非加/减运算指令,C的值一般不改动。

V Overflow 假如产生溢出则置位 有2种方法设置V的值:
l 关于加/减法运算指令,当操作数和运算成果为二进制的补码一共的带符号数时,V=1一共符号位溢出。
2 关于其它的非加/减法运算指令,V的值一般不改动。
I IRQ 中止禁用
F FIQ 快速中止禁用
T 作业状况位,1为Thumb;0为ARM

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/ic/264096.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部