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.

  1. 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:

  1. Fetch (Recuperació): La CPU recupera una instrucció de la memòria.
  2. Decode (Descodificació): La CPU descodifica la instrucció per determinar quina acció cal realitzar.
  3. Execute (Execució): La CPU executa la instrucció.

  1. 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:

  1. Registres: Molt ràpids, però amb capacitat molt limitada.
  2. Memòria Caché: Ràpida i amb capacitat moderada.
  3. Memòria Principal (RAM): Més lenta que la caché, però amb molta més capacitat.
  4. 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.

  1. 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.

  1. 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 de num1 al registre AL.
  • mov bl, [num2]: Carrega el valor de num2 al registre BL.
  • add al, bl: Suma els valors dels registres AL i BL.
  • mov [num1], al: Emmagatzema el resultat de la suma a num1.

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

  1. 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.

© Copyright 2024. Tots els drets reservats