首页 > 解决方案 > 尝试编译程序集时如何调试“未解决的外部”错误?

问题描述

我正在使用 Visual Studio 2013 并尝试编写“原始”程序集。我刚开始学习汇编,所以我不太了解它,但如果可能的话,我想编写汇编,而不用 C/C++ 或任何其他语言包装它。

我有一个文件 main.asm,其中包含我试图运行的以下代码。我只是想确认我可以运行一个 asm 程序,以便在阅读汇编的工作原理时可以使用代码。

.MODEL FLAT
.code
    neg eax
    add eax,5 ;eax = eax -5
END

编译时,我收到以下错误:

Error   1   error LNK2001: unresolved external symbol _main 
Error   2   error LNK1120: 1 unresolved externals

我该如何解决这个问题并了解正在发生的事情?

标签: visual-studioassemblylinker-errorsmasm

解决方案


CRT 启动代码想要调用一个名为main(或_main在 asm 中)的函数。你没有提供一个,所以你的程序没有链接。

main与编译缺少函数的 C 程序完全相同的错误。去寻找一些 MASM 语法 hello world 的例子,或者声明一个函数。例如,Windows 下如何用汇编程序编写 hello world?有一个 MASM 答案(这个问题被标记为 NASM,所以大多数答案都是针对 NASM 的,这是英特尔语法汇编的另一种主要风格。)

SO 上的其他点击包括x86 masm hello world,它从静态可执行文件手动调用 CRT init 函数,因此如果您只是编写相当于简单 C 程序的内容,那么这比您需要的更复杂。


和/或查看编译器生成的 asm 输出以了解它是如何使用PROC/END的。 http://godbolt.org/安装了 MSVC,以及 gcc / clang(发出 GAS 语法)


推荐阅读