arm的寄存器以及基本指令介绍


ARM一共有37个寄存器

31个通用寄存器

6个状态寄存器


未备份寄存器 r0-r7

备份寄存器 r8-r14


程序计数器r15  也叫做PC寄存器。和X86的eip一样

R13一般也叫做SP  堆栈指针。和X86的esp一样

R14一般也叫做LR 链接寄存器。 相当于返回地址。调用BL BX的时候会将返回地址赋值给LR。在子程序里面 执行完毕以后。会调用MOV PC,LR 这样PC=LR。相当于EIP=retaddr

所以就立马执行 LR了


状态寄存器

CPSR  和 x86里面的flag一样




LDR MOV STR   (特别注意还有一个ldr伪指令 和ldr指令是不同的)


如果想要将内存地址中的数值移动到 CPU寄存器当中。只能使用LDR 

LDR Rd address 指的是将 addres里面的值存储到Rd寄存器中

STR Rd address 指的是将 Rd这个值存放到address地址里面去 


mov和ldr最大的区别是。 MOV只能在寄存器和寄存器之间移动数据。或者将立即数移动到寄存器当中


比如 (假设地址为123456,而地址里里面存储的值是aabbcc)

ldr r0 ,r2        将r2地址里面的值移动到r0. 此时r0=aabbcc

mov r0 ,#123456   将123456这个数据移动到r0。此时r0=123456

ldr r0,=123456    将123456这个数据移动到r0.此时r0=123456 这个是ldr的伪指令。数据前面多了一个等号

也就是如果在后面的数字后加上了一个=号。就表示将这个数据移动到r0.而不是他里面的值。这个叫ldr伪指令



STMFD 指令           特别注意。 SP和PC一定不能放在list里面

LDMFS指令          特别注意SP 不能出现在list当中。如果pc在list里面,那么lr一定不能在list里面。并且要么这一条语句在一个函数的末尾要么在函数外面。

                             因为pop了pc立马就会去执行PC。

了解这两个栈处理命令之前。

先了解。

如果SP指向最后一个入栈的变量的位置。这个叫满堆栈

如果SP指向最后一个入栈的变量的下一个位置(空位置) 这个叫空堆栈。


如果堆栈生长的位置由低到高。叫做递增堆栈。

如果生长位置由高到低为递减堆栈。

2*2一共有四中命名的堆栈方式。 满递增。满递减。空递增。空递减


对于STMFD和LDMFS

都是满递减的形式

STMFD 和 LDMFS 都是从左到右push或者pop的。


附带判断指令如下图





另外还有ARM协处理器。

CP15寄存器包括了c0 c1~c16等等32bit长的寄存器。这些寄存器各有用处。

有些是用来控制mmu 。页表等等的。










  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值