我正在使用visual c ++ express编译器来编译asm32:
; Example assembly language program -- adds 158 to number in memory
; Author: R. Detmer
; Date: 1/2008
.586
.MODEL FLAT
.STACK 4096 ; reserve 4096-byte stack
.DATA ; reserve storage for data
number DWORD -105
sum DWORD ?
.CODE ; start of main program code
main PROC
mov eax, number ; first number to EAX
add eax, 158 ; add 158
mov sum, eax ; sum to memory
mov eax, 0 ; exit with return code 0
ret
main ENDP
END ; end of source code
上面给出了一个链接错误,而这个:
..
.CODE ; start of main program code
main:nop
mov eax, number ; first number to EAX
add eax, 158 ; add 158
mov sum, eax ; sum to memory
mov eax, 0 ; exit with return code 0
ret
end main ; end of source code
..
非常有用!
唯一的区别是main:nop vs main proc
这两者之间有什么区别?为什么一个被end main
关闭而另一个被main endp main
关闭?
这是我得到的错误:
1>------ Build started: Project: asm1, Configuration: Release Win32 ------
1> Assembling [Inputs]...
1>LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup
1>C:\Users\...\Downloads\asm1\Release\asm1.exe : fatal error LNK1120: 1 unresolved externals
答案 0 :(得分:3)
它与PROC指令没有任何关系。您的原始代码缺少“' main' END指令的操作数。其中指定了程序的入口点。如果没有,链接器将尝试查找可执行文件_WinMainCRTStartup的默认入口点。而这失败是因为你没有那个并且没有连接CRT。
修正:
main PROC
; etc...
main ENDP
END main
答案 1 :(得分:1)
Hans Passant绝对正确。
此外,您可能会发现这些链接很有用: