ARM
ARM支持的数据格式:
- byte:8bit char
- hw:16bit short
- word:32bit int
- dw:64bit long long
* ARM(32bit) thumb(16bit)
* ARM处理器工作模式:
- user:唯一的非特权模式,只能操作普通的寄存器
- system:特权模式,使用和user一样的寄存器,PC
- FIQ:快速中断
- IRQ:普通中断
- SVC(Supervisor):复位,软中断进入的模式
- abort:取指(到内存中取到指令)异常
- undef:指令未定义时会进入这个模式
- monitor:监控
* 除了system和user的模式都叫做异常模式
* r13 sp 堆栈指针(备份普通寄存器内容)
- r14 lr 链接寄存器(备份PC)
- r15 pc 程序计数器(指向下一条执行的指令)
一个函数的跳转:
- 将pc备份到lr
- 压栈,保存栈指针到sp
- 执行新的函数
- 执行完毕
- 从栈里恢复数据到寄存器
- 将lr恢复到pc
ARM核里有37个寄存器
- system+user公用17个寄存器
- FIQ独立:r8 - r14 SPSR(用来备份cpsr) 8个
- IRQ独立的:r13、 r14、 spsr
- SVC独立的:r13、 r14、 spsr
- undef独立的:r13、 r14、 spsr
- abort独立的:r13、 r14、 spsr
cpsr
- 31 n位 负数位
- 30 z 0
- 29 c 进位位
- 28 v 溢出
- 24 j thumbee java字节码
- 19-16 GE 大于或者等于
- 15-10 if then
- 9 e 大小端
- 7 i 禁止IRQ
- 6 f 禁止FIQ
- 5 T 进入thumb状态
* 异常处理:4大步3小步
- 1.拷贝cpsr到指定模式的spsr
- 2.设置cpsr
- a.改变状态为ARM状态
- b.改变处理器模式
- c.根据需要禁止中断
- 3.保存pc到指定模式的lr
- 4.设置pc为响应异常
从异常返回:
- 从spsr恢复到cpsr
- 从lr恢复到pc
B指令 简单的跳转 范围+—32M
BL带链接的跳转指令
- 跳转之前将pc保存到lr 跳转之后将lr恢复到pc
网友评论