Registri vs memoria
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 3 di 45.
Ora hai imparato due luoghi in cui i dati possono risiedere all'interno di un computer:
- Registri: piccole caselle di memoria all'interno della CPU
- Memoria (RAM): un'enorme griglia di slot numerati all'esterno della CPU
Ma perché ci sono due posti? Perché la CPU non può lavorare direttamente con la 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 ciascuno 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:
La CPU non può lavorare direttamente con i dati in memoria. I dati devono prima essere caricati nei registri.
Questo non è facoltativo. È così che è progettata la CPU. Ogni addizione, ogni confronto, ogni trasferimento di dati deve passare attraverso un registro.
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 |
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 semplicemente non può farlo. Devi prima caricarli nei registri.
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