常用arm汇编指令-RISC指令集

目录

  • 1、读内存和写内存ldr,str
  • 2、算数运算指令mov,add,sub
  • 3、跳转指令b、bl
  • 4、比较和条件执行
  • 5、cpsr读写指令mrs,msr
  • 6、cp15协处理器读写mrc,mcr
  • 6、连续赋值
  • 7、^的作用
  • 8、标志申明

1、读内存和写内存ldr,str

ldr r0, [r1]           @读内存,r0等于r1所指向地址的值,相当于C语言r0 = *r1;
str r0, [r1]           @写内存,把r0的值存放到r1所指向的地址中,相当于C语言*r1 = r0
ldr r1, [r2, #4]       @基址变址寻址,相当于C语言r1=*(r2+4);
ldr r0, =0x12345678    @伪指令,编译最终拆分为几条真正的arm指令,最后结果是r0 = 0x12345678;

2、算数运算指令mov,add,sub

mov r0, r1       //赋值语句,相当于r0=r1;
mov r0, #0x100   //r0=0x100
add r0, r1, #4   //加法,相当于r0=r1+4
sub r0, r1, r2   //减法,相当于r0=r1-r2

3、跳转指令b、bl

b flag    //跳转到flag标签出,相当于C语言的goto flag; 这个标签也可以是一个函数
b .       //跳转到当前位置,相当于C语言的while(1);死循环
bl main   //跳转到main函数执行,main函数结束后会返回到当前位置继续往下执行

4、比较和条件执行

cmp r1,r2      //比较r0和r1,比较结果直接影响标志位
beq flag       //上面比较结果如果相等,则跳转到flag
moveq r3, r4   //上面比较结果相等就执行mov r3, r4 相当于C语言if(eq) { r3 = r4; }
movne r3, r4   //上面比较结果不相等就执行mov r3, r4 相当于C语言if(!eq) { r3 = r4; }

5、cpsr读写指令mrs,msr

msr cpsr, r0	     @cpsr = r0,mrs用来读psr,msr用来写
msr cpsr_c, #0xd3	 @只操作cpsr模式位

6、cp15协处理器读写mrc,mcr

mrc p15,0,r0,c1,c0,0	//读协处理器
mcr p15,0,r0,c1,c0,0	//写协处理器,设置CPU工作于异步模式

6、连续赋值

ldmia r0, {r2-r3}           @r2到r3=*(r0++),r0的值不会改变
ldmia r0!, {r2-r3}	        @r2到r3=*(r0++),r0等于运算完 最后的地址

7、^的作用

ldmfd sp!, {r0 - r6, pc}^   @在目标寄存器中有pc时,会同时将spsr写入到cpsr,一般用于从异常模式返回。

8、标志申明

.global _start     //将_start申明为全局的,可以被其他文件调用
_start:

你可能感兴趣的:(嵌入式Linux,嵌入式,linux)