ARM常用的汇编指令及相关拓展

CPU可以直接访问R0~R15寄存器,但是对于类似GPFCON、GPFDAT等寄存器需以地址访问。

常用汇编代码:
1、LDR(load):读内存;
如:LDR R0,[R1];
假设R1的值是x,读取地址x上的数据(4字节),保存到R0中。

2、STR(store):写内存命令;
如:STR R0,[R1];
假设R1的值是x,把R0的值写到地址x(4字节)。

3、B:跳转;

4、MOV(move):赋值;
如:MOV R0,R1 ;
把R1的值赋给R0,R0=R1。
若MOV R0,#0x100,即R0=0x100。

5、LDR R0,=0x12345678
伪指令,它会被拆分为几条真正的RAM指令。

6、
add r0,r1,#4;表示:r0=r1+4。
sub r0,r1,#4;表示:r0=r1+4。
sub r0,r1,r2;表示:r0=r1-r2;

7、BL(branch and Link)
bl xxx —>a、跳到xxx; b、把返回地址(下一条指令的地址)保存在lr寄存器中。

8、ldm(m:many):读内存,写入多个寄存器。
stm(m:many):把多个寄存器的值写入内存。

其中,ldmia(先读后增),stmdb(先减后存)分别表示:

ia:过后增加(Increment After);

db:预先减少(Decrement Before)。【常用】

例1:stmdb sp!,(fp,ip,lr,pc)【规则:高编号寄存器存在高地址】
注:stmdb(先减后存)
其中,fp(r11),ip(r12),lr(r14),pc(r15)。
sp!表示sp=最终的被修改的sp值=4080.

解释:假设sp=4096,即最高位。
I、先减:sp’=sp-4=4092;
后存:4092~4095存放pc(program counter)的值。

II、先减:sp’=sp-4=4092-4=4088;
后存:4088~4091存放lr的值。
~~
最终为4080开始。
如图:
在这里插入图片描述

例2、ldmia sp,(fp,sp,pc)【规则:高编号寄存器存在高地址】
注:ldmia(先读后增)

I、先读:fp=4080~4083的值=原来的fp
后增:sp’=sp+4=4084。

II、先读:sp=4084~4087的值=原来保存的ip。
后增:sp’=sp+4=4088。

III、先读:pc=4088~4091的值=原来保存的lr。
后增:sp’=4088+4=4092。

其中,sp不加!表示sp修改的值/地址不存入sp中。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ARM指令集是一种广泛使用的指令集架构,它主要用于移动设备、嵌入式系统和低功耗服务器等领域。这个指令集架构的发展可追溯到1980年代初,但只有1990年代后期开始得到广泛采用和推广。现在,ARM指令集已经成为了全球最流行的指令集之一。 常用ARM指令集包括ARMv6、ARMv7和ARMv8等。它们的主要区别在于处理器的架构和指令集的扩展。其中,ARMv6是一种比较老的架构,适用于早期的移动设备和嵌入式系统。而ARMv7则是一种更为先进的架构,支持更多的指令集扩展和一些新的特性。ARMv8则是未来的趋势,它支持更多的指令集扩展,包括虚拟寄存器、硬件虚拟化和安全性增强等功能。 除了ARM指令集,汇编语言也是ARM编程的重要组成部分。常用ARM汇编语言包括ARM汇编和Thumb汇编两种。ARM汇编是一种较为底层的汇编语言,它使用32位指令来完成数据处理和控制流操作。而Thumb汇编则是一种更加轻量级的汇编语言,它使用16位指令来完成相同的操作。 针对ARM指令集和汇编语言,有许多文档和教程可供参考。其中最常用的包括ARM体系结构参考手册、ARM汇编编程指南和ARM编程手册等。这些文档都提供了详细的指令集和汇编语言说明,以及实用的编程示例和技巧。同时,还有一些在线资源和社区,如ARM开发者中心和ARM社区等,提供丰富的资讯和交流平台。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值