如何在AVR组件中使SRAM地址保持不变,例如60到61到62

时间:2019-04-18 14:56:36

标签: assembly avr

如何增加SRAM中的地址,我想存储数量介于0到20之间的数据, 例: $ 60地址中的第一个数据存储 地址中的第二个数据存储区$ 61 。 。 。 。

谢谢

1 个答案:

答案 0 :(得分:0)

AVR的寄存器文件具有三个指针,可用于内部数据访问。它们是 X (这是寄存器 r27:r26 的组合), Y r29:r28 )和 Z r31:r30 )。

运算符LD用于从地址ST加载数据以进行存储。

LDI r27, 0x05 // load 0x0543 into X register
LDI r26, 0x43 
LD r16, X  // read RAM at address X into register r16
...
ST Y, r16 // store a value from r16 into RAM at address Y

这三个寄存器都可以与递减后递增一起使用。预减量首先将指针寄存器的值减1,然后访问该地址的数据。反之亦然,后递增首先访问数据,然后增加地址。语法为-X(或-Y / -Z)表示递减,X +(或Y + / Z +)表示递减:

LDI r27, 0x02  // Load 0x0200 into X pointer register
LDI r26, 0x00
LD r16, -X // decreases X register, now r27 contains 0x01 and r26 - 0xFF,
           // and then reads value of RAM at address 0x01FF into r16

LDI r31, 0x03  // Load 0x0345 into Z pointer register
LDI r30, 0x45 
ST Z+, r16 // stores value from r16 to address 0x0345, and increment r31:r30 by 1
           // now r31 contains 0x03 and r30 - 0x46

因此,要将多个数据存储到连续的地址中,可以使用多个后递增指令:

LDI r27, 0x00 // Load 0x0060 into X
LDI r26, 0x60 
ST X+, r16 // store r16 to 0x0060
ST X+, r17 // store r17 to 0x0061
ST X+, r18 // store r18 to 0x0062
ST X+, r19 // store r19 to 0x0063
etc...