刘帅嵌入式系统-批量Load/Store指令的寻址方式

一条批量Load/Store指令可以实现一组寄存器和一块连续的内存单元之间传输数据,语法格式如下:

DM | STM {<cond>} <addressing_mode> <Rn>{!}, <registers>{^}

以上指令中规则:

  1. 编号低的寄存器对应于内存中低地址单元,编号高的寄存器对应于内存中高地址单元。

  2. <Rn> 中存放地址块的最低地址值。

<addressing_mode>表示地址的变化方式,有如下四种:

  • IA(Increment After):事后递增方式。

  • IB(Increment Before):实现递增方式。

  • DA(Decrement After):事后递减方式。

  • DB(Decrement Before):事先递减方式。

批量Load/Store的指令编码格式如下:

指令中各标志位含义如下:

U:表示地址变化的方向。

  • U = 1 时,地址从基址寄存器<Rn>多汁的内存单元向上(Upwards)变化;

  • U = 0 时,地址从基址寄存器<Rn>多汁的内存单元向下(Downwards)变化;

P:表示指令使用的内存块(下文坚持MEM_Cmd)中是否包含基址寄存器<Rn>所指向的内存单元(下文简称MEM_Rn)。

  • P = 0 时,MEM_Rn不在MEM_Cmd中。

    • U = 0时,MEM_Rn为MEM_Cmd上面相邻的内存单元。

    • U = 1时,MEM_Rn为MEM_Cmd下面相邻的内存单元。

  • P = 1时,MEM_Rn在MEM_Cmd中。

    • U = 0时,MEM_Rn为MEM_Cmd内最上面的内存单元。

    • U = 1时,MEM_Rn为MEM_Cmd内最下面的内存单元。

S:对于不同的指令意义不同。

  • 当LDMS指令的寄存器列表中包含PC (R15)寄存器时,S = 1表示指令同时将spsr的数值复制到cpsr中。

  • 当LDMS/STMS指令的寄存器列表中不包含PC (R15)寄存器时,S = 1表示当处理器模式为特权模式时,指令操的寄存器是用户模式下的物理寄存器,而不是当前特权模式下的物理寄存器。

W:表示指令 执行后,基址寄存器<Rn>的值是否更新。当W = 1时,指令执行后基址寄存器加上(U = 1)/减去(U = 0)寄存器列表中的寄存器个数乘以4。

L:表示操作的类型。

  • L = 1时,执行Store操作。

  • L = 0时,执行Load操作。

     

在寄存器列表域<register_list>,每一位对应一个寄存器。如bit[0]对应R0,bit[15]代表寄存器R15(PC)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值