ARM中MRS和MSR汇编指令
来源:互联网 发布:淘宝男鞋高仿店推荐 编辑:程序博客网 时间:2024/04/29 22:02
转自http://blog.csdn.net/lee244868149/article/details/41748513
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来完全恢复。
- ARM中MRS和MSR汇编指令
- ARM汇编指令MRS和MSR
- MSR和MRS 指令
- MSR和MRS 指令
- MSR和MRS指令
- ARM中MRS汇编指令
- ARM中MRS汇编指令
- arm汇编—mrs,msr
- arm汇编:mrs与msr
- 汇编指令状态寄存器访问指令(MRS,MSR)
- MRS,MSR指令详解
- MRS,MSR指令详解
- MRS,MSR指令详解
- ARM处理器模式切换(含MRS,MSR指令)
- ARM处理器模式切换(含MRS,MSR指令)
- ARM处理器模式切换(含MRS,MSR指令)
- ARM处理器模式切换(含MRS,MSR指令)
- ARM处理器模式切换(含MRS,MSR指令)
- jzoj 5039. 【NOI2017模拟4.2】查询 线段树
- 类的设计技巧
- static与const的作用
- Maven所遇到的坑
- Go语言基础学习八-映射
- ARM中MRS和MSR汇编指令
- Reactive Native环境搭建(Android)
- bzoj1149: [CTSC2007]风玲Mobiles
- 我看见一个妹子很不想说他的
- VTK编译的一些报错
- 循环节长度
- 剑指Offer 38 数字在排序数组中出现的次数
- LeetCode: 46. Permutations
- 停止worker脚本