导入NASM不起作用?

我想在Windows 7(与NASM)上编译下面的代码:

[BITS 32] extern ExitProcess import ExitProcess kernel32.dll extern MessageBoxA import MessageBoxA user32.dll segment .data use32 Caption db 'Caption Text',0 Text db "My MessageBox Text.",0 segment .code use32 ..start: push dword 0 push dword Caption push dword Text push dword 0 call [MessageBoxA] push dword 0 call [ExitProcess] 

为了编译这个,我尝试了nasm -o test.o test.asm ,但是接着说:

 test.asm:4: error: parser: instruction expected test.asm:6: error: symbol `import' redefined test.asm:6: error: parser: instruction expected 

为什么不起作用?

编辑:好的。 简单的错误… nasm -o test.o -f obj test.asm工程…

你不应该使用Obj。 这是为了DOS而不是Windows。 是的,你可以在你的ASM代码中使用大量的编译器指令来使它在Windows中工作,但是如果你使用Win32编译,那么你最终将得到专门用于Windows的代码。 不幸的是,编写NASM的人会这样做,即导入在Win32模式下不起作用(即使导入是非常标准的,而且需要在Windows中工作)。 更不幸的是,写NASM的人似乎已经停止了添加/改进/升级程序,基本上已经放弃了这个项目。 而且社区没有办法修复这个bug(NASM的源代码并没有公开提供),这给我们留下了一个非常糟糕的产品!