Skip to content
On this page

ARM汇编_多寄存器读写内存指令


标签:ARM32汇编/指令  

操作码

格式:

txt
ldm Rm, {寄存器列表}
        将Rm执行的连续空间中的数据读取到寄存器列表的每个寄存器中
stm Rm, {寄存器列表}
        将寄存器列表中的每个寄存器中的数据写到Rm指向的连续的地址空间中

注意:

  1. Rm :Rm 寄存器中的数据当作内存的地址
  2. 寄存器列表:操作的多个寄存器
    • 如果寄存器列表中的寄存器编号连续,使用 - 隔开 {r1-r5}
      • 例如,r0,r1,r2,r3 --> {r0-r3}
    • 如果寄存器列表中点寄存器编号不连续,使用 , 隔开 {r1-r3,r5}
      • 例如,r4,r5,r7,r8 --> {r4, r6-r8}

示例

invert

  • 低地址的数据一定是存放在小编号的寄存器中,和寄存器列表中寄存器顺序无关

地址增长方式

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}
  • IAstmia r11!,{r1,r5,r2,r3,r4} 先往 r11 数值为首地址的内存中存数据,然后 r11 数值增大
  • IBstmib r11!, {r1,r5,r2,r3,r4}r11 数值增大,然后往 r11 数值为首地址的内存中存数据
  • DAstmda r11!, {r1,r5,r2,r3,r4} 先往 r11 数值为首地址的内存中存数据,然后 r11 数值减小
  • DBstmdb r11!, {r1,r5,r2,r3,r4}r11 数值减小,然后往 r11 数值为首地址的内存中存数据

示例

invert

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

invert

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

invert

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

invert

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

Last updated: