/*************************************
*** AVR单片机C语言调用汇编指令集的宏 ***
*************************************/
#ifndef _ASM_H_
#define _ASM_H_
/********************
*** 算术和逻辑指令 ***
********************/
// ### ADD ### 两个寄存器相加 (dest = dest + src)
#define ASM_ADD(dest, src) asm volatile ("add %0, %1" : "=r" (dest) : "r" (src))
// ### ADC ### 两个寄存器带进位位相加 (dest = dest + src + carry)
#define ASM_ADC(dest, src) asm volatile ("adc %0, %1" : "=r" (dest) : "r" (src))
// ### ADC_zero ### Add Carry To Register dest (dest = dest + carry), Special Form Of ADC
#define ASM_ADCzero(dest) asm volatile ("adc %0, __zero_reg__" : "=r" (dest) :)
// ### ADIW ### 立即数与字相加 (word = word - const)
#define ASM_ADIW(word, const) asm volatile ("adiw %0, %1" : "=w" (word) : "I" (const))
// ### SUB ### 两个寄存器相减 (dest = dest - src)
#define ASM_SUB(dest, src) asm volatile ("sub %0, %1" : "=r" (dest) : "r" (src))
// ### SUBI ### 立即数与寄存器相减 (reg = reg - const)
#define ASM_SUBI(reg, const) asm volatile ("subi %0, %1" : "=d" (reg) : "M" (const))
// ### SBC ### 两个寄存器带进位位相减 (dest = dest - src - carry)
#define ASM_SBC(dest, src) asm volatile ("sbc %0, %1" : "=r" (dest) : "r" (src))
// ### SBC_zero ### Subtract Carry From Register dest (dest = dest - carry), Special Form Of SBC
#define ASM_SBC_zero(dest) asm volatile ("sbc %0, __zero_reg__ " : "=r" (dest) :)
// ### SBIW ### 字与立即数相减 (reg = reg - const)
#define ASM_SBIW(word, const) asm volatile ("sbiw %0, %1" : "=w" (word) : "I" (const))
// ### AND ### 两个寄存器逻辑与 (dest = dest & src)
#define ASM_AND(dest, src) asm volatile ("and %0, %1" : "=r" (dest) : "r" (src))
// ### ANDI ### 寄存器与常数逻辑与 (reg = reg & const)
#define ASM_ANDI(reg, const) asm volatile ("andi %0, %1" : "=d" (reg) : "M" (const))
// ### OR ### 两个寄存器逻辑或 (dest = dest | src)
#define ASM_OR(dest, src) asm volatile ("or %0, %1" : "=r" (dest) : "r" (src))
// ### ORI ### 寄存器与常数逻辑或 (reg = reg | const)
#define ASM_ORI(reg, const) asm volatile ("ori %0, %1" : "=d" (reg) : "M" (const))
// ### EOR ### 两个寄存器异或 (dest = dest ^ src)
#define ASM_EOR(dest, src) asm volatile ("eor %0, %1" : "=r" (dest) : "r" (src))
// ### COM ### 1的补码 (reg = 0xFF - reg)
#define ASM_COM(reg) asm volatile ("com %0" : "=r" (reg) : "0" (reg))
// ### NEG ### 2的补码 (reg = 0x00 - reg)
#define ASM_NEG(reg) asm volatile ("neg %0" : "=r" (reg) : "0" (reg))
// ### SBR ### 寄存器的某些位置位 (reg = reg | mask)
#define ASM_SBR(reg, mask) asm volatile ("sbr %0, %1" : "=d" (reg) : "M" (mask))
// ### CBR ### 寄存器的某些