Microcodice: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m - Link ambiguo
m Annullate le modifiche di Domenique43 (discussione), riportata alla versione precedente di 5.168.128.192
Etichetta: Rollback
 
(13 versioni intermedie di 10 utenti non mostrate)
Riga 1:
Il '''microcodice''' è un setinsieme di istruzioni adi basso livello, che controllano direttamente il [[microprocessore]],. vale a dire che laLa loro esecuzione viene cioè realizzata direttamente dall'[[hardware]], ovvero dala livello dellalogico logica digitale deldi [[microprocessore]].
Il microcodice non sempre è contemplato nel progetto architetturale dei [[microprocessori]], per esempio è completamente assente nel celebre [[MOS 6502]] e nei processori [[RISC]] delle prime generazioni (come i famosi ARM degli anni ottanta e i primi [[SPARC]] della [[Sun Microsystems|SUN]]) e in molti processori dedicati: in tutti questi il set di istruzioni del microprocessore è direttamente eseguito dalla logica digitale. Naturalmente tali istruzioni sono obbligatoriamente piuttosto elementari, poco più complesse di quelle che compongono il set di istruzioni del microcodice in un microprocessore che lo utilizza.
In un microprocessore le cui istruzioni sono decodificate da un livello di microcodice, una singola istruzione in linguaggio macchina può essere tradotta in una serie di istruzioni in microcodice.
Nella maggior parte dei computer che utilizzano il microcodice esso risiede in una speciale memoria ad alta velocità, chiamata "control store", racchiusa all'interno del processore stesso. Questa può risiedere nella memoria [[Read-Only Memory|ROM]] e in questo caso è di sola lettura, mentre altre soluzioni prevedono un microcodice programmabile che risiede nella [[EEPROM]].
Se il microcodice è programmabile, può essere aggiornato per risolvere eventuali bug nel set di istruzioni o per implementare nuove istruzioni.
Il microcodice permette inoltre ad un'architettura di emularne un'altra{{Citazione necessaria}}, più semplice o più complessa.
 
Il microcodice non sempre è contemplato nel progetto architetturale dei [[microprocessori]].
Per rendere l'idea:
Per esempio, è completamente assente nel celebre [[MOS 6502]] e nei processori [[RISC]] delle prime generazioni.
Non è presente nei famosi ARM degli anni ottanta, e nei primi [[SPARC]] della [[Sun Microsystems|SUN]], e in molti processori dedicati.
In tutti questi processori senza microcodice, le istruzioni al microprocessore sono direttamente eseguite dalla logica digitale.
Naturalmente queste istruzioni devono essere elementari, poco più complesse di quelle che compongono il set di istruzioni del microcodice in un microprocessore che lo utilizza.
 
In un microprocessore le cui istruzioni sono decodificate da un livello di microcodice, una singola istruzione in linguaggio macchina può essere tradotta in una serie di istruzioni in microcodice.
2 x 3
Nella maggior parte dei computer che utilizzano il microcodice esso risiede in una speciale memoria ad alta velocità, chiamata "control store", racchiusa all'interno del processore stesso. Questa può risiedere nella memoria [[Read-Only Memory|ROM]] e in questo caso è di sola lettura, mentre altre soluzioni prevedono un microcodice programmabile che risiede nella [[EEPROM]].
Questa memoria può risiedere nella [[Read-Only Memory|memoria di sola lettura]], oppure altre soluzioni prevedono un microcodice programmabile, che viene collocato nella [[EEPROM]].
 
Se il microcodice è programmabile, può essere aggiornato per risolvere eventuali bug nel set di istruzioni o per implementare nuove istruzioni.
Potrebbe essere tradotto in microcodice (non è detto che avvenga così):
 
Il microcodice permette inoltre ad un'architettura di emularne un'altra{{Citazione necessaria}}, più semplice o più complessa.
2 + 2 + 2
 
Ad effettuare la traduzione è spesso il processore (se supporta il microcodice) altrimenti sarà compito del [[compilatore]] o del programmatore{{Citazione necessaria}}.
Nei moderni [[microprocessori]], che hanno una architettura estremamente complessa, si trovano comunemente uno o più livelli di microcodice (il livello più basso è chiamato a volte [[nanocodice]]), mentre è ormai raro trovare applicazioni architetturali che non prevedano alcun livello di microcodice{{Citazione necessaria}}.
 
