第4节ARM体系结构与ARM指令简介_第1页
第4节ARM体系结构与ARM指令简介_第2页
第4节ARM体系结构与ARM指令简介_第3页
第4节ARM体系结构与ARM指令简介_第4页
第4节ARM体系结构与ARM指令简介_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统嵌入式系统第四节第四节 ARMARM体系结构与体系结构与ARMARM指令简介指令简介小节提要ARM体系结构体系结构ARM 异常处理异常处理ARM (IP核)体系结构l32 2 737l32位架构l2种工作状态l7种工作模式l37个32位的寄存器处理器工作模式处理器工作模式(2)(2)l特权模式处理器模式说明备注 用户 (usr)正常程序工作模式不能直接切换到其它模式 系统 (sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断 (irq)用于通用中断处理IRQ异常响应时进入

2、此模式 管理 (svc)操作系统保护代码系统复位和软件中断响应时进入此模式 中止 (abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 (und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式 除用户模式外,其它模式均为特权模式。ARM内部部分寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。 未定义未定义 (und) 中止中止 (abt) 管理管理 (svc) 中断中断 (irq) 快中断快中断 (fiq) 系统系统 (sys)处理器工作模式处理器工作模式(3

3、)(3)l用户和系统模式处理器模式说明备注 用户 (usr)正常程序工作模式不能直接切换到其它模式 系统 (sys)用于支持操作系统的特权任务等与用户模式类似,但具有可以直接切换到其它模式等特权 快中断 (fiq)支持高速数据传输及通道处理FIQ异常响应时进入此模式 中断 (irq)用于通用中断处理IRQ异常响应时进入此模式 管理 (svc)操作系统保护代码系统复位和软件中断响应时进入此模式 中止 (abt)用于支持虚拟内存和/或存储器保护在ARM7TDMI没有大用处 未定义 (und)支持硬件协处理器的软件仿真未定义指令异常响应时进入此模式 这两种模式使用完全相同的寄存器组。 系统模式是特权

4、模式,不受用户模式的限制。操作系统在该模式下访问用户模式的寄存器就比较方便,而且操作系统的一些特权任务可以使用这个模式访问一些受控的资源。 系统系统 (sys) 用户用户 (usr)ARM的寄存器个数ARM寄存器 R0(a1)R1(a2)R2(a3)R3(a4)R4(v1)R5(v2)R6(v3)R7(v4)R8(v5)R9(SB,v6)R10(SL,v7)R11(FP,v8)R12(IP)R13(SP)R14(LR)R15(PC)R16(CPSR)单片机89C51寄存器R0R1R2R3R4R5R6R7PC SPPSW寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义

5、中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiq *R9(SB,v6)R9R9_fiq *R10(SL,v7)R10R10_fiq *R11(FP,v8)R11R11_fiq *R12(IP)R12R12_fiq *R13(SP)R13R13_svc*R13_abt *R13_und *R13_irq *R13_fiq *R14(LR)R14R14_svc *R14_abt *R14_und *R14_irq *R14_fiq *R15(PC)R15状态寄

6、存器R16(CPSR)CPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM状态各模式下的寄存器寄存器类别 寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13

7、_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM状态各模式下的寄存器SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_abtCPSRR15R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fi

8、qR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0所有的37个寄存器,分成两大类:31个通用32位寄存器;6个状态寄存器。寄存器类别 寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0R0R1R1R2R2R3R3R4R4R5R5R6R6R7R7R8R8R8_fiqR9R9R9_fiqR10R10R10_fiqR11R11R11_fiqR12R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_ir

9、qR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq无无CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用户无无CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系统SPSR_abtCPSRR15R14_svcR13_svcR12R11R10R9R8R7R6R5R4R3R2R1R0管理SPSR_abtCPSRR15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中止SPSR_undCPSR

10、R15R14_undR13_undR12R11R10R9R8R7R6R5R4R3R2R1R0未定义SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中断SPSR_fiqCPSRR15R14_fiqR13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中断ARM状态各模式下可以访问的寄存器寄存器类别 寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)

11、R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R13_fiqR13_irqR13_un

12、dR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0 在汇编语言中寄存器R0R1为保存数据或地址值的通用寄存器。它们是完全通用的寄存器,不会被体系结构作为特殊用途,并且可用于任何使用通用寄存器的指令。寄存器类别 寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9

13、_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fi

14、qR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0 其中R0R7为未分组的寄存器,也就是说对于任何处理器模式,这些寄存器都对应于相同的32位物理寄存器。寄存器类别 寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fi

15、qR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8 寄存器R8R14为分

16、组寄存器。它们所对应的物理寄存器取决于当前的处理器模式,几乎所有允许使用通用寄存器的指令都允许使用分组寄存器寄存器类别 寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR

17、13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用寄存器R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8 寄存器R8R12有两个分组的物理寄存器。一个用于除FIQ模式之外的所有寄存器模式,另一个用于FIQ模式。这样在发生FIQ中断后,可以加速FIQ的处理速度。寄存器类别 寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器

18、和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_und

19、SPSR_irqSPSR_fiq一般的通用寄存器 寄存器R13、R14分别有6个分组的物理寄存器。一个用于用户和系统模式,其余5个分别用于5种异常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13寄存器类别 寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_f

20、iqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq堆栈指针寄存器R13(SP) 寄存器R13常作为堆栈指针(SP)。寄存器类别 寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和

21、程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undS

22、PSR_irqSPSR_fiq链接寄存器R14(LR) R14为链接寄存器(LR),在结构上有两个特殊功能:在每种模式下,模式自身的R14版本用于保存子程序返回地址;当发生异常时,将R14对应的异常模式版本设置为异常返回地址。Lable程序A程序BR14内部寄存器内部寄存器lR14(LR)寄存器与子程序调用BL Lable地址A?MOV PC,LRR14(地址A)1.程序A执行过程中调用程序B;操作流程2.程序跳转至标号Lable,执行程序B。同时硬件将“BL Lable”指令的下一条指令所在地址存入R14(LR);3.程序B执行最后,将R14寄存器的内容放入PC,返回程序A;内部寄存器内部寄

23、存器lR14寄存器注意要点R14R14_irq用户模式下的程序IRQ模式下的程序AareturnB.XA地址1地址11.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被用到;3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;R14_irq内部寄存器内部寄存器lR14寄存器注意要点 当发生异常嵌套时,这些异常之间可能会发生冲突。当发生异常嵌套时,这些异常之间可能会发生冲突。例如:如果用户在用户模式下执行程序时发生了例如:如果用户在用户模式下执行程序时发生了IRQIRQ中

24、中断,用户模式寄存器不会被破坏。但是如果允许在断,用户模式寄存器不会被破坏。但是如果允许在IRQIRQ模式下的中断处理程序重新使能模式下的中断处理程序重新使能IRQIRQ中断,并且发生了中断,并且发生了嵌套的嵌套的IRQIRQ中断时,外部中断处理程序保存在中断时,外部中断处理程序保存在R14_irqR14_irq中中的任何值都将被嵌套中断的返回地址所覆盖。的任何值都将被嵌套中断的返回地址所覆盖。内部寄存器内部寄存器lR14寄存器注意要点R14R14_irq用户模式下的程序IRQ模式下的程序AareturnB.XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ

25、模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;未被破坏R14_irq内部寄存器内部寄存器lR14寄存器注意要点R14R14_irq用户模式下的程序IRQ模式下的程序AaB.XA地址A地址A1.执行用户模式下的程序;2.发生IRQ中断,硬件将某个地址存入IRQ模式下的R14_irq寄存器,用户模式下的R14没有被破坏;3. IRQ服务程序A执行完毕,将R14_irq寄存器的内容减去某个常量后存入PC,返回之前被中断的程序;未被破坏IRQ模式下的程序BareturnB.XA地址B

26、地址B4. 如果在IRQ处理程序中打开IRQ中断,并且再次发生IRQ中断;5. 硬件将返回地址保存在R14_irq寄存器中,原来保存的返回地址将被覆盖,造成错误;R14_irq 被破坏6. 在程序B返回到程序A,然后在返回到用户模式下被中断的程序时,发生错误,将不能正确返回;returnreturn 解决办法是确保R14的对应版本在发生中断嵌套时不再保存任何有意义的值,如,将R14入栈。寄存器类别 寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6

27、(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序计数器R15(PC) 寄存器R15为程序计数器(PC),它指向正在取指的地址

28、。可以认为它是一个通用寄存器,但是对于它的使用有许多与指令相关的限制或特殊情况。如果R15使用的方式超出了这些限制,那么结果将是不可预测的。内部寄存器内部寄存器l读R15的限制 正常操作时,从R15读取的值是处理器正在取指的地址,即当前正在执行指令的地址加上8个字节(两条ARM指令的长度)。由于ARM指令总是以字为单位,所以R15寄存器的最低两位总是为0。LDR R0,PC?PCPC-4PC-8正在执行正在译码正在取指流水线状态地址程序代码内部寄存器内部寄存器l写R15的限制 正常操作时,写入R15 的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。 内部寄存器内部

29、寄存器l写R15的限制 由于ARM指令以字节为边界,因此写入R15的值最低两位通常为0b00。具体的规则取决于内核结构的版本:在ARM结构V3版及以下版本中,写入R15的值的最低两位被忽略,因此跳转地址由指令的实际目标地址(写入R15的值)和0 xFFFFFFFC相与得到;在ARM结构V4版及以上版本中,写入R15的值的最低两位为0,如果不是,结果将不可预测。 正常操作时,写入R15 的值被当作一个指令地址,程序从这个地址处继续执行(相当于执行一次无条件跳转)。 程序状态寄存器程序状态寄存器 - 1- 1lARM9包含当前程序状态寄存器 (CPSR), 加上5个程序状态保存寄存器SPSR,当异

30、常发生时,用于保存CPSR的状态 l这些寄存器的功能是:u保存ALU当前操作信息u控制允许和禁止中断u设置处理器操作模式寄存器类别寄存器在汇编中的名称各模式下实际访问的寄存器用户系统管理中止未定义中断快中断通用寄存器和程序计数器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13

31、_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15状态寄存器CPSRCPSRSPSR无SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序状态寄存器程序状态寄存器 CPSR 寄存器CPSR为程序状态寄存器,在异常模式中,另外一个寄存器“程序状态保存寄存器(SPSR)”可以被访问。每种异常都有自己的SPSR,在因为异常事件而进入异常时它保存CPSR的当前值,异常退出时可通过它恢复CPSR。程序状态寄存器程序状态寄存器 - 2- 2l 条件位:lN = 1-结果为负,0-结果为正或0l

32、Z = 1-结果为0,0-结果不为0lC =1-进位,0-借位lV =1-结果溢出,0结果没溢出lQ 位:l仅ARMV5TE/J架构支持l指示增强型DSP指令是否溢出lJ 位l仅ARMV5TE/J架构支持lJ = 1: 处理器处于Jazelle状态l中断禁止位:lI = 1: 禁止 IRQ.lF = 1: 禁止 FIQ.lT Bitl仅ARM xT架构支持lT = 0: 处理器处于 ARM 状态lT = 1: 处理器处于 Thumb 状态lMode位(处理器模式位):l0b10000Userl0b10001FIQl0b10010IRQl0b10011Supervisorl0b10111Abor

33、tl0b11011Undefinedl0b11111System2731N Z C V Q2867I F T mode1623 815 54024fsxc U n d e f i n e dJARMARM状态和状态和ThumbThumb状态之间寄存器的关系状态之间寄存器的关系 ThumbThumb状态寄存器与状态寄存器与ARMARM状态寄存器有如下的关系:状态寄存器有如下的关系:ThumbThumb状态状态R0R0R7R7与与ARMARM状态状态R0R0R7R7相同;相同;ThumbThumb状态状态CPSRCPSR和和SPSRSPSR与与ARMARM状态状态CPSRCPSR和和SPSRSPS

34、R相同;相同;ThumbThumb状态状态SPSP映射到映射到ARMARM状态状态R13R13;ThumbThumb状态状态LRLR映射到映射到ARMARM状态状态R14R14;ThumbThumb状态状态PCPC映射到映射到ARMARM状态状态PCPC(R15R15)。)。Thumb状态寄存器在Arm状态寄存器上的映射 R1 R2 R3 R4 R5 T hum b R6 R7 ( C P SR ) ( SP SR ) R1 R2 R3 R4 R5 A R M R6 R7 R8 ( C P SR ) ( SP SR ) R9 R10 R11 R12 R0 R0 状 态 状 态 堆 栈 指 针

35、(SP) 连 接 寄 存 器 (LR) 程 序 计 数 器 (PC) 当 前 程 序 状 态 寄 存 器 被 保 存 程 序 状 态 寄 存 器 堆 栈 指 针 (R13) 连 接 寄 存 器 (R14) 程 序 计 数 器 (R15) 当 前 程 序 状 态 寄 存 器 被 保 存 程 序 状 态 寄 存 器 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R0 堆栈指针(R13) 连接寄存器(R14) 程序计数器(R15) 低寄存器高寄存器ARM体系结构异常ARM 异常处理异常处理ARMARM异常异常 - 1- 1l异常内部或外部中断源产生并引起处理器处理的一

36、个事件,如外部中断或试图执行未定义指令都会引起异常。l异常类型uFIQ uIRQ(Interrupt ReQuest)u未定义指令u预取中止u数据中止u复位u软件中断Software interrupt异常向量表异常向量表地地 址址异异 常常进入模式进入模式0 x0000,00000 x0000,0000复位复位管理模式管理模式0 x0000,00040 x0000,0004未定义指令未定义指令未定义模式未定义模式0 x0000,00080 x0000,0008软件中断软件中断管理模式管理模式0 x0000,000C0 x0000,000C中止(预取指令中止(预取指令)中止模式中止模式0 x0

37、000,00100 x0000,0010中止(数据)中止(数据)中止模式中止模式0 x0000,00140 x0000,0014保留保留保留保留0 x0000,00180 x0000,0018IRQIRQIRQIRQ0 x0000,001C0 x0000,001CFIQFIQFIQFIQ异常优先级异常优先级优先级优先级异异 常常1 1(最高)(最高)复位复位2 2数据中止数据中止3 3FIQFIQ4 4IRQIRQ5 5预取指令中止预取指令中止6 6(最低)(最低)未定义指令、未定义指令、SWISWIVector Table异常处理异常处理l当异常产生时, ARM core:l拷贝 CPSR

38、到 SPSR_l设置适当的 CPSR 位: l改变处理器状态进入 ARM 态l改变处理器模式进入相应的异常模式l设置中断禁止位禁止相应中断 (如需要)l保存返回地址到 LR_l设置 PC 为相应的异常向量l返回时, 异常处理需要:l从 SPSR_恢复CPSRl从LR_恢复PC lNote:这些操作只能在 ARM 态执行.Vector table can be at 0 xFFFF0000 on ARM720T and on ARM9/10 family devicesFIQIRQ(Reserved)Data AbortPrefetch AbortSoftware InterruptUndefi

39、ned InstructionReset0 x1C0 x180 x140 x100 x0C0 x080 x040 x00程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示进入异常过程1. 程序在系统模式下运行用户程序,假定当前处理器状态为Thumb状态、允许IRQ中断;2. 用户程序运行时发生IRQ中断,硬件完成以下动作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?MODTFI. . .N Z C V置位I位(禁止IRQ中断)清零T位(进入ARM状态)设置MOD位,切换处理器模式至IRQ模式将当前PC的值存入IRQ模式的LR寄存器将C

40、PSR寄存器内容存入IRQ模式的SPSR寄存器将跳转地址存入PC,实现跳转IRQ0?1. . .? ? ? ?BackAddrJumpAddrJumpSYS1?0. . .?“?”表示对该位不关心在异常处理结束后,异常处理程序完成以下动作:程序AIRQ服务程序系统模式IRQ模式程序寄存器组图示退出异常过程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?MODTFI. . .N Z C V将SPSR寄存器的值复制回CPSR寄存器;将LR寄存的值减去一个常量后复制到PC寄存器,跳转到被中断的用户程序。IRQ0?1. . .? ? ? ?BackA

41、ddrJumpAddrreturnSYS1?0. . .?SYS1?0. . .? ? ? ?BackAddr-4Jump“?”表示对该位不关心内部寄存器内部寄存器lR14寄存器与异常发生 异常发生时,程序要跳转至异常服务程异常发生时,程序要跳转至异常服务程序,对返回地址的处理与子程序调用类似,序,对返回地址的处理与子程序调用类似,都是由硬件完成的。都是由硬件完成的。区别在于有些异常有一区别在于有些异常有一个小常量的偏移。个小常量的偏移。 快速中断请求快速中断请求(FIQ)(FIQ)适用于对一个突发事件的快速适用于对一个突发事件的快速响应(数据传输和通道处理)保护的需要(这可以加响应(数据传输

42、和通道处理)保护的需要(这可以加速上下文切换的速度)。通过处理器上的速上下文切换的速度)。通过处理器上的FIQFIQ输入引脚,输入引脚,由外部产生由外部产生FIQFIQ异常。异常。 不管异常入口是来自不管异常入口是来自ARMARM状态还是状态还是ThumbThumb状态,状态,FIQFIQ处理程序都会通过执行下面的指令从中断返回:处理程序都会通过执行下面的指令从中断返回:SUBS PC,R14_fiq,#4 在一个特权模式中,可以通过置位在一个特权模式中,可以通过置位CPSRCPSR中的中的F F位位来禁止来禁止FIQFIQ异常。异常。快速中断请求快速中断请求(FIQ)(FIQ)异常及返回异常

43、及返回 中断请求(中断请求(IRQIRQ)异常是一个由)异常是一个由nIRQnIRQ输入端的低输入端的低电平所产生的正常中断(在具体的芯片中,电平所产生的正常中断(在具体的芯片中,nIRQnIRQ由片由片内外设拉低,内外设拉低,nIRQnIRQ是内核的一个信号,对程序员不可是内核的一个信号,对程序员不可见)。见)。IRQIRQ的优先级低于的优先级低于FIQFIQ。对于。对于FIQFIQ序列它是被屏序列它是被屏蔽的。任何时候在一个特权模式下,都可通过置位蔽的。任何时候在一个特权模式下,都可通过置位CPSRCPSR中的中的I I 位来禁止位来禁止IRQIRQ。 不管异常入口是来自不管异常入口是来自

44、ARMARM状态还是状态还是ThumbThumb状态,状态,IRQIRQ处理程序都会通过执行下面的指令从中断返回:处理程序都会通过执行下面的指令从中断返回:SUBS PC,R14_irq,#4中断请求中断请求(IRQ)(IRQ)异常异常 中止意味着对当前存储器的访问不能完成,由中止意味着对当前存储器的访问不能完成,由ABORTABORT输入信号触发(高电平),在存储器访问周输入信号触发(高电平),在存储器访问周期末处理器检查该信号。中止包含两种类型:期末处理器检查该信号。中止包含两种类型:预取中止预取中止 发生在指令预取过程中发生在指令预取过程中数据中止数据中止 发生在对数据访问时发生在对数据

45、访问时中止中止(Abort)(Abort)异常异常 当发生数据中止后,在修复产生中止的原因后,当发生数据中止后,在修复产生中止的原因后,不管处于哪种处理器操作状态,处理程序都必须执不管处于哪种处理器操作状态,处理程序都必须执行下面的返回指令,重试被中止的指令行下面的返回指令,重试被中止的指令 : SUBS PC,R14_abt,#8数据中止异常数据中止异常 当发生预取中止时,当发生预取中止时,ARM9ARM9内核将预取的指令内核将预取的指令标记为无效,但在指令到达流水线的执行阶段时才标记为无效,但在指令到达流水线的执行阶段时才进入异常进入异常(译码)(译码)。如果指令在流水线中因为发生。如果指

46、令在流水线中因为发生分支而没有被执行,中止将不会发生。分支而没有被执行,中止将不会发生。 在处理中止的原因之后,不管处于哪种处理器在处理中止的原因之后,不管处于哪种处理器操作状态,处理程序都会执行下面的指令恢复操作状态,处理程序都会执行下面的指令恢复PCPC和和CPSRCPSR并重试被中止的指令:并重试被中止的指令: SUBS PC,R14_abt,#4预取中止异常预取中止异常流水线技术流水线技术:几个指令可以并行执行流水线技术:几个指令可以并行执行提高了提高了CPUCPU的运行效率的运行效率译码取指执行add译码取指执行sub译码取指执行cmp时间AddSubCmp 使用软件中断使用软件中断

47、(SWI)指令可以进入管理模式,通指令可以进入管理模式,通常用于请求一个特定的操作系统调用。常用于请求一个特定的操作系统调用。SWI处理程处理程序通过执行下面的指令返回:序通过执行下面的指令返回:MOVS PC, R14_svc 这个动作恢复了这个动作恢复了PC并返回到并返回到SWI之后的指令。之后的指令。软件中断软件中断(SWI)(SWI)异常异常SWISWI异常异常SWI 0 x01向量表用户程序用户程序(C/ASM)SWI 处理程序 (ASM)(可选)SWI 处理程序(C)l用户程序调用 SWIlSWI 中断处理程序包含汇编部分和可选用的 C 部分l软件中断指令软件中断指令桶形移位器条件位的产生小节提要ARM 体系结构体系结构ARM指令简介指令简介ARM指令系统简介指令系统简介1.ARM指令系统的重要性指令系统的重要性2.ARM处理器指令的特点ARM指令系统的重要性指令系统的重要性l无操作系统下开发与学习(裸板)l裸机开发-启

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论