嵌入式开发学习(4)
2024-11-19 来源:cnblogs
数据传送指令:
MOV 两个寄存器之间传递。例 MOV r1,r0,将寄存器r0中的内容赋值给r1。
MVN 同MOV用法一样,区别是MOV是原值传递,而MVN是按位取反后传递。
算数运算指令:
ADD SUB RSB ADC SBC RSC
逻辑指令:
AND ORR EOR BIC
BIC的用法:BIC r0,r1,#0x1f,将r1中的数的bit0到bit4清零后赋值给r0;为什么是bit0到bit4呢,这个是由#0x1f来决定,#0x1f有五个bit位是1。如写成#0xf,就有四个bit位是0。
比较指令:
CMP CMN TST TEQ
比较指令用来比较两个寄存器中的数。特点:比较指令不用后加S后缀就可以影响CPRS中的标志位。
乘法指令:
MVL MLA UMULL UMLAL SMULL SMLAL
前导零计数指令:CLZ
操作CPRS指令:
MRS :读CPRS。
MSR:写CPRS。
跳转指令:
B :直接跳转。(没打算返回)
BL:跳转前把返回地址放入lr寄存器中,以便返回,以便函数的调用。(将来还要回来的)
BX:跳转的同时切换到ARM模式。一般用于异常处理的跳转。
访问内存指令:
单字/半字/字节访问(通过增加后缀)LDR:读内存。 STR:写内存。
多字批量访问 LDM STM
SWP 例SWP r1,r2,[r0] 将r0寄存器所存地址的值写到r1寄存器中,再将r2寄存器的值协会到r0寄存器所存地址中。SWP r1,r1,[r0],将r1与r0地址的所存的值互换。
立即数:
合法立即数 经过任意以为后,非零部分可以用8位来表示的位合法立即数。如0x000000ff,0xff000000,0xf000000f ,0x00000001都为合法立即数。
非法立即数 0x1f00000f 为非法立即数,经过以为后,得0x000001ff,不能用8位来表示。
软中断指令:
SWI (software interrupt)用来实现操作系统中系统调用。
上一篇:嵌入式开发学习(3)
下一篇:嵌入式开发学习(2)