本文仅限嵌入式系统备考知识整理,如有疏忽欢迎留言😂希望大家都可以取得好成绩。
ARM 体系和指令集
ARM体系结构
- ARM处理器 支持16/32双指令集
- 处理器7种工作模式(用户 系统 快中断(FIQ) 中断(IRQ) 管理 中止 未定义)
- 寄存器(31个通用寄存器(R0-R7 R8-R12(FIQ) R13(堆栈+5异常) R14(链接+5异常)) R15(PC),6个状态寄存器)
- R14使用:子程序调用,程序地址写入R14,跳转执行,返回转到R14所在指令的下一条执行
- R15的使用:最低两位为0
- ARM 指令集32位
- Thumb 扩充的16位指令集
- DSP 扩充的算术运算指令集
- v1(基本数据处理+软中断) -> v2(协处理器+线程同步) -> v3(32位寻址+64位乘法器) -> v4(半字load+store) -> v5(ARM+Thumb)
- 流水线:ARM7(取指 译码 执行) -> ARM9(+访存 写结果)…
- 内存:Cache+紧耦合器实现可预测实时响应
- 存储:无保护 / MPU(区域性的访问权限控制) / MMU(虚拟->物理+访问权限控制)
- 存储器模式:大端 / 小端
- 协处理器:辅助处理器 扩展指令 译码阶段确定
- 两个特例:
- LDR互锁(写后读,载数延迟?)解决方法:指令编排
- LDM互锁:多等一拍
- 异常处理:同步异常(内部事件) 异步异常(外部信号)
- 中断 陷井 故障 中止
- CPSR -> SPSR 设置CPSR(禁止新中断IRQ/FIQ) 保存地址(LR) 设置PC异常向量
- 返回:SPSR -> CPSR 恢复PC(LR) 恢复中断
- 中断(软中断 硬中断)
- 软中断 用R14_svc恢复PC
- 中止(存储器访问异常)
- 最后都必须重试中止指令 恢复PC到R14_abt - 8
- 数据终止 指令相关 恢复基址(LDR)或者取消所有执行(SWP)
- 预取终止 恢复PC CPSR
- 其他自定义异常
- 用MOVS R14_svc恢复PC CPSR
ARM 指令集整理(60分✊✊✊)
- 指令长度 16/32
- load-store结构
- 数据处理 数据传送 控制 中断 状态寄存器 协处理器
- 数据处理指令:
- 运算指令:ADD ADC SUB SBC MUL MLA(mul+add)
- 按位逻辑:AND ORR EOR BIC
- 寄存器移动:MOV MOVEQ MOVGT
- 桶形移位器:LSL LSR
- 比较指令:CMP GT LS
- 条件码 N(neg)Z(zero)V(overflow)C(less than?)
- 数据传送指令:
- 单数据传送 LDR STR
- 多数据传送指令 LDM(tgt地址的数据到src的寄存器) STM(src寄存器的数据到tgt的地址): cmd{IA IB DA DB} tgt{!}, {op1, op2…}
- 堆栈操作传送指令 LDM/STM + {FA FD EA ED}
- 数据交换 SWP{cond} ex1, ex2, [address] # [address] -> ex1; ex2->[address]
- SWI
- 控制和分支指令:
- B BEQ BNE BLT BGT
- 状态寄存器访问指令:
- MRS tgt, <psr(CPSR/SPSR)> / MSR <psr[_fields]>, src
- 协处理器指令:
- 16个协处理器
- 别看这个了 没有奇迹了
- 伪指令:
- 遇到这种就写 #define…🐶