注册 登录
编程论坛 汇编论坛

调用C库的printf函数为什么不能输出

appleVinegar 发布于 2010-11-04 16:34, 1953 次点击
.386
.model flat, stdcall
option casemap:none

includelib F:\masm32\lib\msvcrt.lib
printf PROTO C: ptr sbyte,:vararg

.data
szMsg   byte    "Hello World!", 0ah, 0

.code
start:
        invoke printf, offset szMsg
        ret

end start

汇编链接都没用出错,但运行的时候却不能再屏幕上显......
请大家帮忙看下哪里出错了?
11 回复
#2
zklhp2010-11-04 21:59
只有本站会员才能查看附件,请 登录


自己看有么有输出。。。
#3
zklhp2010-11-04 22:00
只有本站会员才能查看附件,请 登录



。。。。。。。。。。。
#4
appleVinegar2010-11-05 17:18
我用的是masm32, 重新链接了一下  这次出错了.....
LINK: error LNK2001:unresolved external symbol _mainCRTStartup
hello.exe: fatal error LNK1120:1 unresolved externals
请问这是怎么回事啊 ? 谢谢
#5
appleVinegar2010-11-05 17:19
只有本站会员才能查看附件,请 登录
#6
zklhp2010-11-05 17:43
/SUBSYSTEM:CONSOLE /nologo

链接参数 没问题罢。。

包含文件的路径 没问题罢

end start 写的没错罢

我给的那个是在masmplus里的 直接用masm32包的话 除了路径要改 其他不用改的。。
#7
appleVinegar2010-11-05 22:57
我是用masm32编辑器直接进行编译和链接的  。
我试了下用cmd  可以用ml /c hello.asm  但是ml /c/coff  hello.asm 就会出错!
#8
appleVinegar2010-11-05 23:00
加上/coff 就是提示无效参数行
MASM: warning A4018: invalid command-line option: /c/coff
MASM: fatal error A1017: missing source filename
#9
zklhp2010-11-06 03:25
invalid command-line option: /c/coff

知道这是嘛意思吗 不明白百度。。
#10
东海一鱼2010-11-06 18:44
这个是因为楼主没有指定程序入口点所致。

在LINK时加上参数  /entry:start 即可。 或者在你的代码中写成如下格式亦可:
.....
.code
 start:
   ......
   ......
end start   // 关键,这里就是指示你的程序入口点。 没有这个,而且也没有在LINK时用/entry:xxxx指出入口点的话。LINK默认是要找C runtime的

_mainCRTStartup(控制台程序)或 _winmainCRTStartup(窗口程序)的入口符号的(因为MASM32 的link程序是从vc的环境提取的)。



[ 本帖最后由 东海一鱼 于 2010-11-6 18:45 编辑 ]
#11
appleVinegar2010-11-06 23:31
[quote]以下是引用appleVinegar在2010-11-4 16:34:12的发言:

.386
.model flat, stdcall
option casemap:none

includelib F:\masm32\lib\msvcrt.lib
printf PROTO C: ptr sbyte,:vararg

.data
szMsg   byte    "Hello World!", 0ah, 0

.code
start:
        invoke printf, offset szMsg
        ret

end start


后面有end start啊 !
#12
appleVinegar2010-11-06 23:42
你们不用masm32的吗?  是不是设置错了什么的! 但是用cmd也不行就奇怪了! 我下个masmplus试试
1