0
我有一个.asm模块,我想在.c模块中使用它的过程。 因为我是用我的MASM代码会看起来像:将变量传递给nasm过程
SECTION .text
func PROC arg1: DWORD, arg2:DWORD
...
ret
ENDPROC
,并以.c模块:
extern "C"{
void func (int arg1, int arg2);
}
现在我使用Ubuntu,并决定尝试NASM。 所以我有以下问题:如何将参数传递给nasm中的过程,因为它只是一个标签?我如何在我的NASM代码中使用.c模块中的extern“C”下描述的变量?
我也听说,关于将参数传递给使用堆栈的过程有一个约定。我可以在这里以某种方式使用吗?请给我一些例子吗?
这一切都取决于。你是否想在Ubuntu上编写64位代码或32位代码?调用约定根据您要生成的代码而有所不同。有了_NASM_,您必须了解调用约定,因为_MASM_通过PROC语句隐藏了大部分细节。 –
我打算在x86和x86-64上写一个描述GCC函数调用ABI的答案,但后来我在标签为'C'的后面看到了'extern“C”{...}'。育。在我看来,那些以这种错误观念开始的人太过任性。 –