#ifndef _INTRINS_H_
#define _INTRINS_H_

/* warning: __push __pop 使用堆栈临时保存 sfr 数据，必需成对使用!  
     __push(x);
         ...  // 保护代码块
         __pop(x)；  //缺少无该语句编译不会出错，但运行错误!
*/
        #define __push(x)      __asm push _##x  __endasm  /* void _push_ (unsigned char _sfr); */
        #define __pop(x)       __asm pop  _##x  __endasm  /* void _pop_  (unsigned char _sfr); */

        #define _push_        __push　       /*兼容 keil c51*/
        #define _pop_        __pop　        /*兼容 keil c51*/
        
/*   安全使用保护宏： 
     pushSfr(x);
         ...                 // 受保护代码块
         popSfr(x)；         // 缺少无该语句编译出错，确保生成正确代码。
*/
    #define pushSfr(x)  do{\
                                  __push(x)

        #define  popSfr(x)     __pop(x);\
                              }while(0)

#endif //_INTRINS_H_