Introducció
El llenguatge Assembly és un llenguatge de programació de baix nivell que està molt a prop del codi màquina, el qual és directament executat per la CPU. A diferència dels llenguatges d'alt nivell com Python o Java, que són més abstractes i fàcils d'entendre per als humans, el llenguatge Assembly proporciona un control directe sobre el maquinari del sistema.
Característiques del Llenguatge Assembly
- Baix Nivell: Assembly és un llenguatge de baix nivell, el que significa que està molt a prop del codi màquina i és específic per a una arquitectura de CPU concreta.
- Control Directe: Proporciona un control directe sobre el maquinari, permetent als programadors optimitzar el rendiment del codi.
- Eficiència: Els programes escrits en Assembly poden ser molt eficients en termes de velocitat i ús de memòria.
- Específic per a Arquitectura: Cada tipus de CPU té el seu propi llenguatge Assembly, com x86, ARM, MIPS, etc.
Avantatges i Desavantatges
Avantatges
- Rendiment: Permet escriure codi molt optimitzat i ràpid.
- Control: Proporciona un control precís sobre el maquinari.
- Comprensió Profunda: Ajuda a comprendre millor com funciona el maquinari i el codi màquina.
Desavantatges
- Complexitat: És més difícil d'aprendre i utilitzar en comparació amb els llenguatges d'alt nivell.
- Portabilitat: El codi Assembly és específic per a una arquitectura de CPU i no es pot portar fàcilment a altres arquitectures.
- Temps de Desenvolupament: Escriure programes en Assembly pot ser molt més lent que en llenguatges d'alt nivell.
Exemples de Codi Assembly
A continuació, es mostra un exemple simple de codi Assembly per a la plataforma x86 que imprimeix "Hello, World!" a la pantalla:
section .data hello db 'Hello, World!',0 section .text global _start _start: ; Write the string to stdout mov eax, 4 ; syscall number for sys_write mov ebx, 1 ; file descriptor 1 is stdout mov ecx, hello ; pointer to the string mov edx, 13 ; length of the string int 0x80 ; call kernel ; Exit the program mov eax, 1 ; syscall number for sys_exit xor ebx, ebx ; exit code 0 int 0x80 ; call kernel
Explicació del Codi
- section .data: Defineix una secció de dades on es declara la cadena "Hello, World!".
- section .text: Defineix una secció de codi executable.
- global _start: Indica el punt d'entrada del programa.
- _start: Etiqueta que marca l'inici del codi executable.
- mov eax, 4: Mou el valor 4 al registre
eax
, que és el número de syscall per asys_write
. - mov ebx, 1: Mou el valor 1 al registre
ebx
, que és el descriptor de fitxer per a stdout. - mov ecx, hello: Mou l'adreça de la cadena
hello
al registreecx
. - mov edx, 13: Mou el valor 13 al registre
edx
, que és la longitud de la cadena. - int 0x80: Fa una crida al sistema operatiu.
- mov eax, 1: Mou el valor 1 al registre
eax
, que és el número de syscall per asys_exit
. - xor ebx, ebx: Fa un XOR del registre
ebx
amb ell mateix per establir el valor a 0. - int 0x80: Fa una crida al sistema operatiu per sortir del programa.
Exercici Pràctic
Exercici
Escriu un programa en Assembly que imprimeixi "Hola, Món!" a la pantalla.
Solució
section .data hola db 'Hola, Món!',0 section .text global _start _start: ; Write the string to stdout mov eax, 4 ; syscall number for sys_write mov ebx, 1 ; file descriptor 1 is stdout mov ecx, hola ; pointer to the string mov edx, 10 ; length of the string int 0x80 ; call kernel ; Exit the program mov eax, 1 ; syscall number for sys_exit xor ebx, ebx ; exit code 0 int 0x80 ; call kernel
Conclusió
El llenguatge Assembly és una eina poderosa per als programadors que necessiten un control precís sobre el maquinari i l'optimització del rendiment. Tot i que pot ser complex i específic per a cada arquitectura, proporciona una comprensió profunda del funcionament intern dels ordinadors. En els següents mòduls, explorarem més a fons els fonaments i les aplicacions pràctiques del llenguatge Assembly.
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