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 sistema
Explicació 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_write
al registreeax
.mov ebx, 1
: Col·loca el descriptor de fitxer perstdout
al 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_exit
al registreeax
.xor ebx, ebx
: Col·loca el codi de sortida0
al 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 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.
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