C++ 具有汇编插件的跨平台并行应用程序

C++ 具有汇编插件的跨平台并行应用程序,c++,objective-c,c,assembly,C++,Objective C,C,Assembly,我正在学习我的课程,有一个关于使用内联汇编程序的跨平台并行应用程序的问题,你能帮我了解一些信息吗? 我发现这里有英特尔和AT&T(gas)汇编程序语法,这一切都取决于它。 谢谢。 如果我理解正确,任务是用C++汇编插件插入C++中的跨平台应用程序。因为MSVC和GCC使用不同的内联汇编程序语法,所以问题是如何实际执行。 一般来说,有两种选择,它们都非常简单: 1) 如果在Windows上使用MSVC,在其他平台上使用GCC,则只需将汇编器插入放入条件组: #ifdef _MSC_VER __as

我正在学习我的课程,有一个关于使用内联汇编程序的跨平台并行应用程序的问题,你能帮我了解一些信息吗?
我发现这里有英特尔和AT&T(gas)汇编程序语法,这一切都取决于它。

谢谢。

如果我理解正确,任务是用C++汇编插件插入C++中的跨平台应用程序。因为MSVC和GCC使用不同的内联汇编程序语法,所以问题是如何实际执行。 一般来说,有两种选择,它们都非常简单:

1) 如果在Windows上使用MSVC,在其他平台上使用GCC,则只需将汇编器插入放入条件组:

#ifdef _MSC_VER
__asm {
    mov eax, ebx
}
#elif defined(__GNUC__)
__asm__ ("movl %ebx, %eax");
#else
#error Unknown compiler
#endif
2) 如果必须在内联插入中放入更不复杂的逻辑,那么内联插入可能看起来很笨拙,因此您可能希望将汇编代码移动到单独的.asm(对于MSVC)或.s(对于GCC)文件中,并将其用作外部函数

首先,需要在C++中定义一个外部函数(也许在一个报头中):

那么GCC和MSVC的情况就有点不同了。 对于GCC,您需要向生成中添加一个.s文件:

    .text

    // function declaration
    .global some_func

    // copies ebx to eax
    .type some_func, @function

some_func:
    movl %ebx, %eax
    ret
对于MSVC,您将需要2个文件。一个是某种头(.inc)

另一个是你的.asm文件

    INCLUDE some_func.inc
    .data

    .code

some_func PROC
    OPTION PROLOGUE:NONE, EPILOGUE:NONE

    mov eax, ebx
    ret

some_func endp

end
显然,您需要告诉构建系统,使用MSVC工具集,它应该编译.asm,使用GCC,它应该编译.s


如果需要将参数传递给汇编函数,则必须了解目标平台的调用约定。对于MSVC,它们如下所示:和。GCC似乎遵循具体体系结构的应用程序二进制接口。

您想要什么样的信息?我想知道程序员可能遇到的一个问题,。。。总的来说,我需要揭示这一点topic@gixdev,这是相当模糊的。请试着问一个特定的问题。@gixdev-作为记录,您不能在Java中使用汇编器插入。对于Java应用程序,您必须将插入放入C/C++代码中,并使用JNI/JNA调用该代码。什么是“汇编器插入”?
some_func PROTO
    INCLUDE some_func.inc
    .data

    .code

some_func PROC
    OPTION PROLOGUE:NONE, EPILOGUE:NONE

    mov eax, ebx
    ret

some_func endp

end