【问题标题】:Using MASM to generate Object files and link them with MSVC Object Files使用 MASM 生成对象文件并将它们与 MSVC 对象文件链接
【发布时间】:2019-03-01 15:14:45
【问题描述】:

我想将只包含一个函数的程序集文件与生成的目标文件链接起来。我想知道如何在 MASM 中创建 .obj 文件,我还需要知道如何创建这样的函数。这对于将两个整数相加的函数是否足够?

intadd PROC int1:DWORD int2:DWORD
mov eax, int1
mov ebx, int2
add eax, ebx
intadd ENDP

如果我创建并链接 obj 文件,我可以这样做

int x = intadd(1,1);

收到 2 个?

总结一下:如果 MASM 包含上述宏,我需要知道如何从 MASM 创建 .obj 文件,以及如果我的代码不起作用,如何从 HLL 调用宏。

【问题讨论】:

    标签: c linker masm


    【解决方案1】:

    我相信 Visual C++ 的标准安装也将安装 ml.exeml64.exe,它们都会生成与该版本 Visual C++ 的 link.exe 兼容的 .obj 文件。

    您可以做的是,将带有ml /c asmfile.asm 的程序集文件组装成.obj 文件后,在.c 文件中添加以下行:

    extern int intadd(DWORD int1, DWORD int2);
    

    使用cl /c cfile.c 编译您的.c 代码,然后使用link asmfile.obj cfile.obj /OUT:exefile.exe 将两个.obj 文件链接到最终的可执行文件中。

    但是请注意,您的汇编函数是无效的,因为一旦您丢失了 ret 语句 - 调用它会使您的程序崩溃。

    如果您正在寻找有关如何在 Visual Studio 中将程序集文件集成到 Visual C++ 项目中的信息,this question 提供了一些信息。

    【讨论】:

      猜你喜欢
      • 2019-07-24
      • 2020-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多