CPU Design: come farsi obbedire da un processore

Si sente dire spesso che un processore è più stupido di un lombrico. Stando così le cose, uno sarebbe portato a pensare che, in fin dei conti, farsi obbedire da un processore non possa essere chissà quale problema. In realtà sì, ma anche no. Insomma: dipende. Dipende da quello che vogliamo che il processore faccia e, soprattutto, da come vogliamo che lo faccia. Più cose vogliamo fargli fare e più il set di istruzioni sarà complicato, ma fargli fare più cose e in tanti modi diversi ingarbuglia molto di più la situazione. Come scopriremo in quest’articolo, il primo passo da fare nella definizione di un set di istruzioni è decidere se il set sarà CISC o RISC, e per fare questo vi parleremo del più famoso e famigerato set di istruzioni in circolazione, l’x86.

QUATTRO NERD AL BAR

Quando un gruppo di amici normali si incontra al bar, magari dopo un po’ di tempo dall’ultima volta che si sono visti, per prima cosa inizia a scorrere il caffè (o l’alcool, a seconda di che ore sono, e qualche volta nemmeno), dopodiché si inizia a parlare, generalmente di calcio, poi di quelle rompiscatole delle mogli, magari dei figli, e quando si finiscono gli argomenti si inizia ovviamente a parlare del tempo. Se è primavera il gruppetto sarà stravaccato sui tavolini fuori e di sicuro qualcuno farà notare come faccia insolitamente caldo per il periodo (e se l’età del gruppo è appena appena avanzata l’osservazione probabilmente partirà con un “quando ero giovane io…”). Se è inverno il gruppetto sarà buttato sui divanetti interni e di sicuro qualcuno farà notare come faccia insolitamente freddo per il periodo, ed è veramente strano che non abbia ancora nevicato.

I gruppi di amici nerd si incontrano al bar molto meno di frequente, dacché ci sono skype e la banda larga, ma quando questo accade e il caffè (o l’alcool, a seconda di che ore sono) inizia a scorrere, si parte direttamente col parlare di quella volta in cui sei caduto sul teorema di Boucherot, o di quella volta in cui il professore di analisi ti si è puntato sulle funzioni di Bessel. Ma è giusto un attimo, che serve per rompere il ghiaccio, perché in realtà quello che i tuoi amici vogliono veramente condividere è quel nuovo, strepitoso firmware che hanno scritto nell’ultimo mese. Tu che non hai mai scritto del firmware in vita tua ascolti attento, annuendo nei punti giusti, sì, in effetti il capo è un pazzo a voler implementare un algoritmo del genere su un micro, certo, il real-time, ma ti ci vuole troppo! E il consumo? Quel pazzo vuole pure che la scheda vada a batteria!!!! Cose fuori dal mondo!!!

Anche se non sai bene di che si sta parlando e del per quale motivo sia così difficile codificare quell’algoritmo per un microcontrollore, sai però che ad un certo punto puoi uscirtene con una cosa in genere vera, e chiedi per quale motivo non abbia ottimizzato in assembly almeno parte dell’algoritmo. Le reazioni possono essere due, a seconda di quanto alcool è stato versato fino a questo punto: il tuo amico ti guarda con la faccia del “non lo dire ad alta voce che se ti sente il mio capo sono guai”, o con la faccia afflitta del “ci sto già provando”.

In entrambi i casi la reazione non è di sicuro felice, e il motivo è chiaro anche a te che sai ben poco di programmazione a basso livello: l’assembly è difficile. Molto, anche, a seconda del processore. Se sai qualcosa in più, potresti anche arrischiarti a chiedere perché, se il loro algoritmo è così pesante, non utilizzino un processore più potente, magari un Intel invece di un ARM, per poi ottimizzare in assembly. Il tuo amico, al solo sentire parlare di ottimizzazione assembly per un Intel, molto probabilmente correrà a farsi qualcosa di veramente forte. Lo guardi scappare via con aria perplessa, ma non avresti quest’aria perplessa se avessi mai visto il manuale di un Intel e quello di un ARM. Se li avessi visti, forse ti saresti chiesto come mai il reference manual di un ARM sia sul migliaio di pagine, mentre quello di un x86 superi le quattromila. Magari ti saresti risposto che è perché l’x86 è più potente di un ARM Cortex, perché fa molte più cose, sennò perché userebbero ancora gli x86 nei PC? Ma in realtà le cose non stanno esattamente così. Un x86 effettivamente fa molte più cose di un ARM, ma molte di queste rientrano nella categoria “possiamo vivere senza”.

OPERAZIONI E OPERANDI

Ragioniamo un attimo. Dobbiamo far eseguire una somma al nostro processore. Come si fa? Innanzitutto dobbiamo dargli l’ordine. Un processore capisce solo il binario (del resto, è un circuito logico), quindi per dirgli di fare una somma basta passargli un numero prestabilito: quando il processore vede questo numero, sa che deve eseguire una somma. Dal punto di vista circuitale si tratta di una cosa molto semplice da fare, basta un multiplexer progettato per attivare un sommatore quando in ingresso gli viene dato il particolare numero binario. Visto che questo numero in sé codifica un’operazione da eseguire, di solito viene chiamato opcode.
[...]

ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 3687 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend