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来完全恢复。
相关推荐
MSR寄存器的基本操作示例,用C语言完成,对刚开始接触系统层面编程的战友,或许会有一定帮助!
ARM7TDMI(-S)指令集及汇编1 ARM 处理器寻址方式2 寄存器寻址2 立即寻址2 寄存器偏移寻址2 寄存器间接寻址3 基址寻址3 多寄存器寻址4 堆栈寻址4 块拷贝寻址5 相对寻址5 指令集介绍7 ARM 指令集7 指令...
使用MSR和MRS指令来设置和读取这些寄存器。 当前程序状态寄存器(CPSR),持有关于当前处理器状态的信息。其他5个各份的程序状态寄存器(SPSR),每个特权模式都有一个,持有完成在这个模式下的例外处理时处理器...
ARM作为独立的公司,在1990年设计的第一个微处理器采用的是版本3的ARM6。它作为IP核、独立的处理器、具有片上高速缓存、MMU和写...增加了MRS/MSR指令,以访问新增的CPSR/SPSR寄存器;增加了从异常处理返回的指令功能。
修改MSR(lstar)对syscall指令HOOK. 本身在win7 x64 sp1使用VS2013开发。
说话人识别MSR Identity Toolkit是微软的声纹识别工具箱。该工具箱包含了常规的基于GMM-UBM方法以及基于i-vector方法的介绍文档与MATLAB源码。 https://blog.csdn.net/u010592995/article/details/77340761
Librapl 是一个库,可简化对现代 Intel CPU(例如 SandyBridge 或 IvyBridge 处理器)的 MSR 寄存器中的 RAPL 值的访问。 它还包含一个示例应用程序,该应用程序可以在控制台上打印当前的能耗,或者将值以 Gnuplot ...
Msr880 software full cd
192.168.8.254可访问到web界面 H3C-MSR-2600路由器配置全文共2页,当前为第2页。H3C-MSR-2600路由器配置全文共2页,当前为第2页。. H3C-MSR-2600路由器配置全文共2页,当前为第2页。 H3C-MSR-2600路由器配置全文共2...
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 SOFTWARE SWIPE AND READ
简介根据 AptioFixPkg’s README,一些固件在初始化核心的 0xE2 寄存器 (MSR_BROADWELL_PKG_CST_CONFIG_CON
SYSENETER是一条汇编指令,它是在Pentium® II 处理器及以上处理器中提供的,是快速系统调用的一部分。SYSENTER/SYSEXIT这对指令专门 用于实现快速调用。在这之前是采用INT 0x2E来实现的。INT 0x2E在系统调用的...
MICROTEK MSR-1200T48U扫描仪驱动,实装能用,里面有详细安装方法。有需要的可以下载试试看。
熟悉MSR的版本分类 熟悉MSR常用升级方法 熟悉MSR常见资料访问方法 掌握常用设备基本维护信息和命令
retinex msr retinex msr retinex msr retinex msr
systemhook 通过修改msr寄存器hook openprocess函数保护进程
H3C-MSR2600 固件,从H3C-MSR2600提取出来的,有需要的童鞋下载.
适用于H3C MSR2600_MSR3600_MSR5600 WiNet全系列 <Sysname> display version H3C Comware Software, Version 7.1.064, Release 0707P21 ------- 注① Copyright (c) 2004-2018 New H3C Technologies Co., ...
H3C MSR810 系列千兆营销路由器最新固件。MSR 810系列通用。带AC管理功能。