在嵌入式开发以及freeRTOS操作系统的开发过程中,离不开一些常用的汇编指令,或许有人说,都什么年代了,还有人用汇编,其实我想说的是,学习一些常用的汇编指令还是有必要的,那接下来我们就看一下一些常见的汇编指令的。
汇编指令最典型的格式如下:
标号
操作码 操作数1, 操作数2, … ;注释。
其中,标号是可以没有的,如果有,它必须顶格写。;后面表示注释
1、LDR读内存指令
LDR R0, [R1, #4] ;读地址"R1+4",得到四个字节数据存入R0
LDR R0, =NVIC_IRQ_SETEN0 ;在这里的LDR是个伪指令,相当于R0=NVIC_IRQ_SETEN0
此外还有LDRB:读1个字节;LDRH:读两个字节等。
2、STR写内存指令
STR R0, [R1, #4] ;把R0的4字节数据写入地址"R1+4"
同样,也有STRB:写一个字节;STRH:写两个字节。
3、ADD、SUB加减指令
ADD R0, R1, R2 ;R0=R1+R2
ADD R0, R0, #1 ;R0=R0+1
SUB R0, R1, R2 ;R0=R1-R2
SUB R0, R0, #1 ;R0=R0-1
4、CMP比较指令
CMP R0, R1 ;结果保存在PSR寄存器中(程序状态寄存器)
5、B、BL跳转指令
B main ;直接跳转
BL main ;先把返回地址保存在LR寄存器里再跳转
5、STMDB装载指令
STMDB R0!, {R4-R11} ;将R11的地址储存到R0-4所指向的地址的数据中,将R10的地址储存到R0所指向的地址-8的数据中...,4个字节,并将最终的地址保存到R0中
!感叹号表示将最后的地址写回R0中
6、LDMIA储存指令
LDMIA R0!, {R4-R11} ;将R0所指向的地址的数据储存到R4的地址中,将R0所指向的地址+4的数据储存到R5的地址中...并将最终的地址保存到R0中
!感叹号表示将最后的地址写回R0中