注意
*1.ARM总共有37个寄存器,但是每种模式下最多只能看到18个寄存器,在所有的寄存器中,有些是各模式共用同一个寄存器,有些寄存器是各个模式自己拥有独立的寄存器。
2.例如对r14这个名字来说,在ARM 中共有6个名叫r14(又叫SP)的寄存器,但是在每种特定处理器模式下,只有一个r14是当前可见的(也就是说每种模式下有一个专属于这个模式的r14),其他的r14 必须切换到其它的对应模式下才能看到,这种设计叫影子寄存器(banked register)。
3.ARM共有37个寄存器,都是32位长度,其中30个为通用的,1个固定用作PC,1个固定用作CPSR,5个固定用作五种异常模式下的SPSR。
arm各个寄存器的作用和功能可以参考这个博客https://blog.csdn.net/XiaoXiaoPengBo/article/details/78693811
ARM各个模式的寄存器如图:
PC:Program Counter,是通用寄存器,但是有特殊用途,用来指向当前运行指令的下一条指令。
SP:Stack Pointer,堆栈指针,也是通用寄存器,用于入栈和出栈操作。
对于ARM7而言,是三级流水线结构,一条指令为4个字节大小,一条指令包含三个过程:Fetch(取指)、Decode(译指)、Execute(执行)。
CPU运行地址 = 当前PC值 = 当前程序执行位置 + 8;
对于ARM7而言,PC为R15,SP为R13。
PC不是指向正在执行的指令,而是始终指向下一个取指的指令。对于ARM7三级流水先结构和指令的三个过程,所以PC = 当前程序执行位置 + 8
中断向量:中断的地址的变量;
中断向量表:中断类型号与相应中断源的中断处理程序入口地址之间的连接表;
中断服务程序:中断时所执行的中断代码
*定义的就是中断服务程序的跳转指令,因为每个中断向量在向量表中只有很少字节的存储空间,所以通常存放跳转指令,使程序跳转到存储器的其他地方,再执行中断处理。这里cpu就可以找中断服务程序
当CPU产生了中断 ,CPU会先判断产生了什么类型的中断 然后就会去往 中断向量表的对应中断类型的地址中 查找接下来要进行的中断指令 然后跳转到存储该类型中断服务函数的地址 执行
ARM中断向量表和响应更加深入的内容可以参考这篇博客:https://blog.csdn.net/honour2sword/article/details/40213417
<--这就是ARM的中断向量表图示 左侧为地址(因为ARM是32位所以是4字节对齐)
例如:若发生了普通中断 ,PC指针会去到中断向量表的 IRQ地址处, 然后跳转到 IRQ对应的存储器的某个存放中断服务函数的地址 然后执行中断服务函数