.386
.model flat
.code
start:
mov eax,0a9d7c6e5h
sal eax,4
ret
end start
程序如上
ml /c /coff ..\myprogram\test.asm
link /subsystem:console test.obj编译连接
在LINK时报error LNK2001: unresolved external symbol _start
怎么回事?
后来在。MODEL FLAT后加了个,STDCALL就行了,又是怎么回事,分析下。。。。
------解决方案--------------------------------------------------------
model 后面加的STDCALL意思是该文件中的所有函数调用模式都为STDCALL(除非另行指定)
,显然连接器希望看到一个以STDCALL方式定义的符号,所以你后来加上STDCALL
link正确找到了符号。
------解决方案--------------------------------------------------------
这里的STDCALL就定义编译的时候的格式,会将上面的start编译成_Start;不然linker就找不到相应的函数开始地方
------解决方案--------------------------------------------------------
32位Windows程序只能采用平展模式(Flat),因为Win32程序使用一个连续的4GB主存空间。由于利用了应用程序接口API,其参数传递采用标准调用方式(Stdcall),所以存储模式伪指令应该是“.model flat,stdcall”。