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.
- 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:
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:
- 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 sistemaExplicació del Codi
- 
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.
 - 
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.
 - 
Escriure el missatge a la consola:
mov eax, 4: Col·loca el número de syscall persys_writeal registreeax.mov ebx, 1: Col·loca el descriptor de fitxer perstdoutal registreebx.mov ecx, hello: Col·loca l'adreça del missatge al registreecx.mov edx, 12: Col·loca la longitud del missatge al registreedx.int 0x80: Fa una crida al sistema per executarsys_write.
 - 
Sortir del programa:
mov eax, 1: Col·loca el número de syscall persys_exital registreeax.xor ebx, ebx: Col·loca el codi de sortida0al registreebx.int 0x80: Fa una crida al sistema per executarsys_exit.
 
- Compilació i Execució del Programa
 
Compilació
Per compilar el programa, utilitzarem NASM per convertir el codi Assembly en un fitxer objecte:
Enllaç
Després, utilitzarem ld per enllaçar el fitxer objecte i crear un executable:
Execució
Finalment, executarem el programa resultant:
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 0x80Conclusió
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.
Curs de Programació en Assembly
Mòdul 1: Introducció al Llenguatge Assembly
- Què és el Llenguatge Assembly?
 - Història i Evolució de l'Assembly
 - Conceptes Bàsics i Terminologia
 - Configuració de l'Entorn de Desenvolupament
 
Mòdul 2: Fonaments del Llenguatge Assembly
- Comprensió de la CPU i la Memòria
 - Registres i les Seves Funcions
 - Sintaxi i Estructura Bàsiques
 - Escrivint el Teu Primer Programa en Assembly
 
Mòdul 3: Representació de Dades i Instruccions
- Sistemes Binari i Hexadecimal
 - Tipus de Dades i Mides
 - Instruccions Aritmètiques
 - Instruccions Lògiques
 
Mòdul 4: Flux de Control
Mòdul 5: Conceptes Avançats d'Assembly
- Interrupcions i Crides de Sistema
 - Macros i Assembly Condicional
 - Assembly Inline en Llenguatges d'Alt Nivell
 - Optimització del Codi Assembly
 
Mòdul 6: Assembly per a Diferents Arquitectures
Mòdul 7: Aplicacions Pràctiques i Projectes
- Escrivint un Bootloader Simple
 - Creant un Nucli Bàsic de Sistema Operatiu
 - Interfície amb el Maquinari
 - Depuració i Perfilat del Codi Assembly
 
