ARM-寄存器基础知识

1. PC寄存器

PC指针
说明:
1)cpu有3条流水线,例如浅绿的fetch,蓝色的decode和绿色的execute。这3条流水线可以并行运作。
2)在第1条指令:addr r0,r1,#执行时,根据时间轴3,应该是fetch第3条指令: cmp r2,#3。所以PC指针总是指向执行指令后的第2条指令。也就是PC=当前指令地址+2*位宽字节。
PC指针作用就是fectch用的。
问题:
在执行第一条命令后,怎么找到下一条命令?
因为在执行第一条命令,第二条已经被取到流水线里,所以直接能执行第2条指令。根据PC指针取命令,执行命令按照流水线顺序执行。(顺序执行可能有误)。

2 PC指针变化

gdb,显示disassemble
1
在这里插入图片描述
说明:
从gdb中看,pc指向下一条执行汇编指令的地址。

2. CPSR寄存器

CPSR寄存器是当前程序状态寄存器。
在这里插入图片描述

2.1 CPSR的域

CPSR有四个域。
在这里插入图片描述
其中cpsr_c代表的是cpsr寄存器的低8位,也就是控制位

有些程序里这样写
msr cpsr_c, #0xd2 @ 进入中断模式

下面是,4:0位的值说明:
在这里插入图片描述

3.R13寄存器

2.堆栈指针寄存器 SP (寄存器 R13)
ARM处理器中通常将寄存器R13作为堆栈指针(SP)。ARM处理器针对不同的模式,共有 6 个堆栈指针(SP),其中
用户模式和系统模式共用一个SP,每种异常模式都有各自专用的R13寄存器(SP)。它们通常指向各模式所对应的专
用堆栈,也就是ARM处理器允许用户程序有六个不同的堆栈空间,ARM处理器中的R13被用作SP。当不使用堆栈时,
R13 也可以用做通用数据寄存器.


由于处理器的每种运行模式均有自己独立的物理寄存器R13,在用户应用程序的初始化部分,一般都要初始化每种模
式下的R13,使其指向该运行模式的栈空间。这样,当程序的运行进入异常模式时,可以将需要保护的寄存器放入R
13所指向的堆栈,而当程序从异常模式返回时,则从对应的堆栈中恢复,采用这种方式可以保证异常发生后程序的
正常执行。


比如:在用户模式,在切换到异常模式前,可以把PC的地址放入到SP寄存器,然后切换到异常模式,这样异常模式切换到用户模式,PC可以从SP寄存器中恢复下一条要执行的指令。

4 .R14寄存器

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也可作为通用寄存器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值