iwaswzq 阅读(2993) 评论(2)

有个朋友要把嵌入式汇编代码块定义成宏,例如

void func()
{
  ...
    __asm {
           mov     dx, 0 
           mov     ax, 0 
           };
   ...
}
用宏定义这个代码块的时候因为必须使用续行符\, 所以想来想去只有这样了:

#define MYINLINEASM  __asm{ \
             __asm      mov     dx, 0 \
             __asm      mov     ax, 0 \
             __asm      };

(其实括号不要也行,因为这里每行都有__asm关键字了)

void func()
{
   ...
   MYINLINEASM
   ...
}

否则的话,会由于续行符的问题引起编译错误,例如:
#define MYINLINEASM  __asm{ \
                                                  mov     dx, 0 \
                                                  mov     ax, 0 \
                                                   };

这样就不行了。过去几天了,又想起来,特此记之。


评论列表
Terry
re: 宏定义里面的换行
不知文中用的是什么编译器。
在gcc里似乎可以这样:
#define MYINLINEASM  __asm{"mov     dx, 0" \
                                                 "mov     ax, 0" \
                                                   };

紫水晶
re: 宏定义里面的换行
编译虽能过,但执行确并非预期

发表评论
切换编辑模式