我有一个.asm模块,我想在.c模块中使用它的过程。
因为我在使用MASM,所以我的代码看起来像:

SECTION .text

func PROC arg1: DWORD, arg2:DWORD
...
ret
ENDPROC

在.c模块中:
extern "C"{
    void func (int arg1, int arg2);
}

现在我使用ubuntu并决定尝试NASM。
所以我有以下问题:既然nasm只是一个标签,我如何将参数传递给它呢?如何在NASM代码中使用.C模块中外部“C”下描述的变量?
我还听说,有一个关于使用stack向过程传递参数的约定。我能用一下这里吗?你能给我举几个例子吗?

最佳答案

有几点需要指出:
汇编程序通过寄存器传递参数
堆栈或两者的组合。检查你的站台。
要从C调用的汇编函数通常具有下划线前缀_。您可以对要公开的每个函数执行以下操作:
section .textglobal _func

_func:
     ; Do stuff
    ret

或者通过nasm compile参数(它将对所有函数执行此操作)--prefix _
最后,如果从C++程序调用的话,您只需要。
玩得高兴!

关于c - 将变量传递给nasm程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36244943/

10-11 23:09