1、 内存访问指令 基本指令: LDR:memory -> register (memory包括映射到内存空间的非通用寄存器) STR:register -> memory 语法: op{cond }{B}{T} Rd , [Rn ] op{cond }{B} Rd , [Rn , FlexOffset ]{!} op{cond }{B} Rd , label op{cond }{B}{T} Rd , [Rn ], FlexOffset op:基本指令,如LDR、STR cond:条件执行后缀 B:字节操作后缀 T:用户指令后缀 Rd:源寄存器,对于LDR指令,Rd将保存从memory中读取的数值;对于STR指令,Rd保存着将写入memory的数值 Rn:指针寄存器 FlexOffset:偏移量 例子: ldr r0, [r1] ;r1作为指针,该指针指向的数存入r0 str r0, [r1, #4] ;r1+4作为指针,r0的值存入该地址 str r0, [r1, #4]! ;同上,并且r1 = r1 + 4 ldr r1, =0x08100000 ;立即数0x08100000存到r1 ldr r1, [r2], #4 ;r2+4作为指针,指向的值存入r1,并且r2=r2+4 【label的使用】 addr1 ;定义一个名为“addr1”的label,addr1 = 当前地址 dcd 0 ;在当前地址出定义一个32bit的变量 ~ ~ ~ ldr r1, label1 ;r1 = addr1,r1即可以作为var1的指针 ldr r0, [r1] add r0, r0, #1 str r0, [r1] ;变量var1的值加1 【FlexOffset的使用】 FlexOffset可以是立即数,也可以是寄存器,还可以是简单的表达式
$ F3 C4 u& y& j
6 X8 |, |# C7 c" X A% d2 ~* \: h- m$ E0 R8 r8 r$ e6 E7 A" V \
|