从数据异常返回异常发生在PC被更新之后.需要重新执行导致异常的指令 ARM Thumb www?pc-12 pc-6Dataabortoccurredherexxxpc-8 pc-4yyypc-4 pc-2ARMlr=twoinstructionsaheadzzzpc pcaaapc+4 pc+2Thumblr=fourinstructionsahead因此返回指令为: SUBSpc,lr,#8Note:?表示异常返回后将执行的那条指令从SWI和Undef异常返回 MOVSpc,lr从FIQ,IRQ和预取异常(PrefectAbort)返回 SUBSpc,lr,#4 从数据异常(DataAbort)返回 SUBSpc,lr,#8 如果LR之前被压栈的话使用LDM“^” LDMFDsp!,{pc}^异常返回:使用一数据处理指令:相应的指令取决于什么样的异常在特权模式不仅仅更新PC,而且拷贝SPSR到CPSR设置CPSR,“S”bitPC做为目的寄存器异常返回指令2.6存储方式与存储器映射机制ARM处理器地址空间大小为4G字节,这些字节的单元地址是一个无符号的32位数值,其取值范围为0~232-1。各存储单元地址作为32位无符号数。当程序正常执行时,每执行一条ARM指令,当前指令计数器加4个字节;每执行一条Thumb指令,当前指令计数器加2个字节。ARM处理器对存储器操作的数据单元包括字节(8bit)的存取、半字(16bit)的存取、字(32bit)的存取。2.6.1 数据存储格式小端存储格式(Little-Endian)大端存储格式(Big-Endian)ARM可以用little/bigendian格式存取数据.r0=0STRr0,[r1]LDRBr2,[r1]r1=0x100Memory32100123ByteLane312423161587011223344312423161587011223344312423161587011223344312423161587000000044312423161587000000011LittleendianBigendianR2=0x44R2=0x11字节顺序例2-1:ARM处理器寄存器R0中的数据内容为0xAABBCCDD,将其存放到地址0x10000开始的内存单元中,分别采用小端存储格式和大端存储格式存储,试分析内存地址0x10000字节单元的内容。2.6.2 非对齐存储器地址访问问题分析1.非对齐的指令预取操作如果是在ARM状态下将一个非对齐地址写入PC,则数据在写入PC时数据的第0位和第1位被忽略,最终PC的bit[1:0]为0;如果是在Thumb状态下将一个非对齐地址写入PC,则数据在写入PC时数据的第0位被忽略,最终PC的bit[0]为0。2.非对齐地址内存的访问操作?对于LOAD/STORE操作,系统定义了下面3种可能的结果:???*执行结果不可预知???*忽略字单元地址低两位的值,即访问地址为字单元;忽略半字单元最低位的值,即访问地址为半字单元。这种忽略是由存储系统自动实现的。*在LDR和SWP指令中,对存储器访问忽略造成地址不对齐的低地址位,然后使用这些低地址位控制装载数据的循环。2.7ARM流水线技术分析(自学)ARM7流水线技术与三级流水线运行情况分析ARM9流水线技术与五级流水线互锁分析ARM7流水线技术为增加处理器指令流的速度,ARM7系列使用3级流水线.允许多个操作同时处理,比逐条指令执行要快。PC指向正被取指的指令,而非正在执行的指令FetchDecodeExecute从存储器中读取指令解码指令寄存器读(从寄存器Bank)移位及ALU操作寄存器写(到寄存器Bank)PC PCPC-4 PC-2PC-