ARM微处理器支撑7种运转形式,分别为:
1. 用户形式(usr):ARM处理器正常的程序履行状况;
2. 快速间断形式(fiq):用于高速数据传输或通道办理;
3. 外部间断形式(irq):用于通用的间断处理;
4. 办理形式(svc):操作系统运用的保护形式;
5. 数据拜访停止形式(abt):当数据或指令预取停止时进入该形式,用于虚拟存储及存储保护;
6. 系统形式(sys):运转具有特权的操作系统使命;
7. 未定义指令间断形式(und):当未定义指令履行时进入该形式,可用于支撑硬件协处理器的软件仿真
ARM系统结构的存储器格局有如下两种:
大端格局:字数据的高字节存储在低地址中,字数据的低字节寄存在高地址中;
小端格局:与大端存储格局相反,高地址寄存数据的高字节,低地址寄存数据的低字节
ARM寄存器总结:
ARM有16个32位的寄存器(r0到r15)。
r15充任程序寄存器PC,r14(link register)存储子程序的回来地址,r13存储的是仓库地址。
ARM有一个当时程序状况寄存器:CPSR。
一些寄存器(r13,r14)在反常产生时会产生新的instances,比方IRQ处理器形式,这时处理器运用r13_irq和r14_irq
ARM的子程序调用是很快的,因为子程序的回来地址不需求寄存在仓库中。
1、ARM处理器共有37个寄存器,其间包含:
i. 31个通用寄存器,包含程序计数器(PC)在内。都是32位寄存器
ii. 6个状况寄存器,都是32位寄存器,但现在只运用了其间12位
2、ARM处理器有7种不同的处理器形式,在每一种处理器形式中有一组相应的寄存器组。恣意时间(也便是恣意的处理器形式下),可见的寄存器包含15个通用寄存器(R0~R14)、一个或两个状况寄存器及程序计数器(PC)。在所有的寄存器中,有些是各形式共用的同一个物理寄存器,有些是各形式自己具有的独立的物理寄存器。
3、 通用寄存器能够分为3类:未备份寄存器(R0~R7)、备份寄存器(R8~R14)和程序计数器PC(R15)。关于每一个未备份寄存器来说,在所有的处理器形式下指的都是同一个物理寄存器。对应备份寄存器R8~R12来说,每个寄存器对应两个不同的物理寄存器,这使得间断处理十分简略。例如,仅仅运用R8~R14寄存器时,FIQ处理程序能够不用履行保存和康复间断现场的指令,然后使间断处理进程十分敏捷。关于备份寄存器R13和R14来说,每个寄存器对应6个不同的物理寄存器,其间的一个是用户形式和系统形式共用的,别的的5个对应于其他5种处理器形式。
4、每一种反常形式具有自己的物理的R13。运用程序初始化该R13,使其指向该反常形式专用的栈地址。当进入反常形式时,能够将需求运用的寄存器保存在R13所指的栈中;当退出反常处理程序时,将保存在R13所指的栈中的寄存器值弹出。这样就使反常处理程序不会损坏被其间断程序的运转现场。
5、寄存器R14又被称为衔接寄存器(Link Register,LR),在ARM系统中具有下面两种特别的效果:
i. 每一种处理器形式自己的物理R14中寄存当时子程序的回来地址。当经过BL或BLX指令调用子程序时,R14被设置成该子程序的回来地址。在子程序中,当把R14的值复制到程序计数器PC中时,子程序即回来。
ii.当反常间断产生时,该反常形式特定的物理R14被设置成该反常形式即将回来的地址,关于有些反常形式,R14的值或许与将回来的地址有一个常数的偏移量。详细的回来方法与子程序回来方法根本相同。
6、因为ARM选用了流水线机制,当正确读取了PC的值时,该值为当时指令地址值加8个字节。也便是说,关于ARM指令集来说,PC指向当时指令的下两条指令的地址,因为ARM指令是字节对齐的,PC值得第0位和第1位总为0。
7、 关于ARM版别3以及更低的版别,写入R15的地址值的bits[1:0]被疏忽,关于ARM版别4以及更高的版别,程序有必要确保写入R15寄存器的地址值的bits[1:0]为0b00;不然会产生不行预知的成果。关于Thumb指令集来说,指令是半字对齐的。处理器将疏忽bit[0]。
还有一些指令关于R15的用法有一些特别的要求。比方,指令BX运用bit[0]来确认是ARM指令,仍是Thumb指令。
8、指令mov pc, pc将程序跳转到当时指令下面第2条指令处履行。相似的指令还有add pc, pc, #0
9、 每一种处理器形式下都有一个专用的物理状况寄存器,称为SPSR(备份程序状况寄存器)。当特定的反常间断产生时,这个寄存器用于寄存当时程序状况寄存器的内容。在反常间断程序退出时,能够用SPSR中保存的值来康复CPSR。
10、 因为用户形式和系统形式不是反常间断形式,所以它们没有SPSR。当在用户形式或系统形式中 拜访SPSR,将会产生不行预知的成果。
—————————————————————————————————–
ARM处理器共有37个寄存器。其间包含:31个通用寄存器,包含程序计数器(PC)在内。这些寄存器都是32位寄存器。以及6个32位状况寄存器。但现在只运用了其间12位。ARM处理器共有7种不同的处理器形式,在每一种处理器形式中有一组相应的寄存器组。恣意时间(也便是恣意的处理器形式下),可见的寄存器包含15个通用寄存器(R0~R14)、一个或两个状况寄存器及程序计数器(PC)。
用户形式 | 系统形式 | 特权形式 | 间断形式 | 未定义指令形式 | 外部间断形式 | 快速间断形式 |
R0 | R0 | R0 | R0 | R0 | R0 | R0 |
R1 | R1 | R1 | R1 | R1 | R1 | R1 |
R2 | R2 | R2 | R2 | R2 | R2 | R2 |
R3 | R3 | R3 | R3 | R3 | R3 | R3 |
R4 | R4 | R4 | R4 | R4 | R4 | R4 |
R5 | R5 | R5 | R5 | R5 | R5 | R5 |
R6 | R6 | R6 | R6 | R6 | R6 | R6 |
R8 | R8 | R8 | R8 | R8 | R8 | R8_fiq |
R9 | R9 | R9 | R9 | R9 | R9 | R9_fiq |
R10 | R10 | R10 | R10 | R10 | R10 | R10_fiq |
R11 | R11 | R11 | R11 | R11 | R11 | R11_fiq |
R12 | R12 | R12 | R12 | R12 | R12 | R12_fiq |
R13 | R13 | R13_svc | R13_abt | R13_und | R13_inq | R13_fiq |
R14 | R14 | R14_svc | R14_abt | R14_und | R14_inq | R14_fiq |
PC | PC | PC | PC | PC | PC | PC |
CPSR | CPSR |
CPSR
SPSR_svc
|
CPSR
SPSR_abt
|
CPSR
SPSR_und
|
CPSR
SPSR_inq
|
CPSR
SPSR_fiq
|
当成功的向R15写入一个数值时,程序将跳转到该地址履行。因为ARM指令是字对齐的,写入R15的值应满意bits[1:0]为0b00,详细要求arm各版别有所不同:
**关于arm3以及更低的版别,写入R15的地址值bits[1:0]被疏忽,即写入r15的地址值将与0xFFFF FFFC做与操作。
**关于ARM4以及更高的版别,程序有必要确保写入R15的地址值bits[1:0]为0b00,不然将产生不行预知的成果。
关于Thumb指令集来说,指令是半字对齐的,处理器将疏忽bit[0]。
CPSR(当时程序状况寄存器)能够在任何处理器形式下被拜访。它包含了条件标志位、间断制止位、当时处理器形式标志以及其他的一些操控和状况位。
31 | 30 | 29 | 28 | 27 | 26 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
N | Z | C | V | Q | DNM(RAZ) | I | F | T | M4 | M3 | M2 | M1 |
M0
|
在little-endian格局中,地址为A的字单元包含字节单元A、A+1、A+2及A+3,其间字节单元由高位到低位字节次序为A+3、A+2、A+1、A;地址为A的字单元包含半字节单元A、A+2,其间半字单元由高位到低位字节次序为A+2、A;地址为A的半字单元包含字节单元A、A+1,其间字节单元由高位到低位字节次序为A+1、A