Menu
CoddyTech

汇编在线编辑器

编写、运行和分享代码片段,无需任何配置。

Coddymain.asm
Output
Click Run to see the output here.

在浏览器里在线运行汇编

这是一个免费的在线汇编编译器,支持用 NASM 语法编写的 x86-64 代码。输入程序,点击“运行”,Coddy 就会用 nasm -f elf64 汇编、用 ld 链接,并在服务器端运行生成的 Linux 可执行文件,然后显示 stdout、stderr 和退出状态。无需安装任何东西:不需要 NASM、链接器、虚拟机,也不需要交叉编译器。

初始程序是一个完整的 _start 入口,它从标准输入读取一行,再用原始的 read、write 和 exit 系统调用写回一句问候,不依赖 libc。这才是汇编真正的工作方式:把参数放进 rax/rdi/rsi/rdx,执行 syscall,剩下的交给内核。每次运行时,都可以通过编辑器下方的标准输入面板给程序提供输入,就像用管道把数据传给真正的二进制程序一样。

这个汇编在线编辑器好用在哪里

  • 真正的 x86-64 NASM 工具链。源代码在 Linux 上用 nasm -f elf64 汇编、用 ld 链接,和你在本地输入的命令完全一样,所以这里的运行结果与真实机器上一致。
  • 直接使用 Linux 系统调用。初始程序通过 syscall 指令使用 read、write 和 exit,中间没有 libc,让你清楚地看到寄存器如何传递参数和返回值。
  • 支持标准输入。通过标准输入面板给程序传入字节,再用 0 号系统调用读取,适合经典的“读入名字、输出问候”练习,也适合更复杂的程序。
  • 零配置,即时反馈。不用安装 NASM,不用记链接参数,也不会遇到权限错误:打开页面,编辑器就已就绪。汇编器和链接器的报错会直接显示在输出里。

可以在汇编在线编辑器里试试这些

  • 用一次 write 系统调用输出一个固定字符串,再干净地 exit(0):这是最小的完整 x86-64 程序,也是理解 _start 和 syscall 如何配合的最快方法。
  • 从标准输入读到 .bss 缓冲区,去掉末尾的换行符,再原样输出:几乎所有依赖输入的汇编练习都是这个模式。
  • 在寄存器里把两个数相加,再手动把结果转换成 ASCII 数字,这样才能用 write 输出。你会由此明白,汇编里没有 print,只有字节和系统调用。

汇编在线编译器常见问题

这个在线编辑器用的是哪种汇编器和语法?
它使用 NASM(Netwide Assembler)和 Intel 语法,目标平台是 x86-64 Linux。代码用 nasm -f elf64 汇编、用 ld 链接。如果你习惯的是 AT&T/GAS 语法(%rax、movq 那种写法),请改写成 NASM 的 Intel 风格:mov rax, 1、section .text、global _start。
使用它需要安装 NASM 或链接器吗?

不需要。完整的工具链运行在服务器端的沙盒容器里。你在浏览器里写 NASM,点击“运行”,Coddy 就会为你汇编和链接程序。本地无需安装任何东西:不需要 NASM、ld,也不需要 Linux 虚拟机。

在这里怎么用汇编读取输入?
使用 read 系统调用(0 号):在 rax 中放 0(sys_read),在 rdi 中放 0(stdin),在 rsi 中放缓冲区地址,在 rdx 中放最大字节数,然后执行 syscall。你在编辑器下方标准输入面板里输入的内容,会在运行时传给你的程序。初始程序展示了完整的写法,包括去掉末尾的换行符。
为什么我的程序需要 _start 而不是 main?
因为初始程序用 ld 链接,没有 C 运行时。main 是 libc 的约定:C 的启动代码在完成准备工作后才调用它。直接用 ld 链接时没有 libc,内核会直接跳到 _start 标签,所以这里的每个程序都要定义 global _start。程序结束时,你还要自己用 exit 系统调用(60 号)干净地退出。
初学者也能用这个编译器学汇编吗?

能。从问候程序开始,改一改字符串,看看输出。然后试着读取输入、在寄存器里做算术,再手动把数字转换成文本。因为无需任何配置,每次运行都能立即得到反馈,你可以快速反复尝试,这正是培养对寄存器、内存和系统调用直觉的最快方法。

适合 Assembly 的实用工具

与 Assembly 在线编辑器搭配使用的免费浏览器工具,全部来自 Coddy。