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可以是立即数,也可以是寄存器,还可以是简单的表达式
* L# q! a1 r3 {' {: b( J+ p- g' Q2 K k. H$ b o! i6 n1 e
/ H2 f- m+ I' z2 S
|