=== LinguaggioVoci [[Assembly]]correlate ===
*[[Microarchitettura]]
Un programma scritto in linguaggio assembly consiste in una serie di codici mnemonici (in inglese appunto opcode) che corrispondono a un flusso di istruzioni eseguibili, tradotto da un linguaggio [[assembly]], che può essere caricato in memoria e eseguito.
*[[CPU]]
 
== Collegamenti esterni ==
Ad esempio, un processore [[x86]] può eseguire la seguente istruzione espressa in [[linguaggio macchina]] (cfr. [[linguaggio assembly x86]]):
* {{en}}cita [web|http://c2.com/cgi/wiki?WritableInstructionSetComputer |Writable Instruction Set Computer]|lingua=en}}
Esadecimale: B0 61 (Binary: 10.110.000 01.100.001)
L'equivalente rappresentazione linguaggio assembly è più facile da ricordare (ad esempio in sintassi [[Intel]])
<source lang="asm"> MOV AL, 61H </source>
Questa istruzione significa:
* Sposta (in realtà copia) il valore HEX '61' nel registro [[ALU]] denominato "AL". (Il suffisso h significa [[esadecimale]]; 61H = 97 in [[decimale]] - i computer dividono i dati in bit, byte ecc., ogni unità è un numero di bit esprimibile come una [[potenza]] di 2).
 
{{Portale|informatica}}
Il codice "mov" rappresenta il codice operativo '''10110000''' che in realtà ''copia'' il valore del secondo operando nel registro indicato dal primo operando. Il mnemonico è stato scelto dal progettista del set di istruzioni per abbreviare "Move", rendendolo più facile da ricordare per i programmatori. In linguaggio assembly, un elenco separato da virgole di argomenti o parametri segue il codice operativo.
 
Il codice "mov" può riferirsi a una famiglia di codici operativi numerici che fanno la stessa cosa, ma implicano diversi registri. Il codice operativo 10110000 specificamente copia un valore lungo 8 [[bit]] nel [[registro]] AL. Anche il codice operativo 10100001 è indicato come "mov", però copia un valore a 16-bit nel registro AX.
 
La traduzione in linguaggio macchina viene eseguita da un assemblatore, invece l'operazione inversa (ove possibile; a volte per impedire la decifrazione del codice vengono usati unpacker, cifrature, o altri sistemi di protezione) da un disassembler. A differenza dei [[linguaggi di alto livello]], di solito c'è una corrispondenza 1 a 1 tra le dichiarazioni in linguaggio macchina e istruzioni in linguaggio macchina. Tuttavia, in alcuni casi, un assemblatore può fornire pseudoistruzioni (macro) che si espandono in diverse istruzioni in linguaggio macchina per fornire funzionalità comunemente necessarie. Ad esempio, per una macchina che manca dell'opcode BGE (Branch if Greater or Equal = "salto condizionato se maggiore o uguale"), un assemblatore può fornire una pseudoistruzione apposita. La maggior parte degli assemblatori ha anche un ricco set di macro che viene utilizzato dai produttori di hardware e/o dai programmatori per generare il codice più complessi e sequenze di dati.
 
Ad ogni processore di solito corrisponde un proprio linguaggio macchina.
A questo livello, ogni istruzione è abbastanza semplice per essere eseguita utilizzando un numero relativamente piccolo di circuiti elettronici. I computer differiscono per il numero e il tipo di operazioni che essi supportano. Ad esempio, una nuova macchina a 64 bit avrebbe un circuito strutturalmente diverso da una macchina a 32 bit. Essi possono anche avere diverse dimensioni e numero di registri e differire anche per i tipi di dati supportati (i vecchi Z80 ad esempio potevano unicamente gestire il tipo byte <ref>http://www.z80.de/z80/z80code.htm</ref>).
 
== Collegamenti esterni ==
* {{en}} [http://c2.com/cgi/wiki?WritableInstructionSetComputer Writable Instruction Set Computer]
== Riferimenti ==
{{Reflist|colwidth=30em}}
 
[[Categoria:Microprocessore]]