回 帖 发 新 帖 刷新版面

主题:多处使用的汇编代码段,如何解决标号重复定义?

C++ Builder 
有一个需要多处使用的汇编代码段,我把它定义成宏,其中有标号,例如: 
#define MACRO1() _asm { \ 
               nop; \ 
               nop; \ 
               jmp     label100; \ 
               nop; \ 
               nop; \ 
        label100: \ 
        } 

调用时出错:Multiple declaration for 'label100' 
     MACRO1(); 
       //...其他代码 
       MACRO1(); 
     //...其他代码 
       MACRO1(); 

各位,帮忙想想办法吧? 

回复列表 (共5个回复)

沙发

http://www.vckbase.com/bbs/viewtopic.asp?id=2864038&pg=1

板凳

这么办法能解决问题。谢谢! 

不过,还是有点麻烦。因为标号得程序员定义。如: 
        MACRO1(100); 
        MACRO1(101);等等 

编译器不能自己分配吗? 
我印象当中,有些汇编器能。方法是用"local"来定义一个标号。如: 

TEST1   MACRO 
        LOCAL     label1       ;<----定义一个局部标号,引用时汇编器能自己分配 
        nop 
        nop 
        jmp        label1 
        nop 
        nop 
label1: 
        ENDM

3 楼

我不是给你答案了嘛

4 楼

能行,谢谢!

5 楼

问题已解决。办法如下:

#define MACROI(NO) __asm        \
        {                       \
                nop;            \
                nop;            \
                jmp label##NO;  \
                nop;            \
                nop;            \
        label##NO:              \
        }
#define MACROT(NO) MACROI(NO)
#define MACRO      MACROT(__LINE__)

调用:
MACRO;
MACRO;

我来回复

您尚未登录,请登录后再回复。点此登录或注册