In che modo una CPU "sa" cosa significano effettivamente i comandi e le istruzioni?


73

In che modo un processore "sa" cosa significano i diversi comandi?

Sto pensando a comandi a livello di assembly come MOV, PUSH, CALL, ecc ...


Questo è molto informativo, ma quello che sto cercando è che cosa consente a una CPU di ricevere e inviare comandi?

Non capisco quel commento. Una CPU "riceve" le istruzioni dalla memoria, richiedendole per indirizzo. Gli unici comandi che una CPU "invia" (almeno nella vista semplicistica) sono i comandi in memoria per fornire dati e i comandi sui bus I / O, per far funzionare i dispositivi I / O.
Daniel R Hicks,

Al centro di qualsiasi CPU c'è una logica (letteralmente) cablata per eseguire una semplice procedura: prendere il valore dal registro degli indirizzi delle istruzioni, inviarlo in memoria, recuperare le istruzioni che la memoria restituisce, quindi incepparlo in un altro complesso nido di logica cablata che "capisce" cosa significano le istruzioni e come eseguirle. Oh, e da qualche parte lungo lì aumentano il registro degli indirizzi delle istruzioni.
Daniel R Hicks,

I lettori potrebbero essere interessati alla domanda Come funziona un computer? di informatica .
Raffaello

Risposte:


88

Quando un computer interpreta le istruzioni a livello di assieme , queste istruzioni vengono convertite nei loro equivalenti binari per la lettura della CPU. Quando la CPU esegue le istruzioni, interpreta la parte opcode dell'istruzione in singoli "microprogrammi", contenenti i loro equivalenti microcodici . Solo per questo, un'istruzione di assemblaggio completa è costituita da un codice operativo e da tutti i dati applicabili che ne derivano, se necessario (ad esempio nomi di registro, indirizzi di memoria).

Le istruzioni del microcodice sono di livello estremamente basso (più quindi del montaggio) e controllano i segnali digitali effettivi che controllano il flusso della logica nel microprocessore. Ad esempio, un'istruzione di microcodice potrebbe aggiornare un flag di registro di codice condizione con un nuovo valore o collegare un registro CPU con una delle unità ALU . Sono possibili attività più complesse, ma ciò mostra l'idea generale di quale microcodice viene utilizzato.

Il flusso generale dalla compilazione all'esecuzione è il seguente. Le istruzioni di assemblaggio sono assemblate (trasformate nei loro 0 e 1 equivalenti binari o, d'ora in poi, segnali logici). Questi segnali logici sono a loro volta interpretati dalla CPU e trasformati in segnali logici di livello più basso che dirigono il flusso della CPU per eseguire l'istruzione particolare. Questo può richiedere uno o più cicli di clock, a seconda dell'architettura e del design del processore (la maggior parte dei manuali di riferimento del processore indicano quanti cicli di clock sono necessari per eseguire una particolare istruzione, come ad esempio questa ).

Tutto questo viene fatto con un microcodice programmato (incorporato fisicamente nel processore in una sorta di ROM , impostato durante la produzione), che dirige il flusso attraverso le porte logiche di basso livello . Ciò fornisce un'interfaccia tra le istruzioni di assemblaggio astratte e la logica elettrica fisica nel processore.


Quindi, in sintesi, le istruzioni del processore vengono assemblate e caricate dal processore. Il processore utilizzerà quindi queste istruzioni per cercare il microprogramma (sotto forma di microcodice) corrispondente a quella particolare istruzione, che è ciò che "effettivamente" esegue l'istruzione. Una volta eseguiti i microcodici per la particolare istruzione (che può richiedere uno o più cicli di clock), il processore esegue il microcodice per recuperare l'istruzione successiva e il ciclo si ripete.


2
Ok, ho capito, penso :) Quindi i bit di comando commutano "switch" che faranno al processore fare certe cose con i dati che riceve?
Simon Verbeke,

4
@Simon Verbeke, esattamente corretto. Attivano semplicemente gli interruttori per dirigere il flusso di segnali elettrici nel processore (che può anche indirizzarlo per ricaricare più comandi!). L'analogia degli switch è buona, dal momento che tutto è digitale (logico 1/0 o vero / falso). Solo per questo, il livello logico è una tensione reale. Spetta all'ingegnere specificare cosa è uno 0 o un 1 (ad esempio, una logica 1 può essere specificata come più di 2 volt).
Sfondamento

1
Le "istruzioni binarie equivalenti" alle quali il compilatore o l'assemblatore riducono tutto ciò che viene chiamato sono chiamate codici operativi. Se dai un'occhiata alla struttura del codice operativo di un'architettura RISC come MIPS o ARM, puoi vedere come vari bit nella mappa del codice operativo sono associati a operazioni specifiche. Intel a causa della sua longevità e tendenza ad essere estesa di volta in volta non ha più una struttura di mappatura semplice.
LawrenceC,

