直接寻址数据传送指令
MOV Rd,Rr 0≤d≤31,0≤r≤31
说明:该指令将一个寄存器内容送到另一个寄存器中,源寄存器的Rr的内容不改变,而目的寄存器Rd复制了Rr的内容。
操作:Rd←Rr PC←PC+1
LDS Rd,K 0≤d≤31,0≤k≤65535
说明:把SRAM中一个存储单元的内容(字节)装入到寄存器中,其中k为该存储单元的16位地址。
操作:Rd←(k) PC←PC+2
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
从程序存储器中取数装入寄存器指令
LPM
说明:将Z指向的程序存储器空间的1字节装入寄存器R0
操作:R0←(Z) PC←PC+1
LPM Rd,Z 0≤d≤31
说明:将Z指向的程序存储器空间的1字节装入寄存器Rd
操作:Rd←(Z) PC←PC+1
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口数据传送指令
IN Rd,P 0≤d≤31,0≤P≤63
说明:将I/O空间(端口、定时器、配置寄存器等)的数据传送到寄存器区中的寄存器Rd中。
操作:Rd←P PC←PC+1
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