2012-09-03 41 views
0

对于内联asm代码,我使用vC++编译器的__asm和用于linux下gcc的__asm__()asm()构造。 (英特尔/在& t语法相应)多线程支持Inline Asm(x86)

有没有办法来声明内置程序集(x86)在C中为他们都以通用的方式吗?

P.S.用于合并两者的自动化工具也是可以接受的。

+2

源文件中的汇编程序一直是编译器特定的扩展。 –

+1

简单的答案是否定的。解决方案是将汇编代码放入一个宏中,并为每个平台#ifdef。 – Neil

+1

此时,使用YASM并单独链接asm代码变得更容易。它不会内联,但它可以与GCC,MSVC和其他工作。 – harold

回答

5

将程序集放入宏中,并使用预处理器生成正确的代码。

#ifdef GCC 
#define MY_ASM_CODE __asm() { blah blah blah} 
#endif 

#ifdef MSVC 
#define MY_ASM_CODE __asm { blah blah blah } 
#endif 

int main(void) 
{ 
    MY_ASM_CODE; 
    return 0; 
} 
+0

你不是这个意思:'#define MY_ASM_CODE __asm'和'#define MY_ASM_CODE __asm()'?所以你可以输入:'MY_ASM_CODE {asm code here}' - 虽然我从来没有使用asm代码,所以我可能是错的... – Rookie

+3

@Rookie - 不,对于不同的编译器,asm代码本身的格式也不同。因为它是针对不同的处理器和不同的模式(32/64位)。有*是*在C编写代码的原因:-) –

+0

谢谢。虽然,我所寻找的并不是一个平静的东西 - 而是一个统一的方式来做同样的“罢工”,你基本上建议我分别写两个内联,这是我的观点。 – dalimama

0

作为替代...

我想你使用Visual C,因为它是一个Windows平台?

为什么不在Windows和Linux平台上使用gcc?

然后它是相同的源和相同的汇编格式!