You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在MASM中编写Win32汇编Hello World程序运行无输出如何解决

问题原因和修复方案

核心问题点

  • 字符串格式错误:MASM不会解析字符串中的\n为换行符,且代码中字符串未添加C风格要求的末尾\0结束符,导致printf无法正确读取要输出的内容。
  • 栈不平衡:C标准库的printf使用cdecl调用约定,调用者需要在函数返回后手动清理入栈参数。代码中压入了4字节的字符串偏移量,调用printf后未恢复栈指针,会引发运行时逻辑异常。
  • 链接参数缺失:未明确指定生成控制台子系统程序,链接器可能默认生成GUI子系统程序,该类程序默认不会绑定控制台标准输出流,运行后无可见输出。

修改后代码

.386
.model flat, stdcall
option casemap :none

EXTERN printf :PROC
EXTERN ExitProcess :PROC

.data
    HelloWorld db "Hello World!", 0Dh, 0Ah, 0

.code
main:
  push offset HelloWorld
  call printf
  add esp, 4
  
  push 0
  call ExitProcess
end main

编译链接命令

编译命令保持不变:
ml.exe /c HelloWorld.asm

链接命令调整为:
link HelloWorld.obj libcmt.lib kernel32.lib /subsystem:console

如果不需要显式调用ExitProcess,删除对应声明和调用代码后,链接命令可省略kernel32.lib,但仍需保留/subsystem:console参数。

内容的提问来源于stack exchange,提问作者darek_911

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:45:03