寄存器的组成
来源:互联网 发布:网店美工工资多少 编辑:程序博客网 时间:2024/05/20 12:24
1.ARM处理器有37个寄存器。
通用寄存器:31个 :R0~R15 R13_svc, R14_svc ,R13_abt,R14_abt,R13_irq,R14_irq,R13_und,R14_und,R13_fiq,R14_fiq,R8_fiq,R9_fiq,R10_fiq,R11_fiq,R12_fiq。
状态寄存器:6个 :cpsr,spsr_svc,spsr_abt,spsr_und,spsr_irq,spsr_fiq.
2.ARM 状态下的通用寄存器
通用寄存器(R0~R15)可分为3类:
**不分组寄存器:R0~R7;
**分组寄存器 :R8 ~ R14
** 程序计数器 : pc
应用:
不分组寄存器:在所有处理器模式下,他们访问的都是同一个物理寄存器。所以必须注意对同一个寄存器在不同模式下使用时的数据保护。
分组寄存器 :
R8 ~ R12: FIQ模式分组寄存器 R8 ~ R12 ,FIQ处理程序可不必保存和恢复中断现场,从而使FIQ中断的处理模式过程更加迅速
非FIQ模式分组寄存器 R8 ~ R12,在FIQ以外的4个异常模式使用 R8~ R12和各自的R13,R14,来简单的处理中断。在FIQ模式以外的中断处理中,
如果要使用R8 ~ R12,则必须考虑保护。
R13 ~ R14: 寄存器R13和R14各有六个分组的物理寄存器,1个用于用户模式,其他的5个用于异常模式。
名字命名规则如下:R13_<mode> R14_<mode>
R13: 通常用作堆栈指针SP,在ARM中这是一种习惯的用法,也可当做普通的寄存器来使用。但是在Thumb中必须当做Sp堆栈指针来使用。
每一种异常模式都有自己的R13寄存器。当推出异常处理程序时,将保存在R13所指的堆栈中的寄存器值弹出,这样就使异常处理程序不会破坏被其中断的
程序的运行现场。
R14: 用作子程序链接寄存器(link register),也称为LR。每一种异常模式都有自己的物理R14,用来存放当前子程序的返回地址。即当前的pc值保存在R14寄
存器中。当执行完中断处理程序,只要把R14的值复制到pc中,中断程序立即返回。
MOV PC,LR
BX LR
在子程序入口使用下面的指令将pc 保存到栈中:STMFD SP!,{<register>,LR}
下面的指令可实现子程序的返回: LDMFD SP! {<register>,pc}
程序计数器pc: 当向R15写入一个地址时程序就会跳转到该地址去执行,所以使用该寄存器一定要谨慎。由于ARM状态下指令总是字对齐的所以R15的低两位为0。
[31 - 2]保存地址。
3.ARM程序壮态寄存器
CPSR:当前程序壮态寄存器
SPSR:程序壮态保存寄存器 用于保存CPSR的壮态,以便从异常返回后恢复异常发生前的工作状态。
CPSR和SPSR的格式:
条件码标志:
N:在结果是有符号的二进制补码情况下,如果结果为负数,则 N= 1,否则 N = 0;
Z:如果结果是为0,则 Z = 1,否则 Z = 0。
C:对于加法来说,如果产生进位则 C = 1,否则 C = 0;
对于减法来说,如果有借位 则C = 0,否则 C = 1;
对于移位操作 C 为移位操作中最后移出位的值;
V:对于加法来说,操作数和结果都是有符号数时,如果发生溢出,则 V = 1,否则 V= 0;
控制位:
最低8位为控制位。当异常发生时,改变控制位。
I:中断禁止位;若 I = 1,则禁止IRQ中断;
F:快速中断禁止位;若 F = 1,则禁止FIQ中断;
T:状态位; T = 0 ARM壮态 ,T = 1 Thumb壮态
M:模式位;这些位决定处理器的工作模式。
- 80386的寄存器组成
- 寄存器的组成
- 80386的寄存器组成
- 80386的寄存器组成
- intel 80386的寄存器组成
- 80386的寄存器组成(转)
- 80386的寄存器组成(转)
- 80386的寄存器组成(转)
- ARM 寄存器组成
- 汇编学习笔记:CPU内部组成,寄存器讲解
- pc寄存器和ir寄存器的区别
- CPU寄存器的种类
- 标志寄存器的读写
- 80386的寄存器 摘
- 寄存器变量的用法
- 关于寄存器的简介
- 寄存器值的操作方法
- PC并口的寄存器
- windows 2008 NLB (网络负载均衡)
- 进程退出
- Andreoid MD5加密
- Android软键盘的隐藏显示研究
- 数据库
- 寄存器的组成
- 那些年,我们一起找过的工作
- session_set_save_handler
- JavaScript 跨域
- 遍历json数据的n种方法
- zlib基本使用
- python 软件漏斗挖掘脚本
- JAVA中转义字符
- 38 匹马赛跑问题