En aquest tema, explorarem els conceptes fonamentals i la terminologia essencial que necessitaràs per comprendre i treballar amb el llenguatge Assembly. Aquestes bases són crucials per a qualsevol programador que vulgui dominar aquest llenguatge de baix nivell.
- Què és el Llenguatge Assembly?
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, Assembly proporciona un control directe sobre el maquinari, permetent optimitzacions molt específiques.
Característiques Clau:
- Baix Nivell: Proporciona un control directe sobre el maquinari.
- Dependència de l'Arquitectura: Cada tipus de CPU té el seu propi llenguatge Assembly.
- Eficiència: Permet escriure codi molt eficient en termes de temps d'execució i ús de memòria.
- Instruccions i Operands
Instruccions:
Les instruccions són les ordres que donem a la CPU. Cada instrucció en Assembly correspon a una operació específica que la CPU pot realitzar, com ara moure dades, realitzar càlculs aritmètics, o controlar el flux del programa.
Operands:
Els operands són els valors o adreces sobre els quals operen les instruccions. Poden ser registres, constants, o adreces de memòria.
Exemple:
- Registres
Els registres són petites àrees d'emmagatzematge dins de la CPU que s'utilitzen per a operacions ràpides. Cada CPU té un conjunt de registres que poden variar en nombre i funció.
Tipus de Registres:
- Registres de Dades: Emmagatzemen dades temporals (ex: AX, BX, CX, DX en x86).
- Registres d'Adreces: Emmagatzemen adreces de memòria (ex: SI, DI, BP, SP en x86).
- Registres de Control: Emmagatzemen informació de control (ex: IP, FLAGS en x86).
Taula de Registres Comuns (x86):
Registre | Descripció |
---|---|
AX | Acumulador |
BX | Base |
CX | Comptador |
DX | Dades |
SI | Índex Font |
DI | Índex Destí |
BP | Punt de Base |
SP | Punt de Pila |
IP | Punter d'Instrucció |
FLAGS | Registre de Banderes |
- Memòria i Adreçament
Memòria:
La memòria és l'espai on es guarden les dades i les instruccions del programa. En Assembly, és crucial comprendre com accedir i manipular la memòria.
Modes d'Adreçament:
- Adreçament Immediat: L'operand és un valor constant.
MOV AX, 10 ; Mou el valor 10 al registre AX
- Adreçament Directe: L'operand és una adreça de memòria.
MOV AX, [1234h] ; Mou el valor de la memòria a l'adreça 1234h al registre AX
- Adreçament Indirecte: L'operand és una adreça emmagatzemada en un registre.
MOV AX, [BX] ; Mou el valor de la memòria a l'adreça emmagatzemada en BX al registre AX
- Comentaris en Assembly
Els comentaris són essencials per a la llegibilitat del codi. En Assembly, els comentaris es comencen amb un punt i coma (;
).
Exemple:
Exercicis Pràctics
Exercici 1:
Escriu un programa en Assembly que mogui el valor 10 al registre AX i després sumi 20 a AX.
Solució:
Exercici 2:
Escriu un programa en Assembly que mogui el valor de la memòria a l'adreça 2000h al registre BX.
Solució:
Conclusió
En aquesta secció, hem cobert els conceptes bàsics i la terminologia essencial del llenguatge Assembly. Hem après sobre les instruccions, els operands, els registres, la memòria i els modes d'adreçament. Aquests fonaments són crucials per avançar en l'aprenentatge del llenguatge Assembly. En el proper mòdul, aprofundirem en la comprensió de la CPU i la memòria, i com interactuen amb el codi 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