无论您正在学习哪种处理器,您都需要知道的第一件事是该处理器的寄存器和工作模式。 ARM有37个寄存器,其中包括31个常规寄存器和6个状态寄存器。在此要特别注意ARM自己的寄存器与其某些外设寄存器之间的区别。 ARM本身是一个统一的体系结构,这意味着37个寄存器将出现在任何公司的芯片中。但是,各个公司都会扩展ARM的外围设备,因此有很多外围设备寄存器,必须与这37个寄存器区分开!!! 1.备份寄存器(R8-R14)用于R8-R12除快速中断模式外,每种模式都对应于相同的物理寄存器,因此在FIQ模式下无需保护和恢复中断场景。对于R13-R14,每个寄存器对应于6个不同的物理寄存器,其中一个由用户模式和系统模式共享。寄存器R13通常用作堆栈指针SP。除用户和系统模式外,其他模式的名称在使用时均为R13_。寄存器R14也称为2,未分组的寄存器(R0-R7)是未分组的,也就是说,它们在所有处理器模式下都引用相同的物理寄存器。当由于异常中断而切换处理器模式时,由于不同的处理器模式使用具有相同名称的物理寄存器(即,使用了相同的寄存器),这可能导致寄存器中的数据被破坏,因此必须将其删除。切换模式时受保护。它是连接寄存器(LR)。除用户和系统模式外,其他模式在使用时的名称均为R14_。有两个特殊目的,如下所示:A.每个处理器模式自己的物理R14存储在当前子例程的返回地址中。通过BL或BLX指令调用子例程时,R14设置为子例程的返回地址。 B.当发生异常中断时,将异常模式下的R14设置为保存该模式的基于PC的返回地址。对于某些异常模式,R14的值与要返回的地址可能具有恒定的偏移量,这是不同的。模式偏移量也不同(在ARM异常处理中详细说明)。 3.对于用户,程序计数器R15应避免使用STR / STM指令保存R15的值。将地址值成功写入R15后,程序将跳转到该地址以执行。在ARM状态下,指令始终是字对齐的,因此PC的PC [1:0]位始终为零。当您希望PC写入地址时,必须注意将PC [1:0]设置为零。 ARM使用三阶段流水线结构,因此PC指向当前正在执行的指令的下两个指令,而PC-8是当前的指令地址。 4.可以在任何处理器模式下访问程序状态寄存器CPSR(当前程序状态寄存器)。同时,除了用户和系统模式外,每个处理器模式都有一个专用的物理状态寄存器,称为SPSR(备份程序状态寄存器)。当发生特定的异常中断时,该寄存器用于存储当前程序状态寄存器的内容。在用户模式和系统模式下访问SPSR时,将产生不可预测的结果。 CPSR和SPSR的格式相同,如下所示:0:M01:M12:M23:M34:M45:T(= 1拇指执行)6:F(禁止= 1)7:I(禁止= 1)注意:M0〜并非M4的所有组合都定义有效的处理模式。如果设置不正确,将导致意外错误。 27:Q在ARM V5的E系列处理器中,CPSR的位[27]被称为q标志,该标志主要用于指示增强的dsp指令是否溢出。同一spsr的位[27]也称为q标志,用于在发生异常中断时在CPSR中保存和恢复Q标志。在早期版本的ARM V5和ARM V5的非E系列处理器中,未定义Q标志。 28:V对于加减法指令,当操作数和运算结果为二进制补码表示的有符号数时,V = 1表示符号溢出;通常其他指令不会影响V位。对于其他说明,V系统通常不会更改。 29:C在以下四种情况下讨论C的设置方法:在加法指令(包括比较指令CMN)中,当结果产生一个进位时,C = 1,这意味着无符号操作溢出;在其他情况下,C = 0。在减法指令(包括减法指令CMP)中,当在运算过程中发生借位时,C = 0,这意味着无符号操作数已经下溢;在其他情况下,C = 1。对于包括移位操作的非加减法指令,C包含移出的最后一位的值。对于其他非加减法指令,通常不影响C位的值。 30:Z z =" 1表示...的结果