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

为何运行x86-64 Intel汇编代码无输出?期望打印hello

问题分析与修复方案

你的代码无法输出"hello"的核心问题是错误地将字符串字面量直接赋值给rsi寄存器——在Linux x86_64系统调用中,write(rax=1)要求rsi传入的是字符串的内存地址,而非字符的ASCII值。

修复后的代码

section .data
    msg db "hello"   ; 定义字符串数据,存储在内存中

section .text
global _start

_start:
mov rax, 1        ; sys_write系统调用号
mov rdi, 1        ; 文件描述符1(标准输出)
mov rsi, msg      ; 传入字符串的内存地址
mov rdx, 5        ; 字符串长度
syscall

mov rax, 60       ; sys_exit系统调用号
xor rdi, rdi      ; 退出码0
syscall

关键说明

  • 新增.data段存储字符串:字符串需要被加载到内存中,才能通过地址引用它。db指令用于定义字节数据,"hello"会被依次存储为'h'、'e'、'l'、'l'、'o'的ASCII值。
  • 修正rsi的赋值:mov rsi, msg将字符串的起始地址加载到rsi,这符合write系统调用的参数要求。

编译运行命令

用nasm和ld编译运行:

nasm -f elf64 yourfile.asm -o yourfile.o
ld yourfile.o -o yourfile
./yourfile

执行后就能在终端看到"hello"输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 18:52:24