Compilador online

Compilador Assembly online

Escribe tu código en Assembly (NASM 3) aquí abajo y ejecútalo gratis, con entrada, en un sandbox en nuestros servidores. Sin registro y sin anuncios.

Por el equipo de OnlineCompiler.io. Actualizado el .

Also in EnglishTambém em português

extern scanf
extern printf

section .data
formato_leer  db "%63s %d", 0
formato_hola  db "¡Hola, %s!", 10, 0
formato_linea db "%d al cuadrado es %d", 10, 0

section .bss
nombre  resb 64
n       resd 1

section .text
global main
main:
    push rbx                    ; guarda rbx (el contador i) y alinea la pila

    ; Lee el nombre y un número de la pestaña Entrada
    lea rdi, [rel formato_leer]
    lea rsi, [rel nombre]
    lea rdx, [rel n]
    xor eax, eax
    call scanf

    lea rdi, [rel formato_hola]
    lea rsi, [rel nombre]
    xor eax, eax
    call printf

    mov ebx, 1                  ; i = 1
.repite:
    cmp ebx, [rel n]
    jg .fin                     ; termina cuando i > n
    lea rdi, [rel formato_linea]
    mov esi, ebx                ; i
    mov edx, ebx
    imul edx, ebx               ; i * i
    xor eax, eax
    call printf
    inc ebx
    jmp .repite
.fin:
    pop rbx
    xor eax, eax
    ret
Compartir genera un enlace, sin necesidad de cuenta. Guardar conserva el código en tu cuenta.

¿Quieres revisar una solución contra varias entradas? El compilador Assembly con casos de prueba las ejecuta todas a la vez y marca cada una como aprobada o reprobada.

Cómo dar la entrada (stdin)

Antes de presionar Ejecutar, escribe en la pestaña Entrada todo lo que el programa va a leer. El programa recibe ese texto por la entrada estándar (stdin). En Assembly se ve así:

lea rdi, [rel formato_leer]  ; formato_leer db "%63s %d", 0
lea rsi, [rel nombre]        ; la siguiente palabra, en nombre resb 64
lea rdx, [rel n]             ; el siguiente número, en n resd 1
xor eax, eax                 ; al = 0: ningún argumento de punto flotante
call scanf                   ; con global main, el programa usa la biblioteca de C

La entrada completa se envía cuando presionas Ejecutar, así que el programa no puede pedir nada más mientras corre. Pon cada valor en una línea, o sepáralos con espacios, según cómo los lea el programa.

Versión y límites

VersiónAssembly NASM 3
Se compila connasm -f elf64 code.asm -o code.o && ld code.o -o code.out
Se ejecuta con./code.out
Límites30 segundos, 512 MB de memoria, 2 CPU, 64 KB de salida por flujo, sin red
Ejecución típica0.68 s, y 0.84 s para la más lenta de cada 20 (cómo lo medimos, en inglés)

Lo que conviene saber

  • Ensambla código x86-64 de 64 bits para Linux con NASM 3 (nasm -f elf64).
  • Un programa con un main global se enlaza con la biblioteca de C, así que puede llamar a printf y scanf. Uno con _start se enlaza solo y usa llamadas al sistema.
  • Usa syscall con los números de llamada de 64 bits (1 es write, 60 es exit). Las llamadas int 0x80 de 32 bits hacen que el programa falle con el código de salida 139.

Ejecutar Assembly desde tu app

Para ejecutar Assembly desde tu propia app, envía el código y la entrada al endpoint síncrono con una clave de API, y la salida vuelve en la respuesta. Es gratis hasta 100,000 ejecuciones al mes. Documentación de la API (en inglés).

El editor de arriba es un widget que puedes poner en tu sitio, blog o curso. Con el atributo data-locale="es", los botones aparecen en español. Cómo insertar el editor (en inglés).

Otras páginas

Preguntas frecuentes

¿El compilador Assembly online es gratis?

Sí. Ejecutar Assembly en esta página no requiere cuenta y no tiene anuncios. Para ejecutar Assembly desde tu propia app o sitio, la API y el widget son gratis hasta 100,000 ejecuciones al mes, uso comercial incluido.

¿Mi programa en Assembly puede leer entrada?

Sí. Escribe la entrada en la pestaña Entrada antes de ejecutar, y el programa la lee por la entrada estándar (stdin). La entrada completa se envía cuando presionas Ejecutar, así que el programa no puede pedir nada más mientras corre.

¿Puedo usar bibliotecas en Assembly?

La biblioteca estándar de C, para los programas que definen main. No hay otras bibliotecas ni archivos de include, y los programas no tienen acceso a la red.

¿Cuánto tiempo puede correr un programa?

Hasta 30 segundos, con 512 MB de memoria y 2 CPU. Un programa que sigue corriendo a los 30 segundos se detiene con el código de salida 124, y la salida de más de 64 KB por flujo se corta.

¿Dónde se ejecuta mi código?

En nuestros servidores, en un sandbox gVisor nuevo y sin acceso a la red, que se borra cuando termina la ejecución. Cada ejecución se guarda en el historial con su salida; la página de seguridad (en inglés) explica qué se almacena.

¿Hay una API para Assembly?

Sí. Envía el código, el id del compilador nasm-3 y la entrada a https://api.onlinecompiler.io/api/run-code-sync/ con una clave de API, y la respuesta trae la salida, los errores, el código de salida, el tiempo y la memoria. Es gratis hasta 100,000 ejecuciones al mes, y la misma clave sirve para los otros 45 lenguajes. La documentación está en inglés.