load/store架构规定,存储器之间不能直接拷贝,需通过寄存器做中转。于是我们通过LDR指令存储器中的数据到寄存器;STR指令将寄存器中的数据写到存储器。

 ldr r0,[r1]  (load)   //r0=*r1    r1里存放的是地址,把该地址里存放的内容读入到r0中   LDRB(byte)  LDRH(half word)  
 ldr r0,[r1,#8]      //r0=*(r1+8)  存储器地址为r1+8的字数据读入寄存器0。
 ldr pc,_irq              // pc = *(_irq)  将标号中的内容放入pc中
 str r0,[r1] (store)   // *r1 = r0   将寄存器r0中值写入到存储器地址为r1的空间中  
 str r0,[r1],#4        // r0=*r1, r1=r1+4  将r0 中的字数据写入以r1为地址的内存中,并将新地址r1+4 写入r1
 str r0,[r1,#4]        //*(r1+4)=r0  将r0 中的字数据写入以r1+4 为地址的内存中    

百闻不如一练,看书不如实验。我们通过例程来实现读写寄存器这一过程。

 

我们实现从存储器Flash(srcBuf)中数据到R0寄存器,再将这个数据送到RAM内存地址空间中。

.text                    @代码段
     ldr  r0,=srcBuf
     ldrb  r1,[r0]
     ldr  r0,=destBuf
     strb  r1,[r0]
srcBuf:  
     .byte  0x01,02,0x03,0x04 
.data                    @数据段
destBuf:
      .space 8
.end

PS:

text里是代码段,代码段表示控制语句部分,内容存储在flash.。

data里是数据段,数据段表示是变量等,内容在内存里。   

所以说,srcbuf在代码段 flash里,destbuf在数据段 ram里。