En aquest tema, explorarem els conceptes fonamentals de la CPU (Unitat Central de Processament) i la memòria, que són essencials per entendre com funciona el llenguatge Assembly. Aquest coneixement és crucial per escriure codi eficient i optimitzat en Assembly.
- Introducció a la CPU
1.1. Què és la CPU?
La CPU és el cervell de l'ordinador. És responsable d'executar les instruccions dels programes mitjançant operacions aritmètiques, lògiques, de control i d'entrada/sortida.
1.2. Components Principals de la CPU
- Unitat de Control (CU): Dirigeix les operacions de la CPU, gestionant el flux de dades entre la CPU i altres components.
- Unitat Aritmètica i Lògica (ALU): Realitza operacions aritmètiques (suma, resta, etc.) i lògiques (AND, OR, NOT, etc.).
- Registres: Petites unitats d'emmagatzematge dins de la CPU que contenen dades temporals i instruccions.
1.3. Cicle de la CPU
El cicle de la CPU consta de tres fases principals:
- Fetch (Recuperació): La CPU recupera una instrucció de la memòria.
- Decode (Descodificació): La CPU descodifica la instrucció per determinar quina acció cal realitzar.
- Execute (Execució): La CPU executa la instrucció.
- Introducció a la Memòria
2.1. Tipus de Memòria
- Memòria Principal (RAM): Emmagatzema dades i instruccions que la CPU necessita accedir ràpidament. És volàtil, és a dir, perd les dades quan l'ordinador s'apaga.
- Memòria ROM: Emmagatzema instruccions permanents que no es poden modificar fàcilment. És no volàtil.
- Memòria Caché: Memòria de molt alta velocitat que emmagatzema còpies de dades freqüentment accedides de la memòria principal per accelerar l'accés.
2.2. Jerarquia de la Memòria
La jerarquia de la memòria es basa en la velocitat i la mida:
- Registres: Molt ràpids, però amb capacitat molt limitada.
- Memòria Caché: Ràpida i amb capacitat moderada.
- Memòria Principal (RAM): Més lenta que la caché, però amb molta més capacitat.
- Emmagatzematge Massiu (HDD/SSD): Molt més lent que la RAM, però amb capacitat molt gran.
2.3. Adreçament de Memòria
L'adreçament de memòria és el procés de localitzar dades en la memòria. Hi ha diversos modes d'adreçament, com ara:
- Adreçament Directe: L'adreça de la memòria és especificada directament en la instrucció.
- Adreçament Indirecte: L'adreça de la memòria és especificada a través d'un registre o una altra adreça de memòria.
- Interacció entre la CPU i la Memòria
3.1. Busos de Dades, Adreces i Control
- Bus de Dades: Transporta dades entre la CPU i la memòria.
- Bus d'Adreces: Transporta adreces de memòria.
- Bus de Control: Transporta senyals de control per coordinar les operacions.
3.2. Cicle de Memòria
El cicle de memòria inclou les operacions de lectura i escriptura:
- Lectura de Memòria: La CPU envia una adreça de memòria a través del bus d'adreces i rep les dades corresponents a través del bus de dades.
- Escriptura de Memòria: La CPU envia una adreça de memòria i les dades a escriure a través dels busos d'adreces i de dades, respectivament.
- Exemples Pràctics
4.1. Exemple de Codi Assembly per Manipular Registres
section .data num1 db 10 num2 db 20 section .text global _start _start: mov al, [num1] ; Carrega el valor de num1 al registre AL mov bl, [num2] ; Carrega el valor de num2 al registre BL add al, bl ; Suma els valors de AL i BL mov [num1], al ; Emmagatzema el resultat a num1 ; Sortida del programa mov eax, 1 ; Codi de sistema per sortir int 0x80 ; Crida a la interrupció del sistema
Explicació:
mov al, [num1]
: Carrega el valor denum1
al registreAL
.mov bl, [num2]
: Carrega el valor denum2
al registreBL
.add al, bl
: Suma els valors dels registresAL
iBL
.mov [num1], al
: Emmagatzema el resultat de la suma anum1
.
4.2. Exercici Pràctic
Escriu un programa en Assembly que multipliqui dos nombres emmagatzemats en memòria i emmagatzemi el resultat en una altra ubicació de memòria.
Solució:
section .data num1 db 5 num2 db 4 result db 0 section .text global _start _start: mov al, [num1] ; Carrega el valor de num1 al registre AL mov bl, [num2] ; Carrega el valor de num2 al registre BL mul bl ; Multiplica AL per BL, resultat a AX mov [result], al ; Emmagatzema el resultat a result ; Sortida del programa mov eax, 1 ; Codi de sistema per sortir int 0x80 ; Crida a la interrupció del sistema
- Resum
En aquest tema, hem après sobre la CPU i la memòria, incloent els seus components principals, tipus de memòria, jerarquia de memòria i com interactuen entre si. També hem vist exemples pràctics de codi Assembly per manipular registres i memòria. Aquest coneixement és fonamental per comprendre com escriure codi eficient en Assembly i optimitzar el rendiment dels programes.
En el següent tema, explorarem els registres i les seves funcions en més detall.
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