ARM所有常用指令的实例与说明(二)

2014-11-24 10:17:12 · 作者: · 浏览: 4
, #-12]


stmfd sp!, {r0, r1, r2} 表示把r2,r1,r0按照sp所指地址递减存储。并且把sp = sp - 12,也就相当于下面4条指令:
str r2, [sp, #-4]
str r1, [sp, #-8]
str r0, [sp, #-12]
sub sp, sp, #12



特殊用法:


stmfd sp!, {r0-r15}^ : 表示把用户模式下面的r0-r15寄存器存在当前模式下面的sp所指向的栈中。
stmfd sp!, {r0-r14}^ : 表示把用户模式下面的r0-r14寄存器存在当前模式下面的sp所指向的栈中。用于进程切换的时候保存用户模式下面的寄存器。
ldmfd sp!, {r0-r14}^ : 寄存器列表这里面不带有r15(pc), 表示把当前模式下面sp所指的栈中的15个int拷贝用户模式下面的r0-r14。这个用于恢复进程状态。


swp指令:
语法: Rd, Rm, [rn]


swp指令执行单字节或单字的内存于寄存器的数据交换原子操作。把rn所指内存里面的值赋值给Rd, 然后把R1存入R2所指的内存。经常用于内核中实现控制互斥与信号等功能。


例如:

swp r0, r1,[r2] :表示把r2所指的内存地址里面的值赋值给r0, 然后把r1存入r2所指内存地址。相当于下面2条指令的原子操作。
ldr r0, [r2]
str r1, [r2]