Test: Descubre qué bootcamp es para ti

whatsapp keepcoding

¿Qué es el lenguaje Assembly y para qué se usa en programación?

| Última modificación: 4 de febrero de 2025 | Tiempo de Lectura: 4 minutos
0
(0)

Programar en lenguajes de alto nivel como Python o Java es como ir a un restaurante elegante y pedir un plato, sin tener que preocuparte por cómo lo preparan. En cambio, programar con Assembly sería como ser el chef de ese mismo restaurante, ahora sí tendrías que estar pendiente de seguir recetas detalladas, manejar los ingredientes con precisión y usar herramientas específicas. Podríamos decir que Assembly prácticamente te pone en la cocina del procesador, donde tienes que controlar cada paso de la ejecución.

qué es el lenguaje Assembly

¿Qué es Assembly?

Assembly, o ensamblador, es un lenguaje de programación que trabaja casi al mismo nivel que el hardware de una computadora. Básicamente, es una forma más comprensible del código máquina, que es el lenguaje que entiende directamente el procesador.

Lo grandioso de este lenguaje es que se usa para escribir programas que interactúan directamente con el hardware sin intermediarios como lo hacen los lenguajes de alto nivel.

Lo crearon en los años 50, cuando las primeras computadoras digitales estaban en desarrollo. La idea era ofrecer una manera más comprensible de programar sin perder el control directo sobre el hardware.

Características

  • Cercano al hardware: Al ser de bajo nivel, prácticamente habla el mismo idioma que el procesador. Cada instrucción que escribes en Assembly tiene una correspondencia directa con lo que la máquina realmente ejecuta.
  • Más fácil de leer que el código máquina: No usa números sino mnemónicos, que son abreviaciones de comandos. Esto hace que el código sea más entendible y manejable para los programadores.
  • Depende del procesador: Como no es universal, el código que funciona en un procesador Intel x86 no va a servir en un procesador ARM, porque cada tipo de procesador tiene su propia versión de Assembly.
  • Control total del hardware: Te da acceso directo al hardware, por eso sirve para tareas que requieren máxima precisión, como escribir controladores de dispositivos o hacer que una aplicación funcione lo más rápido posible.

¿Cómo funciona? Comparación Assembly vs. C

Para que entiendas mejor este lenguaje, quiero que veas cómo una simple instrucción en C se traduce a Assembly.

Código en C:

#include <stdio.h>
int main() {
printf("Hola, mundo!");
return 0;
}

Ahora, mira cómo se vería en Assembly para x86:

section .data
mensaje db "Hola, mundo!",0

section .text
global _start

_start:
mov edx, 13 ; Longitud del mensaje
mov ecx, mensaje ; Dirección del mensaje
mov ebx, 1 ; Descriptor de archivo (stdout)
mov eax, 4 ; Código de llamada al sistema (sys_write)
int 0x80 ; Interrupción del sistema para ejecutar la llamada

mov eax, 1 ; Código de llamada para salir (sys_exit)
int 0x80 ; Interrupción para salir

¿Lo descubriste? en C todo es más abstracto, pero en Assembly cada instrucción controla exactamente lo que hace el procesador.

Usos prácticos de Assembly

Aunque no es el lenguaje más usado en desarrollo de software común, sí tiene aplicaciones prácticas.

Manipulación de registros: Operaciones aritméticas rápidas

Con este lenguaje puedes realizar operaciones matemáticas directamente en los registros del procesador, sin depender de funciones externas.

Ejemplo: Sumar dos números y guardar el resultado en un registro

section .text
global _start

_start:
mov eax, 5 ; Cargar 5 en el registro EAX
add eax, 10 ; Sumar 10 a EAX
; Ahora EAX contiene 15

mov ebx, 0 ; Código de salida 0
mov eax, 1 ; Llamada al sistema para salir
int 0x80 ; Ejecutar la interrupción

¿Cómo probarlo? Puedes compilarlo con nasm -f elf64 archivo.asm y enlazarlo con ld -o salida archivo.o.

Acceso directo a memoria: Guardar y recuperar datos

También te deja escribir y leer datos directamente desde posiciones de memoria.

Ejemplo: Guardar un valor en memoria y recuperarlo

section .data
valor db 42 ; Definir un byte en memoria con el valor 42

section .text
global _start

_start:
mov al, [valor] ; Cargar el valor de memoria en AL

mov ebx, 0 ; Código de salida 0
mov eax, 1 ; Llamada al sistema para salir
int 0x80 ; Ejecutar la interrupción

Para probarlo puedes modificar el valor en memoria y ver cómo cambia el resultado.

Llamadas al sistema: Imprimir texto en pantalla

Anímate a interactuar con el sistema operativo para realizar tareas como imprimir mensajes en la terminal.

Ejemplo: Imprimir «Hola, Assembly!» en pantalla

section .data
mensaje db "Hola, Assembly!", 0xA ; Mensaje con salto de línea
len equ $ - mensaje ; Calcular longitud del mensaje

section .text
global _start

_start:
mov edx, len ; Longitud del mensaje
mov ecx, mensaje ; Dirección del mensaje
mov ebx, 1 ; Descriptor de archivo (stdout)
mov eax, 4 ; Código de llamada al sistema (sys_write)
int 0x80 ; Interrupción del sistema

mov eax, 1 ; Código de salida
int 0x80 ; Terminar programa

Si lo vas a probar solo compila y ejecuta el código en un entorno Linux para ver la salida.

Control del flujo del programa: Bucles y condicionales

Así es como puedes ejecutar instrucciones condicionales y repetir tareas con bucles.

Ejemplo: Contar del 1 al 5 usando un bucle

section .text
global _start

_start:
mov ecx, 5 ; Contador de bucle

loop_start:
dec ecx ; Decrementar el contador
cmp ecx, 0 ; Comparar con 0
jne loop_start ; Si no es 0, repetir el bucle

mov eax, 1 ; Llamada al sistema para salir
int 0x80

Pruébalo cambiando el valor del contador para ver cómo cambia la ejecución.

Tu meta de convertirte en el mejor desarrollador la puedes cumplir ingresando a nuestro Bootcamp de Desarrollo Web de KeepCoding. Te enseñaremos todo sobre los lenguajes de programación más usados y programar se volverá una realidad para ti. ¡Tu futuro empieza hoy!

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Desarrollo web

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado

Conviértete en Full Stack Deeveloper en solo 10 meses. Accede a un sector con el 98,49% de empleabilidad con sueldos de hasta 80K.