对于内联asm代码,我使用vC++编译器的__asm
和用于linux下gcc的__asm__()
或asm()
构造。 (英特尔/在& t语法相应)多线程支持Inline Asm(x86)
有没有办法来声明内置程序集(x86)在C中为他们都以通用的方式吗?
P.S.用于合并两者的自动化工具也是可以接受的。
对于内联asm代码,我使用vC++编译器的__asm
和用于linux下gcc的__asm__()
或asm()
构造。 (英特尔/在& t语法相应)多线程支持Inline Asm(x86)
有没有办法来声明内置程序集(x86)在C中为他们都以通用的方式吗?
P.S.用于合并两者的自动化工具也是可以接受的。
将程序集放入宏中,并使用预处理器生成正确的代码。
#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;
}
你不是这个意思:'#define MY_ASM_CODE __asm'和'#define MY_ASM_CODE __asm()'?所以你可以输入:'MY_ASM_CODE {asm code here}' - 虽然我从来没有使用asm代码,所以我可能是错的... – Rookie
@Rookie - 不,对于不同的编译器,asm代码本身的格式也不同。因为它是针对不同的处理器和不同的模式(32/64位)。有*是*在C编写代码的原因:-) –
谢谢。虽然,我所寻找的并不是一个平静的东西 - 而是一个统一的方式来做同样的“罢工”,你基本上建议我分别写两个内联,这是我的观点。 – dalimama
作为替代...
我想你使用Visual C,因为它是一个Windows平台?
为什么不在Windows和Linux平台上使用gcc?
然后它是相同的源和相同的汇编格式!
源文件中的汇编程序一直是编译器特定的扩展。 –
简单的答案是否定的。解决方案是将汇编代码放入一个宏中,并为每个平台#ifdef。 – Neil
此时,使用YASM并单独链接asm代码变得更容易。它不会内联,但它可以与GCC,MSVC和其他工作。 – harold