伪指令:编译器识别的指令。
ldr伪指令 ldr r0,=0x12345678
ldr指令 ldr r0,[r0]
mov r0,r1,asr #4
start:
cmp r0,r1
beq stop
subgt r0,r0,r1
sublt r1,r1,r0
b start
stop:
乘法指令:mul r0,r1,r2 r0 = r1*r2
- mla 乘加
- mull 64位乘法
- mlal 乘加
ldr str
- 加上B byte 8位
- 加上H halfword 16位
- 加上S 带符号的
ldr r0,=0x40008000
ldr r1,[r0]
mov r1,#0x10
str r1,[r0]
ldm stm
- 可以传送多个寄存器到/从内存中
- {r0,r1,r4}
- {r0-r4}
IA 先操作,后增加
IB 先增加,后操作
DA 先操作,后递减
DB 先递减,后操作
r0,r1
mov r2,r0
mov r0,r1
mov r1,r2
swi 可以切换到SVC模式
立即数寻址
寄存器寻址
寄存器移位寻址
寄存器间接寻址 ldr r0,[r1]
基址变址寻址 ldr r0,[r1,#4]
多寄存器寻址 ldm
相对寻址 相对于PC找到对应的位置
堆栈寻址 stmfd
.if
.else
.endif
.macro 宏#define
.endm
.align 4 对齐
.include 包含头文件
bf 向前跳转
bb 向后跳转
ATPCS 规定了函数之间参数传递的规则
4个以内的传参通过r0-r3
以上的参数通过压栈实现
stmfd 满减栈的方式传递参数
asm volatile
("汇编\n\t"
:"输出的单位"(寄存器、变量)
:"输入"(寄存器、变量)
:"memory");
// = 表示只写,缺省表示只读,a 表示读写
* FIQ为什么比IRQ快
- 1.优先级比较高
- 2.拥有独立的寄存器
- 3.位于中断向量表的末尾,可以直接运行中断处理函数
IIC 半双工 8bit 有应答 一个主机对应一个从机
- 时序:
- 开始数据传送:SCL 高电平 SDA 下降沿
- 结束: SCL 高电平 SDA 上升沿