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