刘帅嵌入式系统-批量Load/Store指令的寻址方式
一条批量Load/Store指令可以实现一组寄存器和一块连续的内存单元之间传输数据,语法格式如下:
DM | STM {<cond>} <addressing_mode> <Rn>{!}, <registers>{^}
以上指令中规则:
-
编号低的寄存器对应于内存中低地址单元,编号高的寄存器对应于内存中高地址单元。
-
<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)。