linux 汇编 寄存器,arm-linux 汇编(3) – 处理器模式 寄存器

arm-linux 汇编(3) – 处理器模式 寄存器

blog 归档 arm-linux 汇编 系统编程

上一篇中给出了在arm体系架构中[用户态]的寄存器, 共有16个通用寄存器r0-r15和一个通用程序状态寄存器(cpsr).

上一篇中给出了在arm体系架构中[用户态]的寄存器, 共有16个通用寄存器r0-r15和一个通用程序状态寄存器(cpsr).

1.这次接着说通用程序状态寄存器

先看图:

image_1bl0ld0ga1lkn16khh2rvg1j3a9.png

cpsr分为4个域, 每个域8位, 分别是标志域, 状态域, 扩展域和控制域.(图上画的有点错误, 扩展域画大了, mode和I,F,T都是控制域的)

其中标志域表示运算结果的标志. 控制域中, I为1表示屏蔽掉普通中断, F为1表示屏蔽掉快速中断, T为1表示当前为thumb模式.

Mode域表示了当前CPU的处理器模式.

2.处理器模式

不算上最新安全扩展和虚拟化扩展新加上的模式的话, arm架构共有7个处理器模式:User mode

FIQ mode

IRQ mode

Supervisor (svc) mode

Abort mode

Undefined mode

System mode

其中User mode为非特权模式以外, 剩下6个都为特权模式.

当快速中断产生时进入FIQ模式.

当中断产生时进入IRQ模式.

当系统reset或swi(又称svc, 软中断)命令执行时进入svc模式.

当访问内存失败时(分为prefetch abort和data abort)进入Abort模式.

当执行的指令未定义时进入Undefined模式.

是否为特权模式决定了那些寄存器是可用的, 以及cpsr本身的访问权限. 对于特权模式, 对cpsr有完全的访问权限(MSR和MRS指令), 对以非特权模式, 只能读控制域但可读写条件标志域.

3.寄存器

arm架构共有37个寄存器但在不同时刻有20个寄存器是隐藏的(图中阴影部分), 只有当寄存器处于某种特定模式时, 才能访问特定的寄存器(如在abort模式才能访问r13_abt), 另外, 在不同的模式访问cpsr都是同一个, 而spsr_mode用来保存进入特权模式之前的cpsr以便保存异常之前的现场.

image_1bl0lfomu104c13dd161112p81p89m.pngRegisters across CPU modes

usr

sys

svc

abt

und

irq

fiq

R0

R1

R2

R3

R4

R5

R6

R7

R8

R8_fiq

R9

R9_fiq

R10

R10_fiq

R11

R11_fiq

R12

R12_fiq

R13

R13_svc

R13_abt

R13_und

R13_irq

R13_fiq

R14

R14_svc

R14_abt

R14_und

R14_irq

R14_fiq

R15

CPSR

SPSR_svc

SPSR_abt

SPSR_und

SPSR_irq

SPSR_fiq

从wiki上copy的一个寄存器的表格

其实这些东西对于写用户程序的话都是透明的了, 但是有利于理解arm体系架构和看懂一些系统级的代码.

下面想要学一学eabi相关的东西了除了指令集就是这个最重要了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值