Registri vs memoria
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 3 di 45.
Ora hai imparato a conoscere due luoghi in cui i dati possono risiedere all'interno di un computer:
- Registri: minuscole caselle di memoria all'interno della CPU
- Memoria (RAM): una gigantesca griglia di celle numerate all'esterno della CPU
Ma perché ci sono due posti? Perché la CPU non conserva tutto in memoria?
La risposta è la velocità. I registri sono estremamente veloci perché si trovano all'interno della CPU. La memoria è più lenta perché si trova all'esterno. La CPU può accedere a un registro in un singolo ciclo, ma accedere alla memoria richiede molto più tempo.
Confronto affiancato:
| Caratteristica | Registri | Memoria (RAM) |
|---|---|---|
| Posizione | All'interno della CPU | All'esterno della CPU |
| Velocità | Estremamente veloce (1 ciclo) | Più lenta (molti cicli) |
| Numero di slot di archiviazione | Molto pochi (16-32 su x86-64) | Milioni o miliardi |
| Dimensione di ogni slot | 8 byte (64 bit) | 1 byte |
| Come vi si accede | Per nome (rax, rbx, rcx...) | Per indirizzo (1000, msg, buffer) |
| Volatile? | Sì (scompare quando si spegne l'alimentazione) | Sì (scompare quando si spegne l'alimentazione) |
La regola più importante nell'assembly:
Un'istruzione può usare al massimo un operando di memoria. Per combinare due valori che si trovano entrambi in memoria, caricane prima uno in un registro.
I registri sono anche il luogo in cui conservi i valori con cui lavori, perché ogni accesso alla memoria è lento.
Lo schema in tre passaggi che userai continuamente:
| Passaggio | Cosa succede | Esempio |
|---|---|---|
| 1. LOAD | Copia i dati dalla memoria in un registro | mov rax, [count] |
| 2. WORK | Fai qualcosa con il registro | add rax, 5 |
| 3. STORE | Copia il risultato di nuovo in memoria (se necessario) | mov [result], rax |
Che cosa succede se dimentichi questa regola?
Se provi ad aggiungere due numeri che si trovano entrambi in memoria, l'assembler ti darà un errore. La CPU non può farlo. Devi prima caricarne uno in un registro.
Provalo tu
Questa lezione non include una sfida di codice.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1La macchina
Che cos’è la CPUMemoriaRegistri vs memoriaCome funzionano le istruzioniSchema a due fileL’architettura x86-642Sistemi numerici
Perché il binario?Numeri binariDa decimale a binarioPerché l'esadecimale?Da esadecimale a decimaleDa decimale a esadecimaleASCII ed esadecimale5Chiamata di sistema di uscita
Cos'è una chiamata di sistema?Chiamata di sistema di uscita (60)Codici di uscitaRiepilogo: uscita correttaEsercitati da solo: Playground Assembly