【ARM汇编之 STM/LDM】


前言

STM/LDM是一种批量加载/存储的指令,常用于入栈和出栈。

一、STM

STM翻译为Store Multiple registers.

STM     将寄存器列表中寄存器的值,存储到一块内存

格式

STM{条件}{s}<MODE>基址寄存器{!},{Reglist}^

代码如下(示例):

        mov     r3, #0x40000012
        mov     r0, #4
        mov     r1, #5
        mov     r2, #6

        stmda r3!, {r0-r2}

二、LDM

LDM翻译为Load Multiple registers.

LDM    是将一 块内存中的数据, 加载到寄存器列表的寄存器中。

格式

LDM{条件}{s}<MODE>基址寄存器{!},{Reglist}^

代码如下(示例):

        mov     r0, #0
        mov     r1, #0
        mov     r2, #0


        ldmia r3!, {r0-r2}


三、寻址模式(mode)

mode决定了基址寄存器是在执行指令前地址增减还是指令执行后增减.

  • I为Increment(递增)

  • D为Decrement (递减)

  • B为Before

  • A为After

1.IA IB DA DB

2."!"

在传输数据完成后,更新基址寄存器中的值

3."^"

在数据传输完成后,将SPSR的值复制到CPSR中,常用于异常模式下的返回.

4.ATPCS

ATPCS即ARM-THUMB procedure call standard(ARM-Thumb过程调用标准)的简称。

PCS规定了应用程序的函数可以如何分开地写,分开地编译,最后将它们连接在一起,所以它实际上定义了一套有关过程(函数)调用者与被调用者之间的协议。

ATPCS是arm公司为arm平台编译器设计的一种规范,默认为慢递减堆栈。

FD        慢递减堆栈

FA        满递增堆栈

ED        空递减堆栈

EA        空递增堆栈

这四种也是寻址模式,但是他们更加标准、规范化,用法其他四种基本相同.

PS:其实LDM/LDMIA/LDMFD 是同一条指令,STM (STMIA, STMEA)  是同一条指令

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值