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里。