2014-10-17 54 views
0

我已经在Visual Studio中的windows C++项目中创建了解如何编写asm函数。 所以在我的项目,我已经得到了hello.asm这个简单的代码:将汇编函数.asm链接到Visual Studio 2012中的C++项目

.686 
.MODEL FLAT 
.STACK 
.DATA 
.CODE 

hello PROC 
xor eax,eax 
ret 
hello ENDP 

END 

和asm_test.cpp与主要功能如下:

#include "stdafx.h" 
#include <Windows.h> 
extern "C" void hello(); 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    hello(); 
    return 0; 
} 

所以一般ML.EXE可是没有任何问题编译asm文件hello.obj 但hello()函数doesnt'知道应该从哪里采取。这是编译器告诉我的。

1>------ Построение начато: проект: asm_test, Конфигурация: Debug Win32 ------ 
1> Assembling hello.asm... 
1>asm_test.obj : error LNK2019: ссылка на неразрешенный внешний символ _hello в функции _wmain 
1>G:\renderer\asm_test\Debug\asm_test.exe : fatal error LNK1120: неразрешенных внешних элементов: 1 
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ========== 

对不起,这是对russion,但很显然,它不能找到Hello功能

回答

1

变化hello_hello PLZ。对于您的hello.asm,应该是:

.686 
.MODEL FLAT 
.STACK 
.DATA 
.CODE 

_hello PROC 
xor eax,eax 
ret 
_hello ENDP 

END 
+0

谢谢!它的工作,虽然它仍然不明显,为什么它应该是这样的。你能提供一个小的解释吗? – Antiusninja 2014-10-17 19:36:15

+0

@Antiusninja虽然你的代码引用在'main'中函数'hello'为'hello()',编译器会将它转换为'_hello()',这就是为什么链接器找不到符号。 – 2014-10-18 00:21:53