| 注意 | 以上37个寄存器中,1个CPSR和5个SPSR通称为状态寄存器,虽然这些寄存器是32位的,但目前只使用了其中的12位。除了这6个状态寄存器外,其余的31个寄存器又称为通用寄存器。 |
User | | FIQ | | IRQ | | SVC | | Undef | | Abort |
R0 | User mode R0~R7,R15,and CPSR | User mode R0~R12,R15 and CPSR | User mode R0~R12,R15 and CPSR | User mode R0~R12,R15 and CPSR | User mode R0~R12,R15 and CPSR | |||||
R1 | ||||||||||
R2 | ||||||||||
R3 | ||||||||||
R4 | ||||||||||
R5 | ||||||||||
R6 | ||||||||||
R7 | ||||||||||
R8 | R8 | |||||||||
R9 | R9 | |||||||||
R10 | R10 |
User | | FIQ | | IRQ | | SVC | | Undef | | Abort |
R11 | | R11 | | | | | | | | |
R12 | R12 | |||||||||
R13(SP) | R13(SP) | R13 | R13 | R13 | R13 | |||||
R14(LR) | R14(LR) | R14 | R14 | R14 | R14 | |||||
R15(PC) | | | | | |
CPSR | | | | | | | | | | |
| SPSR | SPSR | SPSR | SPSR | SPSR |
| 注意 | System模式使用和User模式相同的寄存器集 |
| 注意 | 当嵌套中断被允许时(即异常可重入),r13和r14的使用要特别小心。例如,在用户模式下一个IRQ中断发生,这时两种模式分别使用不同的r13和r14,换句话讲,用户模式使用r13_usr和r14_usr,而IRQ模式使用r13_irq和r14_irq,这样不会造成寄存器使用冲突。但是,当程序运行在IRQ模式下,又有IRQ中断进入,此时,第二级中断使用r13_irq和r14_irq,冲掉了第一级IRQ的堆栈指针和返回地址,导致程序异常。 解决办法是在第二级中断发生前,将第一级中断用到的寄存器压栈。 |
| 注意 | 这种读取PC值和写入PC值的不对称操作需要特别注意。 |
| 注意 | 由于用户模式和系统模式不属于异常中断模式,所以它们没有SPSR。当在用户模式或系统模式中访问SPSR,将会产生不可预知的结果。 |
http://www.eefocus.com/embedded/322866/file:///C:DOCUME~1ADMINI~1LOCALS~1Tempmsohtmlclip1\01clip_image005.jpg | 注意 | 对于CMP指令,Z=1表示进行比较的两个数相等。 |
http://www.eefocus.com/embedded/322866/file:///C:DOCUME~1ADMINI~1LOCALS~1Tempmsohtmlclip1\01clip_image005.jpg | 注意 | 下面两种情况会对CPSR的条件标志位产生影响。 1.比较指令(CMN、CMP、TEQ、TST)。 2.目的寄存器不是r15的算术逻辑运算和数据传输指令。这些指令可以通过在指令末尾加标志“S”来通知处理器指令的执行结果影响标志位。 |
M[4∶0] | 处理器模式 | 可以访问的寄存器 |
0b10000 | User | PC,r14~r0,CPSR |
0b10001 | FIQ | PC,r14_fiq~r8_fiq,r7~r0,CPSR,SPSR_fiq |
0b10010 | IRQ | PC,r14_irq~r13_irq,r12~r0,CPSR,SPSR_irq |
0b10011 | Supervisor | PC,r14_svc~r13_svc,r12~r0,CPSR,SPSR_svc |
0b10111 | Abort | PC,r14_abt~r13_abt,r12~r0,CPSR,SPSR_abt |
0b11011 | Undefined | PC,r14_und~r13_und,r12~r0,CPSR,SPSR_und |
0b11111 | System | PC,r14~r0,CPSR(ARM v4及更高版本) |
| 注意 | 由于用户模式(User)和系统模式(System)是非异常模式,所以没有单独的SPSR保存程序状态字。在用户模式或系统模式下,读SPSR将返回一个不可预知的值,而写SPSR将被忽略。 |
欢迎光临 DIY编程器网 (http://diybcq.com/) | Powered by Discuz! X3.2 |