En aquest tema, aprendrem a escriure el nostre primer programa en llenguatge Assembly. Aquest és un pas fonamental per familiaritzar-nos amb la sintaxi i l'estructura bàsica del llenguatge. Seguirem una sèrie de passos per configurar l'entorn, escriure el codi, compilar-lo i executar-lo.

  1. Configuració de l'Entorn

Abans de començar a escriure el nostre primer programa, necessitem configurar l'entorn de desenvolupament. Utilitzarem l'assemblador NASM (Netwide Assembler) i l'enllaçador ld de GNU.

Instal·lació de NASM

Per instal·lar NASM en un sistema basat en Linux, podem utilitzar el següent comandament:

sudo apt-get install nasm

Per a sistemes basats en Windows, podem descarregar l'instal·lador des del lloc web oficial de NASM.

Instal·lació de l'Enllaçador ld

En la majoria de sistemes Linux, ld ja està instal·lat com a part del paquet binutils. Si no és així, podem instal·lar-lo amb:

sudo apt-get install binutils

  1. Estructura Bàsica d'un Programa en Assembly

Un programa en Assembly típicament consta de les següents seccions:

  • Secció de dades: On es declaren les dades.
  • Secció de text: On es troben les instruccions del programa.

Exemple de Programa Bàsic

A continuació, escriurem un programa senzill que imprimeix "Hola, món!" a la consola.

section .data
    hello db 'Hola, món!', 0    ; Missatge a imprimir

section .text
    global _start               ; Punt d'entrada del programa

_start:
    ; Escriure el missatge a la consola
    mov eax, 4                  ; syscall: sys_write
    mov ebx, 1                  ; file descriptor: stdout
    mov ecx, hello              ; missatge a imprimir
    mov edx, 12                 ; longitud del missatge
    int 0x80                    ; crida al sistema

    ; Sortir del programa
    mov eax, 1                  ; syscall: sys_exit
    xor ebx, ebx                ; codi de sortida: 0
    int 0x80                    ; crida al sistema

Explicació del Codi

  1. Secció de dades:

    • section .data: Defineix la secció de dades.
    • hello db 'Hola, món!', 0: Declara una cadena de caràcters amb el missatge "Hola, món!" i un caràcter nul (0) al final.
  2. Secció de text:

    • section .text: Defineix la secció de text.
    • global _start: Defineix el punt d'entrada del programa.
    • _start:: Etiqueta que marca el començament del codi executable.
  3. Escriure el missatge a la consola:

    • mov eax, 4: Col·loca el número de syscall per sys_write al registre eax.
    • mov ebx, 1: Col·loca el descriptor de fitxer per stdout al registre ebx.
    • mov ecx, hello: Col·loca l'adreça del missatge al registre ecx.
    • mov edx, 12: Col·loca la longitud del missatge al registre edx.
    • int 0x80: Fa una crida al sistema per executar sys_write.
  4. Sortir del programa:

    • mov eax, 1: Col·loca el número de syscall per sys_exit al registre eax.
    • xor ebx, ebx: Col·loca el codi de sortida 0 al registre ebx.
    • int 0x80: Fa una crida al sistema per executar sys_exit.

  1. Compilació i Execució del Programa

Compilació

Per compilar el programa, utilitzarem NASM per convertir el codi Assembly en un fitxer objecte:

nasm -f elf64 -o hola.o hola.asm

Enllaç

Després, utilitzarem ld per enllaçar el fitxer objecte i crear un executable:

ld -o hola hola.o

Execució

Finalment, executarem el programa resultant:

./hola

Si tot ha anat bé, veurem el missatge "Hola, món!" a la consola.

Exercici Pràctic

Exercici 1: Modifica el programa per imprimir un missatge diferent, com ara "Benvingut a Assembly!".

Solució:

section .data
    message db 'Benvingut a Assembly!', 0

section .text
    global _start

_start:
    mov eax, 4
    mov ebx, 1
    mov ecx, message
    mov edx, 21
    int 0x80

    mov eax, 1
    xor ebx, ebx
    int 0x80

Conclusió

En aquest tema, hem après a escriure, compilar i executar un programa bàsic en llenguatge Assembly. Hem vist com estructurar el codi i utilitzar les crides al sistema per interactuar amb el sistema operatiu. Aquest és el primer pas per comprendre i dominar el llenguatge Assembly. En els següents temes, aprofundirem en conceptes més avançats i escriurem programes més complexos.

© Copyright 2024. Tots els drets reservats