architettura
giovedì 8 Novembre 2012 - 18 Commenti
Il legacy di x86 & x64 – parte 9 (conclusioni)

Dopo aver sezionato l’architettura x86 a caccia di elementi che possano essere classificati come legacy, è arrivato il momento di chiudere questa lunga serie di articoli con una sintesi e alcune riflessioni sull’argomento, riprendendo anche in parte quanto elaborato nel precedente pezzo sulle unità SIMD, che rappresenta una sorta di cartina al tornasole della situazione.
Ripropongo, per comodità, tutti i link ai precedenti otto articoli:
parte 1 (istruzioni 8086)
parte 2 (istruzioni 80186+)
parte 3 (FPU x87)
parte 4 (i segmenti)
parte 5 (i selettori)
parte 6 (istruzioni privilegiate)
parte 7 (istruzioni non privilegiate)
parte 8 (SIMD: MMX, 3DNow!, …

giovedì 18 Ottobre 2012 - Commenta
Il legacy di x86 & x64 – parte 8 (SIMD: MMX, 3DNow!, e… SSE)

Ci sono voluti 7 articoli per trattare di una problematica che nasce col capostipite della famiglia, l’8086, e che si è evoluta coi successori, principalmente con l’80286, ma anche con l’80386 (che ha duplicato, per i 32 bit, quanto introdotto dal precedente, per i 16 bit).
Il dubbio, sicuramente lecito, è che ci siano elementi di legacy anche nelle unità SIMD che sono state introdotte nell’architettura x86, e che quindi si trascinano anche nelle successive implementazioni.
MMX è stata la prima, e si espone a delle critiche, anche se, come abbiamo visto, …

giovedì 11 Ottobre 2012 - Commenta
Il legacy di x86 & x64 – parte 7 (istruzioni non privilegiate)

Oltre alle istruzioni privilegiate, per la gestione dei selettori ne sono state introdotte poche altre da Intel che non lo sono, ma che possono essere utili in modalità utente per effettuare alcune operazioni che possono rivelarsi più o meno utili.
Fra quelle che lo sono di meno c’è sicuramente ARPL, il cui scopo è quello di “aggiustare”, se possibile, il livello di privilegio di un selettore (che può risiedere in un registro o in memoria) sulla base di un altro (che si trova in un registro) che viene utilizzato per il …

giovedì 4 Ottobre 2012 - 12 Commenti
Il legacy di x86 & x64 – parte 6 (istruzioni privilegiate)

Per gestire segmenti e selettori a livello applicativo abbiamo visto che sono necessarie poche istruzioni (MOV, PUSH/POP, LDS/LES/LSS/LFS/LGS, CALL/RET, JMP, INT/INTO/IRET), peraltro inutilizzate in un modello di memoria “flat” (fatta eccezione per quelle usate per chiamare il sistema operativo).
Il s.o., invece, fa sempre uso di una parte di queste quanto meno per impostare i selettori (ormai i segmenti 8086 sono, di fatto, inutilizzati) in maniera che l’applicazione che gira nel processo/thread abbia l’ambiente configurato per poter girare, ma tutto ciò non basta per gestire l’intero sistema, per cui già a partire …

giovedì 20 Settembre 2012 - Commenta
Il legacy di x86 & x64 – parte 5 (i selettori)

Nel precedente articolo è stato analizzato il funzionamento a runtime dei famigerati segmenti della famiglia di CPU x86, e posto in risalto la loro pervasività, essendo utilizzati sempre, persino nella versione a 64 bit, x64, che ne rappresenta il futuro.
I selettori sono la naturale (per x86, s’intende) evoluzione di questo meccanismo, che hanno visto la luce con l’80286, e di cui abbiamo analizzato già il funzionamento in quest’altro articolo (la cui lettura è consigliata prima di proseguire con questa).
Durante l’esecuzione valgono all’incirca le stesse considerazione fatte per i segmenti, a …

giovedì 13 Settembre 2012 - 9 Commenti
Il legacy di x86 & x64 – parte 4 (i segmenti)

Torniamo a parlare del fattore “legacy” delle CPU x86, con l’ultimo aspetto che era rimasto in sospeso e che rimane da sviscerare: la segmentazione.
Per inquadrare bene il peso di questa caratteristica è fondamentale analizzare in che modo vengono utilizzati i segmenti nel codice x86 e x64, e l’impatto che possono avere mediamente durante l’esecuzione, sia a livello di specifiche istruzioni o parti di esse che li possono coinvolgere, sia a livello di implementazione nella pipeline d’esecuzione del processore.
Un’introduzione al concetto di segmento si trova in un articolo che è stato …

lunedì 13 Agosto 2012 - 7 Commenti
Il legacy di x86 & x64 – parte 3 (FPU x87)

L’FPU che Intel realizzò qualche anno dopo la commercializzazione dell’8086 condivide sostanzialmente lo stesso destino del processore, per il marchio d’infamia di essere il suo coprocessore matematico oppure per alcune scelte che furono fatte… 32 anni fa.
Contrariamente a quello che si potrebbe credere, e un mito da smentire subito, la decodifica delle sue istruzioni non risulta “complicata”, per quanto è stato analizzato nei precedenti articoli che hanno trattato questo tema per le istruzioni della CPU.
Infatti tutte le istruzioni x87 (con questo termine si indica l’FPU, che ha subito pochi cambiamenti …

giovedì 26 Luglio 2012 - 30 Commenti
Il legacy di x86 & x64 – parte 2 (istruzioni 80186+)

L’8086 viene spesso assurto a sinonimo di peccato originale, che rappresenta quindi il massimo “danno” di cui tutte le future generazioni si dovranno fare carico, pagandone le conseguenze in termini di microarchitettura.
In realtà, e proseguendo nell’analisi delle istruzioni legacy della famiglia x86 (e x64) iniziata nel precedente articolo, i successori dell’8086 hanno introdotto parecchie istruzioni, anche molto più complesse di quelle esaminate e oggetto di lamentazioni.
Ciò non deve far pensare subito male. Aggiungere istruzioni è un processo naturale, perché il produttore del microprocessore non può evitare di analizzare la tendenza …

giovedì 19 Luglio 2012 - 48 Commenti
Il legacy di x86 & x64 – parte 1 (istruzioni 8086)

Sentiamo spesso ripetere che l’architettura x86 sia un pastrocchio e che si porti dietro una pesante eredità dal primogenito, l’8086 di cui abbiamo già discusso in un vecchio articolo che ha evidenziato alcune bizzarrie.
Legacy è il termine che viene generalmente utilizzato per definire l’insieme di queste caratteristiche vecchie e “contorte”, che nell’immaginario collettivo rappresentano delle catene che bloccano o castrano i processori che implementano quest’architettura, e persino la sua più giovane evoluzione, l’x64 di AMD (nota anche come x86-64, AMD64, o l’EM64T coniato da Intel, infine divenuto Intel 64) a 64 …

mercoledì 4 Gennaio 2012 - 32 Commenti
Emulazione, simulazione, e limiti tecnologici

Il precedente articolo sul MAME ha scatenato un po’ di polemiche che francamente non mi sarei aspettato, per cui ho deciso di affrontare alcuni argomenti che sono venuti fuori, in particolare quello prettamente tecnico che riguarda il cieco affidarsi all’evoluzione della tecnologia per giustificare il ricorso a codice sempre meno ottimizzato e/o esageratamente spostato verso la più onerosa simulazione piuttosto che alla più leggera emulazione.
Premetto intanto che l’emulazione era pre-esistente al MAME, da un bel pezzo. La prima volta che ne ho sentito parlare era ai tempi dell’Amiga, col suo …