VC编程有关问题解析:关于将汇编代码段定义成宏的有关问题
VC编程问题解析:关于将汇编代码段定义成宏的问题
原问题:
有一个需要多处使用的汇编代码段,我把它定义成宏,其中有标号,例如:
#define MACRO1() _asm { \
nop; \
nop; \
jmp label100; \
nop; \
nop; \
label100: \
}
调用时出错:Multiple declaration for 'label100 '
答案:
#define MACRO1__(NO) \
__asm nop \
__asm nop \
__asm jmp label##NO \
__asm nop \
__asm nop \
__asm {} label##NO:
#define MACRO1_(NO) MACRO1__(NO) // 感谢 hpho 和 littlesweetmelon
#define MACRO1 MACRO1_(__LINE__)
int main()
{
MACRO1;
MACRO1;
}
说明:
1。汇编中分号是注释,使用分号没法写到同一行,所以改 _asm{} 为数个 _asm,并去掉分号
2。标签前加个 __asm{} 是中断前一个__asm的词法解析
3。看似无用的#define MACRO1_(NO) MACRO1__(NO)交给 hpho 和 littlesweetmelon 两个大神去解释。
原问题:
有一个需要多处使用的汇编代码段,我把它定义成宏,其中有标号,例如:
#define MACRO1() _asm { \
nop; \
nop; \
jmp label100; \
nop; \
nop; \
label100: \
}
调用时出错:Multiple declaration for 'label100 '
答案:
#define MACRO1__(NO) \
__asm nop \
__asm nop \
__asm jmp label##NO \
__asm nop \
__asm nop \
__asm {} label##NO:
#define MACRO1_(NO) MACRO1__(NO) // 感谢 hpho 和 littlesweetmelon
#define MACRO1 MACRO1_(__LINE__)
int main()
{
MACRO1;
MACRO1;
}
说明:
1。汇编中分号是注释,使用分号没法写到同一行,所以改 _asm{} 为数个 _asm,并去掉分号
2。标签前加个 __asm{} 是中断前一个__asm的词法解析
3。看似无用的#define MACRO1_(NO) MACRO1__(NO)交给 hpho 和 littlesweetmelon 两个大神去解释。