基于ARM汇编语言-多数据访问

基于ARM汇编语言-多数据访问

概念
LDM:将一块内存的数据,加载到多个寄存器中。
STM:将多个寄存器的值,存储到一块内存。

格式
LDM{条件}{s}MODE基址寄存器{!},{Reglist}^
STM{条件}{s}MODE基址寄存器{!},{Reglist}^

MODE
1.IA(increase after):先读写,后增加地址。
2.IB(increase before):先增加地址,后读写。
3.DA(decrease after):先读写,后减少地址。
4.DB(decrease before):先减少地址,后读写。

图片来源:华清远见
在这里插入图片描述

基址寄存器:用来存放内存的 起始地址。

:最后更新基址寄存器的值。

Reglist
多个寄存器从小到大,中间用","隔开,如{r0,r1,r4}或{r0-r3,r5}。
寄存器号大的对应内存的高地址,寄存器号小的对应内存低地址。

^:在LDM指令中,有PC且在数据传送的时候,会将SPSR的值拷贝到CPSR,用于异常的返回。

.global _start	 

_start:
	@mov r0,#0x40000000
	mov r0,#0x40000020
	mov r1,#1
	mov r2,#2
	mov r3,#3
	mov r4,#4
	mov r6,#6
	@//stm,将多个寄存器的值,存储到一块内存
	@stmia r0,{r1,r2}
	@stmia r0,{r1-r4} @//将r1-r4寄存器保存到r0为基地址的内存中,r0的值不变
	@stmia r0!,{r1-r4,r6} @//这里r0的值会更新地址
	@stmib r0!,{r1-r4,r6}  @//先加再存储
	@stmda r0!,{r1-r4,r6}  @//先存储再减
	stmdb r0!,{r1-r4,r6}   @//先减再存储

	mov r1,#0
	mov r2,#0
	mov r3,#0
	mov r4,#0
	mov r6,#0
	@//ldm,将一块内存的数据,加载到多个寄存器中
	@ldmdb r0!,{r1-r4,r6}  @//先减少地址,再进行读取
	@ldmda r0!,{r1-r4,r6}   @//先读写再减
	@ldmib r0!,{r1-r4,r6}	@//先加再读取
	ldmia r0!,{r1-r4,r6}    @//先读再加

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值