`
freesoftman
  • 浏览: 319862 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

汇编指令状态寄存器访问指令(MRS,MSR)

阅读更多

ARM中有两条指令用于在状态寄存器和通用寄存器之间传送数据。

针对32位的ARM处理器,状态寄存器就是一个32位长的寄存器。每个位的含义如下图:

 

分成了4部分:

1,条件标志位

N(Negative), Z(Zero), C(Carry), V(Verflow)统称为条件标志位。ARM指令可以根据CPSR中的这些条件标志位来选择性的执行。

2,Q标志位

ARM v5的E系列处理器中,CPSR的bit[27]称为Q标志位。主要用于指示增强的DSP指令是否发生了溢出。

3,控制位

I, F, T以及M[4:0]统称为控制位。当异常中断发生时,这些位发生变化。在特权级的处理器模式下,软件可以修改这些控制位。

下表示控制位M[4:0]的含义:


M[4:0]

处理器模式

可访问的寄存器

0b10000

用户模式

PC,CPSR, R14~R0

0b10001

FIQ模式

PC,CPSR, SPSR_fiq,R14_fiq,R8_fiq, R7~R0

0b10010

IRQ模式

PC,CPSR, SPSR_irq,R14_irq,R13_irq,R12~R0

0b10011

管理模式

PC,CPSR, SPSR_svc,R14_svc,R13_svc,R12~R0

0b10111

中止模式

PC,CPSR, SPSR_abt,R14_abt,R13_abt, R12~R0

0b11011

未定义模式

PC,CPSR, SPSR_und,R14_und,R13_und, R12~R0

0b11111

系统模式

PC,CPSR(ARMv4及以上版本), R14~R0

4,保留位
 用于将来ARM版本的扩展。

 

状态寄存器访问指令仅有两天:

MRS: 状态寄存器到通用寄存器的传送指令。

MSR: 通用寄存器到状态寄存器的传送指令。

 

MRS指令介绍

MRS的指令编码格式:



 指令的语法格式:

MRS{<cond>}<Rd>, CPSR

MRS{<cond>}<Rd>, SPSR

其中:

<cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。

<Rd>为目标寄存器。

 

指令操作的伪代码:

if ConditionPassed(cond) then 
    if R == 1 then
        Rd = SPSR 
    else
        Rd = CPSR

 

MSR指令使用的场合:

  • 通常通过“读取-修改-写回”操作序列修改状态寄存器的内容。MRS指令用于将状态寄存器的内容读到通用寄存器中。
  • 当异常允许嵌套时,需要在进入异常中断之后,嵌套中断发生之前保存当前处理器模式对应的SPSR。这时需要先通过MRS指令读出SPSR的值,在用其他指令将SPSR值保存起来。
  • 在进程切换时也需要保存当前状态寄存器的值。

MSR指令介绍

MRS的指令编码格式:

这里分为两种格式,一种是原操作数为通用寄存器, 另一种是源操作数是立即数。



 

指令的语法格式:

MSR{<cond>} CPSR_<fields>, #<immediate>
MSR{<cond>} CPSR_<fields>, <Rm>
MSR{<cond>} CPSR_<fields>, #<immediate>
MSR{<cond>} CPSR_<fields>, <Rm>

 其中:

<cond>为指令执行的条件码。当<cond>忽略时指令为无条件执行。

<fields>设置状态寄存器中需要操作的位。状态寄存器的32位可以分为4个8位的域:

    f: 指示bits[31 : 24],又名条件标志位域

    s: 指示bits[23 : 16],又名状态标志位域

    x: 指示bits[15 : 8], 又名扩展位域

    c: 指示bits[7 : 0],又名控制位
<immediate>为将要传送到状态寄存器中的立即数,该立即数的计算方式可以去照看<ARM+Architecture+Reference+Manual.pdf>

<Rm>寄存器包含将要传送到状态寄存器中的数据。

 

指令的操作伪代码:



 

指令的使用:
MSR指令通常用于恢复状态寄存器的内容或者改变寄存器的内容。

当退出异常中断处理器程序时,如果事先保存了状态寄存器的内容通常通过MSR指令将事先保存的状态寄存器内容恢复到状态寄存器中。

当需要修改状态寄存器的内容时,通过“读取-修改-写回”指令序列完成。写回操作也是通过MSR指令完成的。

 

处理器切换到特权模式,使用将要修改某个位域的示例:

mrs r0, cpsr ;读取cpsr中的值
bic r0, r0, #0x1F ;修改,去除当前处理器模式
orr r0, r0, #0x13 ;修改,设置特权模式
msr cpsr_c, r0 ;写回,仅仅修改CPRS中的控制位

 

 

当进程切换到应用场合,应指定SPSR_fsxc来完全恢复。

 

 

  • 大小: 18.4 KB
  • 大小: 17.7 KB
  • 大小: 42.4 KB
  • 大小: 164.4 KB
分享到:
评论

相关推荐

    ARM CORTEX-M0汇编指令汇总

    在编写汇编程序时,开发者必须参考Cortex-M0的官方技术参考手册(Technical Reference Manual),以获取每条指令的精确时序、周期数以及对状态寄存器的影响。手册中的指令集详细描述每条指令的功能、格式和使用示例...

    ARM汇编指令.pdf

    **MSR指令**:与MRS相反,MSR指令用于将通用寄存器或立即数的内容写入CPSR或SPSR的特定域中。CPSR和SPSR被划分为四个域:条件标志位域(f)、状态位域(s)、扩展位域(x)、控制位域(c),分别对应位[31:24]、[23:...

    ARM汇编指令集详解

    5. **处理器状态控制**:如MRS(Move to Register from Status)和MSR(Move to Status from Register),它们用于读取或设置处理器的状态标志,如条件码寄存器。 在实际编程中,理解寄存器布局也是关键。例如,R0-...

    ARM汇编指令集查看手册

    PSR是保存处理器当前状态的寄存器,如`MRS`(从PSR到寄存器)和`MSR`(从寄存器到PSR)指令,用于读取和修改处理器状态,例如条件码标志、处理器模式等,对程序的控制流有直接影响。 4. **加载/存储指令**: `LDR...

    常用ARM指令集及汇编(完整版).pdf

    包括软件中断指令SWI,寄存器状态复制指令MRS和MSR。 11. ARM伪指令: 为方便编程,ARM汇编语言提供了一系列伪指令,包括地址读取指令ADR、ADRL,数据加载指令LDR,以及空操作指令NOP。 12. Thumb指令集: 这是一...

    ARM汇编指令集详细介绍

    6. 系统控制指令:如`MRS`和`MSR`,用于读取和修改处理器状态寄存器,`SWI`用于执行操作系统服务。 接下来,我们要讨论的是ARM处理器的寄存器。ARM架构通常有多个通用寄存器(R0-R15),其中R13通常用作堆栈指针,...

    ARM9汇编指令大全

    `MRS`和`MSR`指令用于读取和设置处理器状态寄存器(CPSR或SPSR),这在改变处理器工作模式或者处理中断时非常有用。 **7. 多媒体和向量扩展** ARM9支持Thumb和Thumb-2技术,提供了一组高效的16位指令集,以减少代码...

    ARM汇编指令(中文版).chm

    5. **系统控制指令**:这些指令涉及处理器状态的修改,如MRS和MSR用于读写系统寄存器,MOV用于移动寄存器值,MVC用于内存到内存的拷贝。 6. **其他指令**:还包括向量处理(如NEON)、协处理器操作、异常处理、中断...

    arm汇编指令集 ——基于arm汇编的指令

    - **SWI/MRS/MSR**:软件中断/读状态寄存器/写状态寄存器指令,主要用于触发异常或更改处理器的状态。 - **ADR/ADRL/LDR/NOP**:地址计算/长地址计算/加载寄存器/空操作指令,用于计算地址、加载数据以及执行简单的...

    ARM常用指令集及汇编.rar_ARM 指令集_ARM 汇编_arm 汇编指令_汇编_汇编指令集

    6. **状态和控制指令**:如`MRS`和`MSR`,用于读取和修改处理器的状态寄存器,如程序计数器(PC)、状态寄存器(CPSR)等。 了解了基本的指令集后,我们转向ARM汇编语言。汇编语言是一种低级编程语言,每条指令直接...

    arm汇编指令全集

    5. 程序状态控制指令:改变处理器的状态,如MRS、MSR等。 6. 转移指令:用于跳转到程序的其他部分,如BX、BLX等。 7. 带符号扩展和无符号扩展指令:如SXTB、UXTB等,用于将字节数据转换为半字或字。 二、常用指令...

    ARM汇编指令(中文版)

    - **处理器状态和控制指令**:如改变条件码(MRS, MSR)、改变处理器模式(MSR CPSR_f, #xxx)。 - **浮点运算指令**:对于支持VFP(Vector Floating Point)的ARM处理器,有专门的浮点运算指令。 3. **寄存器**...

    ARM7汇编指令集 ARM汇编指令集

    - `MRS`, `MSR`: 读取和设置处理器状态寄存器。 7. **浮点运算(如果有支持)** - `VFMA`, `VFMS`: 浮点向量加法和减法。 - `VADD`: 单精度和双精度浮点数加法。 - `VMUL`: 浮点数乘法。 - `VMOV`: 浮点数到...

    arm汇编指令集详解

    1. MRS:从状态寄存器中读取信息。 2. MSR:向状态寄存器写入信息。 3. SWI:软件中断,用于调用操作系统服务。 七、寄存器组织 ARM处理器有多个通用寄存器,如R0到R15,其中R13通常作为堆栈指针,R14作为链接...

    ARM汇编指令与编程

    5. 处理器状态切换:如MSR(修改状态寄存器)、MRS(读取状态寄存器)用于切换处理器工作模式和配置状态寄存器。 6. 存储访问指令:如LDR(加载)和STR(存储)用于从内存加载数据到寄存器或把寄存器数据存储到内存...

    ARM汇编指令集

    5. **处理器控制指令**:如MRS(Move Register from Status,从状态寄存器到通用寄存器)、MSR(Move Status to Register,将通用寄存器的内容到状态寄存器)等,用于读取或设置处理器的状态。 在实际开发中,...

    arm920t 汇编指令集

    - **多寄存器寻址**:一次指令可以访问多个寄存器。 - **堆栈寻址**:使用堆栈指针进行数据存取。 通过以上指令集和寻址方式的介绍,我们可以看出ARM920T的指令集不仅提供了丰富的操作指令,还支持灵活的寻址方式,...

    arm汇编指令集PDF格式

    5. **其他指令**:还包括一些特殊用途的指令,如MRS(从状态寄存器移动到通用寄存器)、MSR(从通用寄存器移动到状态寄存器),用于控制处理器状态;以及MCR、MRC(通用寄存器到协处理器寄存器,反之亦然)用于与协...

    常用ARM指令集及汇编.pdf

    - **MRS**、**MSR**:从/到状态寄存器的转移。 ### Thumb指令集 Thumb指令集是ARM指令集的一个精简版本,用于节省代码空间。它有类似的寻址方式和指令,但格式和操作略有不同。 1. **Thumb存储器访问**: - **...

    ARM指令和汇编指令

    - **MSR**:向程序状态寄存器写入值。 **ARM伪指令** - **ADR**/ **ADRL**:用于计算地址。 - **LDR**:加载指令。 - **NOP**:空操作指令。 **Thumb指令集** **Thumb指令集与ARM指令集的区别** Thumb指令集是ARM...

Global site tag (gtag.js) - Google Analytics