尝试编译程序集时如何调试“无法解析的外部”错误?

时间:2018-07-28 16:05:19

标签: visual-studio assembly linker-errors masm

我正在使用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

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

1 个答案:

答案 0 :(得分:0)

CRT启动代码希望调用一个名为main(或asm中的_main)的函数。您没有提供一个,因此您的程序无法链接。

与编译缺少main函数的C程序完全相同的错误。去寻找一些MASM语法问候世界的例子,或者声明一个函数。例如,How to write hello world in assembler under Windows?有一个MASM答案(该问题被标记为NASM,因此,大多数答案是针对NASM(另一种主要的intel-syntax汇编)。)

SO上的其他命中包括x86 masm hello world,它可以从静态可执行文件中手动调用CRT初始化函数,因此,如果您只写一个简单的C程序,它就会比您需要的复杂。


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