Menu
Coddy logo textTech

Assembly Playground

Пишите, запускайте и делитесь фрагментами кода - без установки.

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

Запускайте Assembly онлайн в браузере

Это бесплатный онлайн-компилятор Assembly для кода x86-64, написанного в синтаксисе NASM. Наберите свою программу, нажмите «Запустить», и Coddy ассемблирует её с помощью nasm -f elf64, линкует через ld и запускает получившийся исполняемый файл Linux на сервере, а затем показывает вам stdout, stderr и код завершения. Устанавливать ничего не нужно: ни NASM, ни линкера, ни виртуальной машины, ни кросс-компилятора.

Стартовая программа — это полноценная точка входа _start, которая читает строку из стандартного ввода и пишет обратно приветствие, используя сырые системные вызовы read, write и exit, без libc. Именно так ассемблер и работает на самом деле: вы помещаете аргументы в rax/rdi/rsi/rdx, вызываете syscall, а остальное делает ядро. Используйте панель stdin под редактором, чтобы передавать входные данные вашей программе при каждом запуске, ровно как при перенаправлении данных в настоящий бинарник.

Чем полезен этот playground для Assembly

  • Настоящий тулчейн x86-64 NASM. Ваш исходник ассемблируется командой nasm -f elf64 и линкуется через ld на Linux — те же команды, что вы вводили бы локально, — так что то, что запускается здесь, соответствует тому, что запускается на реальной машине.
  • Прямые системные вызовы Linux. Стартовая программа использует read, write и exit через инструкцию syscall без libc на пути, поэтому вы видите точно, как регистры несут аргументы и возвращаемые значения.
  • Поддержка стандартного ввода. Передавайте байты своей программе через панель stdin и читайте их системным вызовом 0 — полезно для классических упражнений «прочитать имя, вывести приветствие» и не только.
  • Ноль настройки, мгновенная обратная связь. Не нужно устанавливать NASM, запоминать флаги линкера, нет ошибок доступа: откройте страницу — и редактор готов. Ошибки ассемблера и линкера возвращаются прямо в вывод.

Что можно попробовать в playground для Assembly

  • Вывести фиксированную строку одним системным вызовом write, а затем чистый exit(0) — самая маленькая полноценная программа x86-64 и самый быстрый способ увидеть, как _start и syscall сочетаются друг с другом.
  • Прочитать из stdin в буфер .bss, обрезать завершающий перевод строки и вернуть его обратно — паттерн, лежащий в основе почти каждого упражнения на ассемблере, управляемого вводом.
  • Сложить два числа в регистрах и вручную преобразовать результат в ASCII-цифры, чтобы вы могли его вывести через write. Так вы усваиваете, что в ассемблере нет print — только байты и системные вызовы.

Часто задаваемые вопросы об онлайн-компиляторе Assembly

Какой ассемблер и синтаксис использует этот playground?
Он использует NASM (Netwide Assembler) с синтаксисом Intel, нацеленный на x86-64 Linux. Ваш код ассемблируется командой nasm -f elf64 и линкуется через ld. Если вы пришли из синтаксиса AT&T/GAS (стиль %rax, movq), перепишите его в стиле Intel для NASM: mov rax, 1, section .text, global _start.
Нужно ли устанавливать NASM или линкер, чтобы этим пользоваться?
Нет. Полный тулчейн работает на сервере в изолированном контейнере. Вы пишете NASM в браузере, нажимаете «Запустить», и Coddy ассемблирует и линкует вашу программу за вас. Локально устанавливать нечего: ни NASM, ни ld, ни виртуальной машины Linux.
Как здесь читать ввод на ассемблере?
Используйте системный вызов read (номер 0): поместите 0 в rax (sys_read), 0 в rdi (stdin), адрес буфера в rsi и максимальное число байт в rdx, затем выполните syscall. Всё, что вы наберёте в панели stdin под редактором, передаётся вашей программе при запуске. Стартовая программа показывает полный паттерн, включая обрезку завершающего перевода строки.
Почему моей программе нужен _start, а не main?
Потому что стартовая программа линкуется через ld и без среды выполнения C. main — это соглашение libc: стартовый код C вызывает его после того, как всё подготовит. При чистой линковке ld нет libc, поэтому ядро переходит прямо к метке _start — вот почему каждая программа здесь определяет global _start. Вы сами отвечаете за корректный выход через системный вызов exit (номер 60) в конце.
Смогу ли я выучить ассемблер с этим компилятором, даже будучи новичком?
Да. Начните с программы-приветствия, измените строку и посмотрите на вывод. Затем попробуйте читать ввод, выполнять арифметику в регистрах и вручную преобразовывать числа в текст. Поскольку настройка не нужна, а каждый запуск даёт мгновенную обратную связь, вы можете быстро итерировать — это самый быстрый способ развить интуицию для регистров, памяти и системных вызовов.

Полезные инструменты для Assembly

Бесплатные браузерные инструменты, которые отлично работают с Playground Assembly - всё это часть Coddy.