- 1
- 0
- 约1.21万字
- 约 23页
- 2017-06-05 发布于湖北
- 举报
各种异常地址相对应的址ARM异常向量表P66Reset:0x0Und:0x4Swi:0x8Abt(指令预取):0xcAbt(dA):0x10Irq:0x18Fiq:0x1c高端地址:0xffff0000合法立即数是怎么组成的一、立即数指令码的组成ARM公司将32bit指令码分为如下两部分:指令编码部分(20bit)立即数部分(12bit)D31——D12D11——D0?D11——D8D7——D0?ROR值Imm8值32bit立即数通过Imm8值循环右移ROR值*2bit得到。即:shifter_operand = immed_8 Rotate_Right (rotate_imm * 2)。二、如何判断一个数是否是合法立即数?首先将这个数转换为32bit16进制形式,例如218=0xDA=0x000000DA除零外,仅有一位数为合法立即数。除零外,仅有二位数,并且相邻(包括首尾,如0x1000000A)的为合法立即数。除零外,仅有三位数,并且相邻(包括中间有0相间,例如0包括首尾相邻,如:0,这三位数中,最高位取值仅能为1、2、3,最低位取值仅能为4、8、C,中间位0x0~0xF。这种组合的为合法立即数。除了以上三种,其他基本是非法立即数。三、非法立即数如何输入?利用LDR伪指令可将任意32bit的立即数赋给寄存器。格式:LDR RD,=#Imm32编译时,编译器会优先使用MOV或者MVN指令来加载立即数,以便提高代码运行效率,如不行,则一般编译成如下形式:LDR RD,[PC,#offset]....PC+OFFSET:.word Imm321.如十六进制数在0x00到0xFF之间,则它一定是合法的1.若十六进制数0XFF则将十六进制的数转化成十进制2.如果这个十进制数能够被4整除则这个十六进制的立即数和合法的,否则是非法的3例如:0x101=257/4=64.25 非法 0x104=260/4=65 合法Arm指令特权模式(2-7),异常模式(2-7除掉5)ARM有七种工作方式:1、用户模式(usr):正常的程序执行状态2、快速中断模式(fiq):3、中断模式(irq):4、管理模式(svc):操作系统使用的保护模式5、系统模式(sys):运行具有特权的操作系统任务6、数据访问终止模式(abt):数据或指令预取终止时进入该模式7、未定义指令终止模式(und):未定义的指令执行时进入该模式可以通过软件来进行模式切换,或者发生各类中断、异常时CPU自动进入相应的模式。除用户模式外,其余6种工作模式都属于特权模式。特权模式中除了系统模式以外的其余5种模式称为异常模式。大多数程序运行于用户模式。进入特权模式是为了处理中断、异常、或者访问被保护的系统资源。未定义指令终止摸式:虚拟存储和存储保护系统模式:主要运行操作系统数据访问终止模式:用来支持用软件仿真硬件协处理器除用户模式外均是特权模式,特权模式之间模式可以任意切换,访问全局资源,但是由用户进入到特权模式需异常中断;这6种模式中,除了系统模式,其余的又是异常模式,当相应程序发生异常时就进入相应的模式,每种模式有自己的堆栈和寄存器。系统模式即不是通过异常进入的,但是也可以进行全局的数据访问;和用户是一样的寄存器;也是特权模式的一种;同时也可以切换模式,异常向量表:共8*4大小的空间,共七种异常向量源,除上面4种异常模式外,增加了复位项,同时增加了指令预取异常和软中断0x00复位0x04指令未定义0x0b软中断0x0c指令预取异常0x10数据异常0x14保留0x18IRQ0x1cFIQ各种异常返回的指令eg subs pc,lr_irq,#4ResetUndSwiPabtDabtIrqfiq掌握各种异常下相应的工作模式一、ARM体系的CPU有以下7种工作模式:1、用户模式(usr):正常的程序执行状态2、快速中断模式(fiq):3、中断模式(irq):4、管理模式(svc):操作系统使用的保护模式5、系统模式(sys):运行具有特权的操作系统任务6、数据访问终止模式(abt):数据或指令预取终止时进入该模式7、未定义指令终止模式(und):未定义的指令执行时进入该模式注解:可以通过软件来进行模式切换,或者发生各类中断、异常时CPU自动进入相应的模式;除用户模式外,其余6种工作模式都属于特权模式;特权模式中除了系统模式以外的其余5种模式称为异常模式;大多数程序运行于用户模式;进入特权模式是为了处理中断、异常、或者访问被保护的系统资源;二、ARM体系的CPU有两种工作状态1、ARM2、THumbCPU上电处于ARM状态三、寄存器ARM有31个通用的32位寄存器,6个程序状态寄存器,共分为7组,有些寄存器是所有工作模式共用的,还有
原创力文档

文档评论(0)