mov r1,r0; @两个寄存器之间数据传输
mov r1,#0xff @将当即数赋值给寄存器ide
mvn和mov用法同样,区别是mov是原封不动的传递, 而mvn是按位取反后传递。
按位取反的含义:
好比: r1 = 0x000000ff,而后mov r0,r1后,r0 = 0xff 可是我mvn r0,r1后,r0=0xffffff00 函数
经常使用ARM指令2:cpsr访问指令
经常使用mrs&msr
mrs用来读psr,msr用来写psr
CPSR寄存器比较特殊,须要专门的指令访问,这就是mrs和msr。
cpsr和spsr的区别和联系:
cpsr是程序状态寄存器,整个SOC中只有1个;而spsr有5个,分别在5中异常模式下,做用是当从普通模式进入异常模式时,用来保存以前普通模式下的cpsr的,以在返回普通模式时恢复原来的cpsr。
经常使用ARM指令3:跳转(分支)指令
b & bl & bx
b 直接跳转(就没打算返回,经常使用于绝对跳转)
bl branch and link,跳转前把返回地址放入lr中,以便返回,以便用于函数调用
bx 跳转同时切换到ARM模式,通常用于异常处理的跳转。
经常使用ARM指令4:访存指令
ldr/str & ldm/stm & swpcode
单个字/半字/字节访问 ldr/str
多字批量访问 ldm/stm
swp r1, r2, [r0]
swp r1, r1, [r0]ci
协处理器和协处理器指令string
协处理器cp15操做指令
mcr & mrcit
mrc用于读取CP15中的寄存器
mcr用于写入CP15中的寄存器io
经常使用gnu伪指令
.global _start @ 给_start外部连接属性
.section .text @ 指定当前段为代码段
.ascii .byte .short .long .word
.quad .float .string @ 定义数据
.align 4 @ 以16字节对齐
.balignl 16 0xabcdefgh @ 16字节对齐填充
.equ @ 相似于C中宏定义
.end @标识文件结束
.include @ 头文件包含
.arm / .code32 @声明如下为arm指令
.thumb / .code16 @声明如下为thubm指令class
ldr 大范围的地址加载指令
adr 小范围的地址加载指令
adrl 中等范围的地址加载指令
nop 空操做psr
ARM中有一个ldr指令,还有一个ldr伪指令
通常都使用ldr伪指令而不用ldr指令float