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

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

验证步骤

  1. 用原命令重新汇编:
    nasm -f win64 .\hello_world.asm -o .\hello_world.obj
    
  2. 链接生成可执行文件:
    gcc hello_world.obj -o hello_world.exe -lkernel32 -lmsvcrt
    
  3. 运行.\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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:24:50