在VS2008 pro里已经集成了MASM,经过相关设置后,编译出了程序,但是执行后,说少msvcr90.dll
39944
然后自己写了个C的程序在DEPEND中对比了下两个的导入表。
39946
39945
那个testprintf是执行正常的。
虽然两个都有引入msvcr90.dll
问下,这是为什么?
说来生成的OBJ文件应该是正确的,可能在LINK的时候出了问题,请教下怎么设置。
附源码,请教怎么在VS2008编译能正确执行。
;程序清单:cpuid.asm(读取CPU标识)
.586
.model flat,stdcall
Option casemap:none
includelib msvcrt.lib
printf PROTO C :dword,:vararg
.data
szVendorID byte 13 dup (0)
szFormatStr byte 'VendorID = %s; Processor SN = %08X%08X', 0ah
.code
start:
mov eax, 0
cpuid
mov dword ptr szVendorID, ebx
mov dword ptr szVendorID+4, edx
mov dword ptr szVendorID+8, ecx
mov eax, 3
cpuid
invoke printf, offset szFormatStr,
offset szVendorID, ecx, edx
ret
end start
附:
Visual Studio汇编语言环境配置
http://blog.creke.net/629.html
39944
然后自己写了个C的程序在DEPEND中对比了下两个的导入表。
39946
39945
那个testprintf是执行正常的。
虽然两个都有引入msvcr90.dll
问下,这是为什么?
说来生成的OBJ文件应该是正确的,可能在LINK的时候出了问题,请教下怎么设置。
附源码,请教怎么在VS2008编译能正确执行。
;程序清单:cpuid.asm(读取CPU标识)
.586
.model flat,stdcall
Option casemap:none
includelib msvcrt.lib
printf PROTO C :dword,:vararg
.data
szVendorID byte 13 dup (0)
szFormatStr byte 'VendorID = %s; Processor SN = %08X%08X', 0ah
.code
start:
mov eax, 0
cpuid
mov dword ptr szVendorID, ebx
mov dword ptr szVendorID+4, edx
mov dword ptr szVendorID+8, ecx
mov eax, 3
cpuid
invoke printf, offset szFormatStr,
offset szVendorID, ecx, edx
ret
end start
附:
Visual Studio汇编语言环境配置
http://blog.creke.net/629.html
搞定了,我自己来答吧。后来在系统里搜msvcr又看到了msvcr90.dll复制到环境变量里的一个目录,执行报错,用depend查,printf出现了在导入表那。不知道,是不是在msvcr90.dll要调用printf,是不是要做一些相关初始化工作。
正确的是
配置属性-链接器-输入 中,将附加依赖项改为:
C:masm32lib*
我的MASM 9装在C:masm32
这样链接时,msvcrt.lib就会使用masm9的那个引入库,会链接到MSVCR.DLL,而不是那个msvcr90.dll。
正确的是
配置属性-链接器-输入 中,将附加依赖项改为:
C:masm32lib*
我的MASM 9装在C:masm32
这样链接时,msvcrt.lib就会使用masm9的那个引入库,会链接到MSVCR.DLL,而不是那个msvcr90.dll。