当前位置: 代码迷 >> 汇编语言 >> START与STDCALL?该如何处理
  详细解决方案

START与STDCALL?该如何处理

热度:3702   发布时间:2013-02-26 00:00:00.0
START与STDCALL?
.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”。
  相关解决方案