1.load/store CPU从存储器load数据/指令到寄存器,再处理,没有直接处理在存储器中数据的指令;
2.The sign extend hardware:例如根据符号扩展到32位,一般前面:负数补1,正数补0;
3.load/store指令集用ALU产生地址,然后放到地址寄存器中,然后放到地址总线;
===
1.16个数据寄存器r0-r15: r0-13是orthogonal—any的,就是其中一个能胜任的,其他的也可以充当,
但r14, r15比较特殊,一个叫link register,保存函数调用返回地址,用它是不明智的,另一个是pc,
即program counter,不用说了;
2.2个程序状态寄存器:cpsr, spsr (current/saved program status register);
3.7种模式(abort, fast interrupt request, interrupt request, supervisor, system, and undefined),除了用户模式外,其余均为特权模式,可以修改cpsr的模式位切换当前模式。除用户/系统模式外,其余均为异常模式,都有自己的spsr。
4.特权模式可以full读写cpsr,非特权模式只读(但可以读写condition flags), 系统模式是一个特殊的用户模式,它允许对cpsr的full读写权限。
5.spsr只存在异常模式下,在用户/系统模式下没有spsr.
===
每个处理器模式(除了用户模式)可以通过直接写cpsr的mode bits来改变模式。除了系统模式,其余都有那16个寄存器的子集组成,一个banked(分组的)寄存器一对一地maps到一个用户模式的寄存器。如果你更改了模式,新模式的banked寄存器将替代那16个中的一个,被替代指:只是在当前模式用新的寄存器,而其余模式或者说被替代的模式不受影响,如上图。
举个例子,当处理器处于中断请求模式,你执行的指令中仍然有访问r13和r14的,其实就是指r13_irq,r14_irq了。而且用户模式的r13_usr, r14_usr不受影响,其他寄存器r0-r12应该是一致的。
注意:当通过直接写cpsr强制切换一个模式时,cpsr不会被拷贝到spsr,保存cpsr只出现在一个异常或者一个中断发生时。
===
arm状态和thumb状态
===
cpsr
===
中断(即使中断发生,但在执行中的指令不会停掉,会执行完)
阅读(684) | 评论(0) | 转发(0) |