AVR的指令(第五部分 数据传送指令)

1979天前 · AVR单片机 · 382次阅读

直接寻址数据传送指令

  • 工作寄存器间传送数据
MOV Rd,Rr    0≤d≤31,0≤r≤31
说明:该指令将一个寄存器内容送到另一个寄存器中,源寄存器的Rr的内容不改变,而目的寄存器Rd复制了Rr的内容。
操作:Rd←Rr    PC←PC+1
  • SRAM数据直接送寄存器
LDS Rd,K    0≤d≤31,0≤k≤65535
说明:把SRAM中一个存储单元的内容(字节)装入到寄存器中,其中k为该存储单元的16位地址。
操作:Rd←(k)    PC←PC+2
  • 寄存器数据直接送SRAM
STS k,Rr    0≤r≤31,0≤k≤65535
说明:将寄存器的内容直接存储到SRAM中,其中k为存储单元的16位地址。
操作:k←(Rd)    PC←PC+1
  • 立即数送寄存器
LDI Rd,k    16≤r≤31,0≤k≤255
说明:将一个8位立即数传送到寄存器R16~R31中。
操作:Rd←k    PC←PC+1
  • 寄存器字复制(扩展指令,仅部分AVR芯片支持,ATmega16支持该指令)
MOVM Rd+1;Rd←Rr+1    PC←PC+1
说明:将一个寄存器对的内容复制到另一个寄存器对中(16位传送)

间接寻址数据传送指令

使用X指针寄存器间接寻址传送数据

  • 使用地址指针寄存器X间接寻址将SRAM内容装入到指定寄存器
1) LD Rd,X    0≤d≤31
说明:将指针为X的SRAM中的数送寄存器,指针不变。
操作:Rd←(X)    PC←PC+1
2) LD Rd,X+    0≤d≤31
说明:先将指针为X的SRAM中的数送寄存器,然后X指针加1。
操作:Rd←(X),X←X+1    PC←PC+1
1) LD Rd,-X    0≤d≤31
说明:X指针减1,将指针为X的SRAM中的数送寄存器。
操作:X←X-1,Rd←(X)    PC←PC+1
  • 使用地址指针寄存器X间接寻址将SRAM内容存储到SRAM
1) ST X,Rr    0≤d≤31
说明:将寄存器内容送X为指针的SRAM中,X的指针不变。
操作:(X)←Rr    PC←PC+1
2) ST X+,Rr    0≤d≤31
说明:先将寄存器内容送X为指针的SRAM中,然后X指针加1。
操作:(X)←Rr,X←X+1    PC←PC+1
3) ST -X,Rr    0≤d≤31
说明:X指针减1,将寄存器内容送指针为X的SRAM中。
操作:X←X-1,(X)←Rr    PC←PC+1

使用Y指针寄存器间接寻址传送数据

  • 使用地址指针寄存器Y间接寻址将SRAM中的内容装入寄存器
1) LD Rd,Y    0≤d≤31
说明:将指针为Y的SRAM中的数送寄存器,Y指针不变。
操作:Rd←(Y)    PC←PC+1
2) LD Rd,Y+    0≤d≤31
说明:先将指针为Y的SRAM中的数送寄存器,然后Y指针加1.
操作:Rd←(Y),Y←Y+1    PC←PC+1
3) LD Rd,-Y    0≤d≤31
说明:先将Y指针减1,然后将指针为Y的SRAM中的数送寄存器。
操作:Y←Y-1,Rd←(Y)    PC←PC+1
4) LDD Rd,Y+q    0≤d≤31,0≤q≤63
说明:将指针为Y+q的SRAM中的数送寄存器,Y指针保持不变。
操作:Rd←(Y+q)    PC←PC+1
  • 使用地址指针寄存器Y的间接寻址将寄存器内容存储到SRAM
1) ST Y,Rr    0≤d≤31
说明:将寄存器内容送指针为Y的SRAM中,Y指针不变。
操作:(Y)←Rr    PC←PC+1
2) ST Y+,Rr    0≤d≤31
说明:先将寄存器内容送指针为Y的SRAM中,然后Y指针加1。
操作:(Y)←Rr,Y←Y+1    PC←PC+1
3) ST -Y,Rr    0≤d≤31
说明:先将Y指针减1,然后将寄存器内容送指针为Y的SRAM中。
操作:Y←Y-1,(Y)←Rr    PC←PC+1
4) STD Y+q,Rr    0≤d≤31,0≤q≤63
说明:将寄存器内容送指针为Y+q的SRAM中。
操作:(Y+q)←Rr    PC←PC+1

使用Z指针寄存器间接寻址传送数据

  • 使用地址指针寄存器Z间接寻址将SRAM中的内容装入到指定寄存器
