我正在使用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
我该如何解决这个问题并了解正在发生的事情?
答案 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语法)