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
