Primeros Pasos para Programar en Assembler x86_64 en Ubuntu

Introducción

El lenguaje ensamblador (assembler) es un lenguaje de bajo nivel que permite escribir programas directamente para el hardware de la máquina. En este artículo, te guiaremos a través de los primeros pasos para programar en assembler x86_64 en Ubuntu, abarcando desde la instalación de herramientas necesarias hasta la creación y ejecución de tu primer programa en assembler.

Instalación de las Herramientas Necesarias

Para comenzar a programar en assembler, necesitamos instalar algunas herramientas esenciales: un editor de texto, el ensamblador NASM (Netwide Assembler) y el enlazador LD.

Instalación de NASM

NASM es un ensamblador popular y ampliamente utilizado en el mundo Linux.

  1. Actualizar los Repositorios:
   sudo apt update
  1. Instalar NASM:
   sudo apt install nasm

Instalación de LD (GNU Linker)

LD es el enlazador que utilizaremos para convertir los archivos objeto generados por NASM en ejecutables.

  1. Instalar Binutils (que incluye LD):
   sudo apt install binutils

Escribiendo tu Primer Programa en Assembler

Ahora que tenemos nuestras herramientas instaladas, podemos escribir nuestro primer programa en assembler. Vamos a crear un sencillo programa que imprime «Hola, Mundo» en la terminal.

Paso 1: Crear el Archivo Fuente en Assembler

  1. Abrir tu editor de texto favorito (por ejemplo, Nano, Vim, o cualquier otro):
   nano hola.asm
  1. Escribir el código en assembler:
   section .data
       hello db 'Hola, Mundo', 0

   section .text
       global _start

   _start:
       ; Llamada al sistema write (sys_write)
       mov rax, 1            ; Número de llamada al sistema para sys_write
       mov rdi, 1            ; File descriptor (1 = stdout)
       mov rsi, hello        ; Dirección del mensaje a escribir
       mov rdx, 12           ; Número de bytes a escribir
       syscall               ; Llamada al sistema

       ; Llamada al sistema exit (sys_exit)
       mov rax, 60           ; Número de llamada al sistema para sys_exit
       xor rdi, rdi          ; Código de salida 0
       syscall               ; Llamada al sistema

Paso 2: Compilar el Código Fuente

Una vez que hemos escrito nuestro código en assembler, necesitamos ensamblarlo utilizando NASM.

  1. Ensamblar el archivo fuente:
   nasm -f elf64 -o hola.o hola.asm

Paso 3: Enlazar el Archivo Objeto

El siguiente paso es enlazar el archivo objeto para crear un ejecutable.

  1. Enlazar el archivo objeto:
   ld -o hola hola.o

Paso 4: Ejecutar el Programa

Ahora que tenemos nuestro ejecutable, podemos ejecutarlo para ver el resultado.

  1. Ejecutar el programa:
   ./hola

Deberías ver «Hola, Mundo» impreso en la terminal.

Comprensión del Código

Vamos a desglosar el código que escribimos para entender mejor cómo funciona:

  • section .data: Esta sección contiene los datos estáticos que el programa utilizará. Aquí, definimos el mensaje «Hola, Mundo».
  • section .text: Esta sección contiene el código ejecutable.
  • global _start: Define el punto de entrada del programa.
  • _start: Es la etiqueta que marca el inicio del programa.
  • mov rax, 1: Coloca el número de llamada al sistema para sys_write en el registro RAX.
  • mov rdi, 1: Especifica el file descriptor 1, que es stdout.
  • mov rsi, hello: Carga la dirección del mensaje en el registro RSI.
  • mov rdx, 12: Especifica que se van a escribir 12 bytes (la longitud de «Hola, Mundo»).
  • syscall: Llama al kernel para ejecutar la llamada al sistema.
  • mov rax, 60: Coloca el número de llamada al sistema para sys_exit en el registro RAX.
  • xor rdi, rdi: Pone el código de salida en 0.
  • syscall: Llama al kernel para salir del programa.

Conclusión

Hemos cubierto los primeros pasos para programar en assembler x86_64 en Ubuntu, incluyendo la instalación de las herramientas necesarias, la escritura y compilación de un programa simple. Aunque assembler puede parecer intimidante al principio, con práctica y paciencia puedes aprender a escribir programas eficientes y entender más profundamente el funcionamiento interno de las computadoras.

data codes through eyeglasses
Photo by Kevin Ku on Pexels.com
error: Content is protected !!

Descubre más desde InfoGonzalez - Blog de formador e informático

Suscríbete ahora para seguir leyendo y obtener acceso al archivo completo.

Seguir leyendo

Este sitio web utiliza cookies, si necesitas más información puedes visitar nuestra política de privacidad    Ver
Privacidad
Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.