主题:多处使用的汇编代码段,如何解决标号重复定义?
rat2003
[专家分:0] 发布于 2007-01-21 13:33:00
C++ Builder
有一个需要多处使用的汇编代码段,我把它定义成宏,其中有标号,例如:
#define MACRO1() _asm { \
nop; \
nop; \
jmp label100; \
nop; \
nop; \
label100: \
}
调用时出错:Multiple declaration for 'label100'
MACRO1();
//...其他代码
MACRO1();
//...其他代码
MACRO1();
各位,帮忙想想办法吧?
回复列表 (共5个回复)
沙发
bruceteen [专家分:42660] 发布于 2007-01-22 16:55:00
http://www.vckbase.com/bbs/viewtopic.asp?id=2864038&pg=1
板凳
rat2003 [专家分:0] 发布于 2007-01-23 13:45:00
这么办法能解决问题。谢谢!
不过,还是有点麻烦。因为标号得程序员定义。如:
MACRO1(100);
MACRO1(101);等等
编译器不能自己分配吗?
我印象当中,有些汇编器能。方法是用"local"来定义一个标号。如:
TEST1 MACRO
LOCAL label1 ;<----定义一个局部标号,引用时汇编器能自己分配
nop
nop
jmp label1
nop
nop
label1:
ENDM
3 楼
bruceteen [专家分:42660] 发布于 2007-01-23 17:32:00
我不是给你答案了嘛
4 楼
rat2003 [专家分:0] 发布于 2007-01-25 13:13:00
能行,谢谢!
5 楼
rat2003 [专家分:0] 发布于 2007-01-25 13:35:00
问题已解决。办法如下:
#define MACROI(NO) __asm \
{ \
nop; \
nop; \
jmp label##NO; \
nop; \
nop; \
label##NO: \
}
#define MACROT(NO) MACROI(NO)
#define MACRO MACROT(__LINE__)
调用:
MACRO;
MACRO;
我来回复