Assembly Playground
Пишите, запускайте и делитесь фрагментами кода - без установки.
Запускайте 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 -f elf64 и линкуется через ld. Если вы пришли из синтаксиса AT&T/GAS (стиль %rax, movq), перепишите его в стиле Intel для NASM: mov rax, 1, section .text, global _start.Нужно ли устанавливать NASM или линкер, чтобы этим пользоваться?
Как здесь читать ввод на ассемблере?
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.