ARM指令集
1 数据类型
ARM支持6种数据类型,指令全是32位的字,且必须时字对准的。
8位有符号和无符号字节;
16位有符号和无符号字,以2字节的边界对准;
32位有符号和无符号字,以4字节的边界对准;
2 异常
1)异常分类
指令执行引起的直接异常,包括软件中的,未定义指令和预取指令中止等
指令执行引起的间接异常,包括数据中止(ld/st异常)等
外部产生的与指令流无关的异常,包括复位,irq,fiq等
2)异常处理
-进入与特定的异常相应的操作模式
-将引起异常指令的下一条指令的地址保存到新模式的r14中
-将CPSR的原值保存到新模式的SPSR中
-通过设置CPSR的第7位禁止IRQ,如果异常为FIQ,设置第6位禁止
-给PC强制赋值,使程序从相应的向量地址开始执行;
CPSR current program status register 当前程序状态寄存器
SPSR saved program status register 程序状态保存寄存器,SPSR用于保存CPSR的状态,以便异常返回后恢复异常发生时的工作状态。
3)异常返回
-所有修改过的用户寄存器必须从处理程序的堆栈中恢复;
-CPSR必须从相应的SPSR中恢复;
-PC必须便会到在用户指令流中相应的指令地址;
第23步需要在一条指令中同时完成;
区分返回地址保存至r14和返回地址保持在堆栈两种场景
4)异常优先级
从高到低依次
-复位,最高优先级
-数据异常中止
-FIQ
-IRQ
-预取指令异常中止
-SWI/未定义指令
3 条件执行
4 软件中断swi指令
-将SWI后面指令的地址保存到r14_svc
-将CPSR保存到SPSR_svc
-进入监控模式,将CPSR[4:0]设置位10011,将CPSR[7]设置位1,禁止IRQ
-将PC设置位0x08,并开始执行;
为了返回SWI后的指令,系统的程序必须将r14_svc拷贝到PC,并由SPSR_svc
恢复CPSR。