Windows x64环境下汇编Hello World程序运行无输出求助
Windows x64汇编Hello World无输出问题解决
核心错误原因
你误用了Linux x86_64的函数调用约定,Windows x64平台(MinGW/GCC环境)采用**快速调用(fastcall)**约定,函数的第一个参数需要放在RCX寄存器,而非你代码里的RDI(这是Linux System V约定的第一个参数寄存器)。因为printf没拿到正确的格式字符串地址,所以执行后没有任何输出。
修正后的汇编代码
extern printf section .data msg db "Hello, World", 10, 0 section .text global main main: push rbp mov rbp, rsp ; 规范栈帧初始化,可选但推荐 mov rcx, msg ; Windows x64下第一个参数传递到RCX mov rax, 0 call printf pop rbp mov rax, 0 ret
验证步骤
- 用原命令重新汇编:
nasm -f win64 .\hello_world.asm -o .\hello_world.obj - 链接生成可执行文件:
gcc hello_world.obj -o hello_world.exe -lkernel32 -lmsvcrt - 运行
.\hello_world.exe,即可看到"Hello, World"的输出。
额外说明
Windows x64约定中,前4个整型/指针参数依次使用RCX、RDX、R8、R9传递,剩余参数通过栈传递;而Linux x86_64的System V约定则用RDI、RSI、RDX、RCX、R8、R9传递前6个参数,写跨平台汇编时需要注意区分。
内容的提问来源于stack exchange,提问作者LazhyCros5
相关产品推荐
相关产品推荐