3
No, stavo dicendo a causa della longevità e dell'estensione dell'architettura x86, la mappatura dei singoli bit in codici operativi in ​​micro-operazioni non è netta come in MIPS o ARM in una certa misura (vedi d.umn.edu/~gshute/spimsal/talref.html , ad esempio, i codici operativi Intel non sono nulla del genere). Non credo che ci fosse molta nozione di "RISC" quando Intel introdusse le CPU x86 nel 1978.
LawrenceC,

5
Non va notato che solo alcune CPU sono microcodificate. Alcuni (principalmente dispositivi più piccoli) operano direttamente dai codici operativi dell'assembly. Dipende dall'architettura.
Nome falso

37

Il processore in realtà non "conosce" quali sono i comandi. I comandi sono solo schemi binari che inducono il processore a fare ciò che interpretiamo come comandi.

Ad esempio, un'operazione ADD-R1-in-R2 farà sì che i valori dei registri 1 e 2 raggiungano l'ALU (unità aritmetica e logica), inducano l'ALU a utilizzare l'output dell'adder anziché le varie altre cose e causare il output dell'ALU per sostituire il valore nel registro 2. Esistono semplici circuiti logici per ottenere tutto ciò ( multiplexer , adder , counter , ...), sebbene i processori reali utilizzino ottimizzazioni molto complicate.

È come se ti chiedessi come un'auto sa rallentare quando premi i freni. L'auto non lo sa, il pedale del freno capita solo indirettamente di controllare come vengono premuti i cuscinetti rigidi contro le ruote.


5
Bella analogia con il pedale della macchina.
rjmunro,

10

Prendi, ad esempio, l'istruzione che dice a un processore x86 / IA-32 di spostare un valore immediato a 8 bit in un registro. Il codice binario per questa istruzione è 10110 seguito da un identificatore a 3 bit per quale registro utilizzare. L'identificatore del registro AL è 000, quindi il seguente codice macchina carica il registro AL con i dati 01100001.

10110000 01100001

Questo codice binario del computer può essere reso più leggibile dall'uomo esprimendolo in esadecimale come segue

B0 61

Qui, B0 significa "Sposta una copia del seguente valore in AL", e 61 è una rappresentazione esadecimale del valore 01100001, che è 97 in decimale. Il linguaggio assembly di Intel fornisce il MOV mnemonico (un'abbreviazione di move) per istruzioni come questa, quindi il codice macchina sopra può essere scritto come segue nel linguaggio assembly, completo di un commento esplicativo se richiesto, dopo il punto e virgola. È molto più facile da leggere e ricordare.

http://en.wikipedia.org/wiki/Assembler_language

In altre parole, quando "assembli" il tuo programma di assemblaggio, le tue istruzioni come

MOV AL, 61h

vengono convertiti in numeri, ai quali la CPU associa un significato speciale e quindi agisce di conseguenza.


2
Vale anche la pena notare che l'assegnazione del simbolo mnemonico "mov" a questo particolare schema di bit era completamente arbitraria. In linea di principio potrei scrivere un assemblatore che chiamasse tale istruzione "oof" e funzionerebbe altrettanto bene, a parte essere più difficile da ricordare.
Dmckee,


4

All'estremo livello più basso, tutto ciò che la CPU può fare è aggiungere. Dall'aggiunta, può sottrarre, moltiplicare e dividere (visto che si tratta solo di un'aggiunta in un modo diverso). La CPU lo utilizza per spostare i dati in memoria applicando le aggiunte agli indirizzi di memoria.

Tieni presente, tuttavia, che questo è al livello più basso possibile. La CPU infatti "capisce" alcuni comandi, sotto forma di microcodice. Vedi la risposta di Breakthrough, è scritta molto bene.


7
Le operazioni logiche come AND, OR e NOT, così come lo spostamento dei bit, sono più fondamentali dell'aggiunta. L'aggiunta può effettivamente essere espressa in termini di queste operazioni. Esistono effettivamente circuiti integrati discreti (la serie LS di Texas Instruments) che non fanno altro che eseguire queste operazioni ed è possibile costruirne una sorta. Google "Pong schematic" per vedere come viene realizzato un gioco, senza CPU.
LawrenceC,

Intendevo da un punto di vista più software :) Sì, dal punto di vista hardware / logico hai una quantità folle di porte NAND e NOR. Buon punto.
n0pe

2

Ho fornito una risposta correlata su programmers.stackexchange.com, vedi Come funzionano i computer? dove ho camminato brevemente su tutto da zero su come i computer interpretano le istruzioni per muovere gli elettroni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.