指令集概述指令操作数说明操作标志 # 时钟数算数和逻辑指令ADD Rd, Rr 无进位加法Rd ← Rd + Rr Z,C,N,V,H 1ADC Rd, Rr 带进位加法Rd ← Rd + Rr + C Z,C,N,V,H 1ADIW Rdl,K 立即数与字相加Rdh:Rdl ← Rdh:Rdl + K Z,C,N,V,S 2 SUB Rd, Rr 无进位减法Rd ← Rd - Rr Z,C,N,V,H 1SUBI Rd, K 减立即数Rd ← Rd - K Z,C,N,V,H 1SBC Rd, Rr 带进位减法Rd ← Rd - Rr - C Z,C,N,V,H 1SBCI Rd, K 带进位减立即数Rd ← Rd - K - C Z,C,N,V,H 1SBIW Rdl,K 从字中减立即数Rdh:Rdl ← Rdh:Rdl - K Z,C,N,V,S 2 AND Rd, Rr 逻辑与Rd ← Rd • Rr Z,N,V 1ANDI Rd, K 与立即数的逻辑与操作Rd ← Rd • K Z,N,V 1OR Rd, Rr 逻辑或Rd ← Rd v Rr Z,N,V 1ORI Rd, K 与立即数的逻辑或操作Rd ← Rd v K Z,N,V 1EOR Rd, Rr 异或Rd ← Rd ⊕ Rr Z,N,V 1COM Rd 1 的补码Rd ← 0xFF − Rd Z,C,N,V 1NEG Rd 2 的补码Rd ← 0x00 − Rd Z,C,N,V,H 1SBR Rd,K 设置寄存器的位Rd ← Rd v K Z,N,V 1CBR Rd,K 寄存器位清零Rd ← Rd • (0xFF - K Z,N,V 1INC Rd 加一操作Rd ← Rd + 1 Z,N,V 1DEC Rd 减一操作Rd ← Rd − 1 Z,N,V 1TST Rd 测试是否为零或负Rd ← Rd • Rd Z,N,V 1CLR Rd 寄存器清零Rd ← Rd ⊕ Rd Z,N,V 1SER Rd 寄存器置位Rd ← 0xFF None 1MUL Rd, Rr 无符号数乘法R1:R0 ← Rd x Rr Z,C 2MULS Rd, Rr 有符号数乘法R1:R0 ← Rd x Rr Z,C 2MULSU Rd, Rr 有符号数与无符号数乘法 R1:R0 ← Rd x Rr Z,C 2FMUL Rd, Rr 无符号小数乘法R1:R0 ← (Rd x Rr << 1 Z,C 2FMULS Rd, Rr 有符号小数乘法R1:R0 ← (Rd x Rr << 1 Z,C 2FMULSU Rd, Rr 有符号小数与无符号小数乘法R1:R0 ← (Rd x Rr << 1 Z,C 2跳转指令RJMP k 相对跳转PC ← PC + k + 1 无 2IJMP 间接跳转到(Z PC ← Z 无 2RCALL k 相对子程序调用PC ← PC + k + 1 无 3ICALL 间接调用(Z PC ← Z 无 3RET 子程序返回PC ← STACK 无 4RETI 中断返回PC ← STACK I 4CPSE Rd,Rr 比较,相等则跳过下一条指令if (Rd = Rr PC ← PC + 2 or 3 无 1 / 2 / 3CP Rd,Rr 比较Rd − Rr Z, N,V,C,H 1CPC Rd,Rr 带进位比较Rd − Rr − C Z, N,V,C,H 1CPI Rd,K 与立即数比较Rd − K Z, N,V,C,H 1SBRC Rr, b 寄存器位为"0” 则跳过下一条指令if (Rr(b=0 PC ← PC + 2 or 3 无 1 / 2 / 3 SBRS Rr, b 寄存器位为"1” 则跳过下一条指令if (Rr(b=1 PC ← PC + 2 or 3 无1 / 2 / 3 SBIC P, b I/O 寄存器位为"0” 则跳过下一条指令if (P(b=0 PC ← PC + 2 or 3 无 1 / 2 / 3 SBIS P, b I/O 寄存器位为"1” 则跳过下一条指令 if (P(b=1 PC ← PC + 2 or 3 无 1 / 2 / 3BRBS s, k 状态寄存器位为"1” 则跳过下一条指令if (SREG(s = 1 then PC←PC+k + 1 无 1 / 2 BRBC s, k 状态寄存器位为"0” 则跳过下一条指令 if (SREG(s = 0 then PC← PC+k + 1 无 1 / 2 BREQ k 相等则跳转if (Z = 1 then PC ← PC + k + 1 无 1 / 2BRNE k 不相等则跳转 if (Z = 0 then P C ← PC + k + 1 无 1 / 2BRCS k 进位位为"1” 则跳转if (C = 1 then PC ← PC + k + 1 无 1 / 2BRCC k 进位位为"0” 则跳转if (C = 0 then PC ← PC + k + 1 无 1 / 2BRSH k 大于或等于则跳转if (C = 0 then PC ← PC + k + 1 无 1 / 2BRLO k 小于则跳转if (C = 1 then PC ← PC + k + 1 无 1 / 2BRMI k 负则跳转if (N = 1 then PC ← PC + k + 1 无 1 / 2BRPL k 正则跳转if (N = 0 then PC ← PC + k + 1 无 1 / 2BRGE k 有符号数大于或等于则跳转 if (N ⊕ V= 0 then PC ← PC + k + 1 无 1 / 2 BRLT k 有符号数负则跳转 if (N ⊕ V= 1 then PC ← PC + k + 1 无 1 / 2BRHS k 半进位位为"1” 则跳转if (H = 1 then PC ← PC + k + 1 无 1 / 2BRHC k 半进位位为"0” 则跳转if (H = 0 then PC ← PC + k + 1 无 1 / 2BRTS k T 为"1” 则跳转if (T = 1 then PC ← PC + k + 1 无 1 / 2BRTC k T 为"0” 则跳转if (T = 0 then PC ← PC + k + 1 无 1 / 2BRVS k 溢出标志为"1” 则跳转if (V = 1 then PC ← PC + k + 1 无 1 / 2BRVC k 溢出标志为"0” 则跳转if (V = 0 then PC ← PC + k + 1 无 1 / 2← Z - 1, (Z ← Rr 无 2STD Z+q,Rr 加载带偏移量的间接寻址数据(Z + q ← Rr 无 2STS k, Rr 从 SRAM 加载数据(k ← Rr 无 2LPM 加载程序空间的数据R0 ← (Z 无 3LPM Rd, Z 加载程序空间的数据Rd ← (Z 无 3LPM Rd, Z+ 加载程序空间的数据,然后地址加一Rd ← (Z, Z ← Z+1 无 3SPM 保存程序空间的数据(Z ← R1:R0 无 -IN Rd, P 从 I/O 端口读数据Rd ← P 无 1OUT P, Rr 输出端口P ← Rr 无 1PUSH Rr 将寄存器推入堆栈STACK ← Rr 无 2POP Rd 将寄存器从堆栈中弹出Rd ← STACK 无 2位和位测试指令SBI P,b I/O 寄存器位置位I/O(P,b ← 1 无 2CBI P,b I/O 寄存器位清零I/O(P,b ← 0 无 2LSL Rd 逻辑左移Rd(n+1 ← Rd(n, Rd(0 ← 0 Z,C,N,V 1LSR Rd 逻辑右移Rd(n ← Rd(n+1, Rd(7 ← 0 Z,C,N,V 1ROL Rd 带进位循环左移Rd(0← C,Rd(n+1← Rd(n,C← Rd(7 Z,C,N,V 1 ROR Rd 带进位循环右移Rd(7← C,Rd(n← Rd(n+1,C← Rd(0 Z,C,N,V 1 ASR Rd 算术右移Rd(n ← Rd(n+1, n=0..6 Z,C,N,V 1SWAP Rd 高低半字节交换Rd(3..0← Rd(7..4,Rd(7..4← Rd(3..0 无 1 BSET s 标志置位SREG(s ← 1 SREG(s 1BCLR s 标志清零SREG(s ← 0 SREG(s 1BST Rr, b 从寄存器将位赋给T T ← Rr(b T 1BLD Rd, b 将 T 赋给寄存器位Rd(b ← T 无 1SEC 进位位置位C ← 1 C 1CLC 进位位清零C ← 0 C 1SEN 负标志位置位N ← 1 N 1CLN 负标志位清零N ← 0 N 1SEZ 零标志位置位Z ← 1 Z 1CLZ 零标志位清零Z ← 0 Z 1SEI 全局中断使能I ← 1 I 1CLI 全局中断禁用I ← 0 I 1SES 符号测试标志位置位S ← 1 S 1CLS 符号测试标志位清零S ← 0 S 1SEV 2 的补码溢出标志置位V ← 1 V 1CLV 2 的补码溢出标志清零V ← 0 V 1SET SREG 的 T 置位T ← 1 T 1CLT SREG 的 T 清零T ← 0 T 1SEH SREG 的半进位标志置位H ← 1 H 1CLH SREG 的半进位标志清零H ← 0 H 1MCU 控制指令NOP 空操作无 1SLEEP 休眠 ( 见对睡眠功能的特殊说明无 1WDR 复位看门狗 ( 见对 WDR/timer 的特殊说明无 1。