ARM处理器的作业状况:ARM处理器有两种作业状况。在程序的履行进程中,处理器能够在两种作业状况之间切换,而且不影响
相应寄存器中的内容。
ARM状况,此刻处理器履行32位对齐的ARM指令;BX指令,当操作数寄存器最低位为0时,进入ARM状况。
Thumb,此刻处理器履行16位对齐的Thumb指令。BX指令,当操作数寄存器最低位为1时,进入Thumb状况。
BX(Branch Exchange):BX Rn; ##其间Rn能够是R0-R15中的恣意一个。指令经过将寄存器Rn的内容拷贝到程序计数器PC
来完结4Gbyte的地址空间的跳转。
在进入反常间断后,ARM内核会主动切换到ARM状况,所以在反常间断处理程序进口的是ARM指令,假如需求切换到Thumb状况
必须在反常间断回来前,切换到ARM作业状况。当处理器在Thumb状况下发生反常时,回来后,主动切换到Thumb状况。
ARM处理器总是从ARM作业状况开端的。
ARM处理器的7中作业形式:
USE形式:正常用户形式。
FIQ形式:快速间断形式,支撑高速数据传输。
IRQ形式:一般间断形式。
SVC形式:Supervisor形式,操作体系维护形式,处理软件间断swi,reset.
ABT形式:数据,指令间断形式。
UND形式:未定义形式,支撑软件仿真。
SYS形式:体系形式,运转特权操作体系使命。
除用户形式之外的6中形式称为特权形式,特权形式下,程序能够拜访一切的体系资源,能够恣意的进行处理器形式的切换。
用户形式下不能拜访一些受操作体系维护的体系资源,不能直接进行处理器形式切换,需求由应用程序发生反常处理。
特权形式中,除体系形式之外的5种形式称为反常形式。
FIQ要比IRQ的呼应快许多,首要FIQ的优先级比较高,再次ARM的FIQ会有自己更多的寄存器,由ARM主动保存。
反常处理进程:将下一条指令存入LR寄存器,CPSR赋值到SPSR,强制设置CPSR运转位,跳转到反常处理函数。
回来:将LR中的值减相应的偏移量送到PC中,将SPSR的值到CPSR中。
反常向量表:0x0_0复位Reset,进入SVC形式。
0x0_4未定义指令,进入UND形式。
0x0_8软件间断,进入SVC形式。
0x0_C间断指令,进入ABT形式。
0x0_0010间断数据,进入ABT形式。
0x0_0014保存
0x0_0018IRQ间断,进入IRQ形式。
0x0_001CFIQ间断,进入FIQ形式。
ARM处理器中一共有37个寄存器。别离有31个通用寄存器:R0-R15, R13_svc, R14_svc, R13_abt, R14_abt, R13_und,
R14_und, R13_irq, R14_irq, R8_frq-R14_frq。
6个状况寄存器:CPSR, SPSR_svc, SPSR_abt, SPSR_und, SPSR_irq, SPSR_fiq。
R13一般用作仓库指针。R14一般用作子程序衔接。
CPSR当时程序状况寄存器。SPSR备份程序状况寄存器。
31–28:NZCV(Negative Zero Carry Overflow)
278:Reserve
7-5:IFT(IRQ disable FIQ disable State bit)
4-0:Mode bits
0b10用户形式,0b11FIQ形式,0b10010IRQ形式,0b10011SVC形式,0b10ABT形式,
0b11011UND形式,0b11SYS形式。
question:为什么会依据Rn的最低位来切换状况呢,最低位是1表明8位对齐而不是16位啊。莫非arm自身是16位地址对齐??