1) LD Rd,Z    0≤d≤31
说明:将指针为Z的SRAM中的数送寄存器,Z指针不变。
操作:Rd←(Z)    PC←PC+1
2) LD Rd,Z+    0≤d≤31
说明:先将指针为Z的SRAM中的数送寄存器,然后Z指针加1.
操作:Rd←(Z),Z←Z+1    PC←PC+1
3) LD Rd,-Z    0≤d≤31
说明:先将Z指针减1,然后将寄存器内容送指针为Z的SRAM中。
操作:Z←Z-1,(Z)←Rr    PC←PC+1
4) LDD Rd,Z+q    0≤d≤31,0≤q≤63
说明:将指针为Z+q的SRAM中的数送寄存器,Z指针保持不变。
操作:Rd←(Z+q)    PC←PC+1
  • 使用地址指针寄存器Z的间接寻址将寄存器内容存储到SRAM
1) ST Z,Rr    0≤d≤31
说明:将寄存器内容送指针为Z的SRAM中,Z指针不变。
操作:(Z)←Rr    PC←PC+1
2) ST Z+,Rr    0≤d≤31
说明:先将寄存器内容送指针为Z的SRAM中,然后Z指针加1。
操作:(Z)←Rr,Z←Z+1    PC←PC+1
3) ST -Z,Rr    0≤d≤31
说明:先将Z指针减1,然后将寄存器内容送指针为Z的SRAM中。
操作:Z←Z-1,(Z)←Rr    PC←PC+1
4) STD Z+q,Rr    0≤d≤31,0≤q≤63
说明:将寄存器内容送指针为Z+q的SRAM中。
操作:(Z+q)←Rr    PC←PC+1

从程序存储器中取数装入寄存器指令

  • 从程序存储器中取数装入寄存器R0
LPM
说明:将Z指向的程序存储器空间的1字节装入寄存器R0
操作:R0←(Z)    PC←PC+1
  • 从程序存储器中取数装入寄存器Rd
LPM Rd,Z    0≤d≤31
说明:将Z指向的程序存储器空间的1字节装入寄存器Rd
操作:Rd←(Z)    PC←PC+1
  • 带后增量的从程序存储器中取数装入寄存器Rd
LPM Rd,Z+    0≤d≤31
说明:将Z指向的程序存储器空间的1字节装入寄存器Rd
操作:Rd←(Z),Z←Z+1    PC←PC+1
  • 从程序存储器中取数装入寄存器R0(扩展指令,仅部分AVR芯片支持,ATmega16不支持该指令)
ELPM
说明:将RAMPZ:Z指向的程序存储器空间的1字节装入寄存器R0
操作:R0←(RAMPZ:Z)    PC←PC+1
  • 从程序存储器中取数装入寄存器(扩展指令,仅部分AVR芯片支持,ATmega16不支持该指令)
ELPM Rd,Z    0≤d≤31
说明:将RAMPZ:Z指向的程序存储器空间的1字节装入寄存器Rd
操作:Rd←(RAMPZ:Z)    PC←PC+1
  • 带后增量的从程序存储器中取数装入寄存器(扩展指令,仅部分AVR芯片支持,ATmega16不支持该指令)
ELPM Rd,Z+    0≤d≤31
说明:将RAMPZ:Z指向的程序存储器空间的1字节装入寄存器Rd,然后RAMPZ:Z指针加1。
操作:Rd←(RAMPZ:Z)    RAMPZ:Z←RAMPZ:Z+1    PC←PC+1

写程序存储器指令

  • 写程序存储器
SPM
说明:将寄存器R1:R0的内容(16位字)写入Z指向的程序存储器空间。
操作:(Z)←R1:R0    PC←PC+1

I/O口数据传送指令

  • I/O口数据装入寄存器
IN Rd,P    0≤d≤31,0≤P≤63
说明:将I/O空间(端口、定时器、配置寄存器等)的数据传送到寄存器区中的寄存器Rd中。
操作:Rd←P    PC←PC+1
  • 寄存器数据送I/O口
OUT P,Rr    0≤r≤31,0≤P≤63
说明:将寄存器区中Rr的数据传送到I/O空间(端口、定时器、配置寄存器等)。
操作:P←Rr    PC←PC+1

堆栈操作指令

  • 进栈指令
PUSH Rr    0≤d≤31
说明:该指令存储寄存器Rr的内容到堆栈。
操作:STACK←Rr,SP←SP-1    PC←PC+1
  • 出栈指令
POP Rd    0≤d≤31
说明:该指令将堆栈中的字节装入到寄存器Rd中。
操作:SP←SP+1,Rd←STACK    PC←PC+1
👍 0

none

最后修改于1979天前

评论

贴吧 狗头 原神 小黄脸
收起

贴吧

狗头

原神

小黄脸

目录

avatar

未末

迷失

126

文章数

275

评论数

7

分类