将变量传递给nasm过程

时间:2016-03-27 07:32:59

标签: c assembly nasm masm

我有一个.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中的过程,因为它只是一个标签?我如何使用extern" C"中描述的变量?在我的NASM代码中的.c模块?

我也听说过,有一个关于使用stack将参数传递给过程的约定。我可以在某种程度上使用吗?你能告诉我一些例子吗?

1 个答案:

答案 0 :(得分:0)

有几点需要指出:

  • 您的汇编程序通过寄存器传递参数 堆栈或两者的组合。检查您的平台ABI。
  • 要从C调用的汇编程序函数通常具有下划线前缀_。您可以为要公开的每个函数执行此操作:

section .text global _func

_func:
     ; Do stuff
    ret

或者通过nasm编译参数(将对所有函数执行)--prefix _

  • 最后,如果从C ++程序调用,则只需要extern "C"

玩得开心!