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

从Emu8086转向x86汇编:打印32位整数无输出问题排查

问题分析与解决

你的核心问题出在对write系统调用参数的理解上,具体错误点如下:

  • ecx参数传错了:32位Linux(Chromium OS基于Linux)的write系统调用中,ecx需要传入的是要输出数据的内存地址,而不是直接传数字1。你直接设ecx=1,相当于让CPU去读取内存地址0x00000001处的内容,这个地址属于内核空间或无效区域,自然没有有效输出。
  • edx参数设置不合理:edx是输出的字节数,你设为16,但你只想输出数字1对应的字符,字节数应该设为1,否则会输出后续内存中的垃圾数据。

修正后的示例代码

section .data
    num_char db '1'  ; 数字1的ASCII码是0x31,存储在data段

section .text
    global _start

_start:
    mov eax, 4        ; write系统调用号
    mov ebx, 1        ; 文件描述符1表示标准输出
    mov ecx, num_char ; 指向存储'1'的内存地址
    mov edx, 1        ; 输出1个字节
    int 0x80          ; 触发系统调用

    ; 调用exit系统调用正常退出程序
    mov eax, 1
    mov ebx, 0
    int 0x80

额外说明

如果要输出的是整数1的十进制数值(而非单个字符'1'),你还需要先把整数转换成对应的ASCII字符串——因为write只能输出字节流,无法直接输出整数。比如将整数1转换为字符串"1"后,再输出对应的字节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:19:57