Appearance
操作码
格式:
txt
ldm Rm, {寄存器列表}
将Rm执行的连续空间中的数据读取到寄存器列表的每个寄存器中
stm Rm, {寄存器列表}
将寄存器列表中的每个寄存器中的数据写到Rm指向的连续的地址空间中注意:
Rm:Rm 寄存器中的数据当作内存的地址- 寄存器列表:操作的多个寄存器
- 如果寄存器列表中的寄存器编号连续,使用
-隔开{r1-r5}- 例如,
r0,r1,r2,r3-->{r0-r3}
- 例如,
- 如果寄存器列表中点寄存器编号不连续,使用
,隔开{r1-r3,r5}- 例如,
r4,r5,r7,r8-->{r4, r6-r8}
- 例如,
- 如果寄存器列表中的寄存器编号连续,使用
示例

- 低地址的数据一定是存放在小编号的寄存器中,和寄存器列表中寄存器顺序无关
地址增长方式
asm
mov r1,#1
mov r2,#2
mov r2,#2
mov r3,#3
mov r4,#4
mov r5,#5
mov r11,#0x40000020
stm r11!,{r1,r5,r2,r3,r4}IA:stmia r11!,{r1,r5,r2,r3,r4}先往r11数值为首地址的内存中存数据,然后r11数值增大IB:stmib r11!, {r1,r5,r2,r3,r4}先r11数值增大,然后往r11数值为首地址的内存中存数据DA:stmda r11!, {r1,r5,r2,r3,r4}先往r11数值为首地址的内存中存数据,然后r11数值减小DB:stmdb r11!, {r1,r5,r2,r3,r4}先r11数值减小,然后往r11数值为首地址的内存中存数据
示例

- 上图中,可以看到
r11最后指向的是最后存入地址的下一个地址

- 上图中,可以看到
r11首先是移动了一个单位,然后再开始存入数据,最后指向了最后存入数据的地址

- 上图中,可以看到从起始地址的上方开始存,
r11最后停在第一个存入位置的前一个地址,而且存入的顺序也不是逆序的

- 先移动在存储,最后
r11指向最低的地址