目录
Arm汇编寻址方式
8种寻址方式:
- 寄存器寻址 mov r0, r1
- 立即数寻址 mov r0, #0xff
- 寄存器移位寻址 mov r0, r1, lsl #3
- 寄存器间接寻址 ldr r1, [r2]
- 基址变址寻址 ldr r1, [r2, #4]
- 多寄存器寻址 ldmia r1!, {r0-r7, r12}
- 堆栈寻址 ldmfd sp!, {r0-r12, pc}^
- 相对寻址(全局符号) b label
立即数注意事项:
- <immediate>=immed_8循环右移(2*rotate_imm)
immediate : 立即数
immed_8 : 8位的常数
rotate_imm : 4位的循环右移值
- 每个立即数都是由一个8位的常循环右移偶数位得到
- 有效立即数: 小于0xff 或 通过 小于0xff常循环右移偶数位 得到的数
0x83; 0b10000011 是一个8位数
0x20c 0b1000001100 可由0x83右移30位获得
- 无效立即数:
例:10 1000 0010b --- 最高与最低的1相差 9
Arm处理器工作模式
- User:用户模式
- FIQ:(fast interrupt request)快速中断请求模式
- IRQ:(interrupt request)中断请求模式
- SVC:(supervisor)管理模式,当复位或软中断时进入这种模式
- Abort:中止模式,取址异常时进入这种模式
- Undef:未定义模式,执行未定义指令进入这种模式
- System:系统模式,使用和User相同寄存器集的特权模式
异常返回
IRQ中断的返回
sub lr,lr,#4
stmfd sp!,{r0-r12,lr}
bl irq_handler
ldmfd sp!,{r0-r12,pc}^