`
freesoftman
  • 浏览: 313683 次
  • 性别: 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
分享到:
评论

相关推荐

    MSR寄存器的基本操作示例

    MSR寄存器的基本操作示例,用C语言完成,对刚开始接触系统层面编程的战友,或许会有一定帮助!

    常用ARM指令集及汇编.pdf

    ARM7TDMI(-S)指令集及汇编1 ARM 处理器寻址方式2 寄存器寻址2 立即寻址2 寄存器偏移寻址2 寄存器间接寻址3 基址寻址3 多寄存器寻址4 堆栈寻址4 块拷贝寻址5 相对寻址5 指令集介绍7 ARM 指令集7 指令...

    嵌入式系统/ARM技术中的ARM程序状态寄存器

    使用MSR和MRS指令来设置和读取这些寄存器。  当前程序状态寄存器(CPSR),持有关于当前处理器状态的信息。其他5个各份的程序状态寄存器(SPSR),每个特权模式都有一个,持有完成在这个模式下的例外处理时处理器...

    ARM的V4、V5版本的区别

    ARM作为独立的公司,在1990年设计的第一个微处理器采用的是版本3的ARM6。它作为IP核、独立的处理器、具有片上高速缓存、MMU和写...增加了MRS/MSR指令,以访问新增的CPSR/SPSR寄存器;增加了从异常处理返回的指令功能。

    修改MSR对syscall指令HOOK

    修改MSR(lstar)对syscall指令HOOK. 本身在win7 x64 sp1使用VS2013开发。

    MSR Identity Toolkit源码

    说话人识别MSR Identity Toolkit是微软的声纹识别工具箱。该工具箱包含了常规的基于GMM-UBM方法以及基于i-vector方法的介绍文档与MATLAB源码。 https://blog.csdn.net/u010592995/article/details/77340761

    librapl:Librapl 是一个库,可简化对现代 Intel CPU 的 MSR 寄存器中 RAPL 值的访问

    Librapl 是一个库,可简化对现代 Intel CPU(例如 SandyBridge 或 IvyBridge 处理器)的 MSR 寄存器中的 RAPL 值的访问。 它还包含一个示例应用程序,该应用程序可以在控制台上打印当前的能耗,或者将值以 Gnuplot ...

    msr_msr_

    Msr880 software full cd

    H3C-MSR-2600路由器配置.docx

    192.168.8.254可访问到web界面 H3C-MSR-2600路由器配置全文共2页,当前为第2页。H3C-MSR-2600路由器配置全文共2页,当前为第2页。. H3C-MSR-2600路由器配置全文共2页,当前为第2页。 H3C-MSR-2600路由器配置全文共2...

    龙芯3A处理器用户手册

    10.3.8 MODEM状态寄存器 (MSR) 63 10.3.9 分频锁存器 63 10.4 SPI控制器 63 10.4.1 控制寄存器(SPCR) 63 10.4.2 状态寄存器(SPSR) 63 10.4.3 数据寄存器(TxFIFO) 63 10.4.4 外部寄存器(SPER) 63 10.5 IO...

    MSR-900S_msr_

    MSR SOFTWARE SWIPE AND READ

    解锁0xE2寄存器1

    简介根据 AptioFixPkg’s README,一些固件在初始化核心的 0xE2 寄存器 (MSR_BROADWELL_PKG_CST_CONFIG_CON

    SYSENTER-hook.rar_C_specific_handler_SYSENTER_hook sysenter_obta

    SYSENETER是一条汇编指令,它是在Pentium&#174 II 处理器及以上处理器中提供的,是快速系统调用的一部分。SYSENTER/SYSEXIT这对指令专门 用于实现快速调用。在这之前是采用INT 0x2E来实现的。INT 0x2E在系统调用的...

    MICROTEK MSR-1200T48U驱动.zip

    MICROTEK MSR-1200T48U扫描仪驱动,实装能用,里面有详细安装方法。有需要的可以下载试试看。

    MSR系列路由器基本维护V4.0

    熟悉MSR的版本分类 熟悉MSR常用升级方法 熟悉MSR常见资料访问方法 掌握常用设备基本维护信息和命令

    retinex msr

    retinex msr retinex msr retinex msr retinex msr

    SYSENTER HOOK_HOOKMSR_SystemHook_进程保护_修改MSR_gotgkd_

    systemhook 通过修改msr寄存器hook openprocess函数保护进程

    H3C-MSR2600 固件

    H3C-MSR2600 固件,从H3C-MSR2600提取出来的,有需要的童鞋下载.

    MSR3600-CMW710-R0707P21.zip

    适用于H3C MSR2600_MSR3600_MSR5600 WiNet全系列 &lt;Sysname&gt; display version H3C Comware Software, Version 7.1.064, Release 0707P21 ------- 注① Copyright (c) 2004-2018 New H3C Technologies Co., ...

    H3C MSR810 系列千兆营销路由器最新固件

    H3C MSR810 系列千兆营销路由器最新固件。MSR 810系列通用。带AC管理功能。

Global site tag (gtag.js) - Google Analytics