再谈cxsf和^的实际运算过程[gliethttp]
文章来源:http://gliethttp.cublog.cn[转载请声明出处]
MSR SPSR_cxsf, r0 LDMFD {R0-R12,LR,PC}^ SPSR_cxsf的模式值自动复制到CPSR,同时r13,r14,spsr三个组内相应量值也被自动指向该模式组内局部量r13,r14,spsr. r13=sp,r14=lr,spsr都自动转换为r0对应模式下的数值,如r0=IRQ模式,当前模式为svc,那么LDMFD {R0-R12,LR,PC}^ 执行完毕之后,r13、r14都是对当前svc寄存器进行运算操作,即:sp的计算结果存放到当前svc模式sp中,lr数据也是存放 到当前svc模式下的lr中,运算完毕之后r13,r14,spsr都会自动指向IRQ模式下的r13,r14,spsr[gliethttp] 因为^里边有PC寄存器操作,所以数据将恢复到当前svc模式下LR中,sp所做的运算结果存放在当前svc模式的sp下, 如果没有PC寄存器,即:LDMFD {R0-R12}^,那么数据都将恢复到sys模式下对应的寄存器中,当然sp所做的运算结果 也存放到相应sys模式sp寄存器下,但是sp初始值确是当前模式下赋予sp的值,当然上边存在非法因素, LDMFD SP, {R0-R14}^,这样sp指向的数据,将全部恢复到sys模式下的r0-r14中,因为没有pc,所以spsr_cxsf不会自动切换 STMDB LR, {R0-LR}^
|