Come funzionano le istruzioni
Fa parte della sezione Fondamenti del percorso Assembly di Coddy. Lezione 4 di 45.
Sai che la CPU esegue le istruzioni una alla volta. Ma come fa la CPU a sapere quale istruzione eseguire dopo? Dove sono memorizzate le istruzioni? E che aspetto ha effettivamente un’istruzione?
Le istruzioni sono numeri.
Questa è una verità fondamentale sui computer. Tutto è un numero. I dati con cui lavori (come il numero 42) sono numeri. L'indirizzo in cui si trovano i dati (come 1000) è un numero. Anche le istruzioni stesse (come mov, add, cmp) sono numeri.
Quando scrivi codice assembly come mov rax, 5, l'assembler converte questo testo leggibile dagli esseri umani in un numero che la CPU comprende. Questo numero è chiamato codice istruzione.
Dove sono memorizzate le istruzioni?
Le istruzioni sono memorizzate in memoria, proprio come i dati. Non esiste una memoria separata per le istruzioni. La stessa memoria contiene entrambi:
- Dati (numeri, caratteri, array)
- Istruzioni (il programma stesso)
I byte in sé non indicano se sono un'istruzione o un dato. La CPU considera come istruzione successiva ciò che si trova all'indirizzo di memoria contenuto nel Program Counter. Nei sistemi moderni, il sistema operativo contrassegna come eseguibile la memoria che contiene le istruzioni del programma e la CPU si rifiuta di eseguire byte provenienti da una memoria non contrassegnata in questo modo, come quella contenente i dati del programma. Hai appreso brevemente il PC nella lezione 0.1. Ora è il momento di capire esattamente come funziona.
Il contatore di programma (chiamato anche puntatore alle istruzioni) è un registro speciale all'interno della CPU. Il suo unico compito è contenere l'indirizzo di memoria della prossima istruzione da eseguire.
Il ciclo di recupero ed esecuzione:
La CPU ripete per sempre questi tre passaggi:
| Passaggio | Cosa succede |
|---|---|
| 1. FETCH | Legge l’istruzione all’indirizzo in PC |
| 2. EXECUTE | Esegue quell’istruzione |
| 3. ADVANCE | Sposta PC all’istruzione successiva |
Esempio semplice:
Se PC = 1000, la CPU:
- Recupera l'istruzione all'indirizzo 1000
- La esegue
- Sposta PC all'indirizzo successivo (1000 + dimensione dell'istruzione)
Poi si ripete con il nuovo valore di PC.
Come si presenta un'istruzione:
Ogni istruzione ha due parti:
| Parte | Cosa fa | Esempio |
|---|---|---|
| Opcode | Cosa FARE | mov, add, cmp |
| Operandi | Su cosa eseguire l'operazione | rax, 5, [result] |
Alcune istruzioni hanno un operando (come inc rax per aggiungere 1). Alcune ne hanno due (come mov rax, 5). Alcune ne hanno tre (come add rax, rbx, rcx in alcune architetture).
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