Linguaggio macchina: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
(oggetto della modifica nascosto) |
Nessun oggetto della modifica |
||
| (61 versioni intermedie di 42 utenti non mostrate) | |||
Riga 1:
Il '''linguaggio macchina''' (o '''codice macchina'''), in [[informatica]],
▲Il '''linguaggio macchina''' o '''codice macchina''' è il linguaggio in cui sono scritti i [[programma eseguibile|programmi eseguibili]] per [[computer]]. Può venire classificato come [[linguaggio di programmazione]], sebbene quest'ultima espressione sia più spesso riservata per indicare i [[linguaggio di programmazione ad alto livello|linguaggi di alto livello]] con cui si scrivono programmi non direttamente eseguibili, ma che richiedono una [[traduzione]] in linguaggio macchina, per esempio per mezzo di un [[compilatore]].
== Descrizione ==
Il linguaggio macchina è basato su un [[alfabeto]] detto ''[[Sistema numerico binario|binario]]'' perché comprende due soli simboli, generalmente indicati con [[0 (numero)|0]] e [[1 (numero)|1]]. Un simbolo di questo alfabeto viene detto [[Bit (informatica)|bit]]. Il [[CPU|processore]] o CPU è quella componente [[hardware]] di un [[computer]] che è in grado di eseguire i programmi scritti in linguaggio macchina. In altre parole in linguaggio macchina sono definite l'insieme di istruzioni fondamentali che un processore è in grado di compiere (''[[instruction set]]'') in cui i codici di programmi da eseguire devono essere tradotti. In particolare i linguaggi a più basso livello si ottengono come semplice codifica (tabella di associazione) a partire dal linguaggio macchina in un crescendo di astrazione.▼
{{vedi anche|Sistema numerico binario}}
▲Il linguaggio macchina è basato su un [[alfabeto]] detto ''[[Sistema numerico binario|binario]]''
== Compatibilità dei linguaggi macchina ==▼
L'espressione "''il'' linguaggio macchina" è, strettamente parlando, scorretta; infatti, ogni modello di processore è in grado di comprendere un proprio particolare linguaggio macchina. Tuttavia, pur variando nella [[sintassi]] specifica, i linguaggi macchina di tutti i processori sono basati su un insieme di principi e di concetti analoghi.▼
Se un determinato processore P1 comprende esattamente il linguaggio di un altro processore P2, si dice che P1 è [[compatibilità a livello di linguaggio macchina|compatibile]] con P2. Per esempio, i processori cosiddetti [[x86]] sono chiamati in questo modo perché sono in grado di comprendere un linguaggio macchina inventato dalla [[Intel]] e in seguito usato anche su processori [[AMD]], [[VIA Technologies|VIA]] o [[Cyrix]]. È da notare come diversi processori compatibili non debbano esserlo anche a livello hardware: i processori Intel e AMD x86 interpretano lo stesso linguaggio macchina anche se internamente sono molto diversi.▼
▲[[File:CicloDelProcessore.gif|frame|Ciclo del processore]]
Come nelle [[Lingua (linguistica)|lingue naturali]], nel linguaggio macchina i simboli dell'alfabeto utilizzato (1 e 0) sono organizzati in "parole" che a loro volta costituiscono "frasi". Le frasi del linguaggio macchina sono dette [[istruzione (informatica)|istruzioni]]; ognuna di esse ordina al processore di eseguire un'azione elementare afferente allo stato interno del computer, come la lettura di una locazione di [[RAM|memoria]] oppure il calcolo della somma dei valori contenuti in due [[registro (informatica)|registri]].
Le frasi sono generalmente costituite da una parola iniziale detta [[codice operativo]] iniziale, che indica il tipo di azione da eseguire, seguita da altre parole che specificano gli eventuali parametri (o dati) a cui l'azione deve essere applicata (per esempio "SOMMA"-"15"-"20"). Se consideriamo la prima parola come "verbo" della frase, possiamo dire per analogia che il linguaggio macchina prevede solo verbi all'imperativo; non a caso, i linguaggi di programmazione che presentano questa caratteristica sono detti proprio ''[[paradigma imperativo|linguaggi imperativi]]''. I processori tradizionali erano in grado di eseguire una sola istruzione per volta; attualmente si stanno diffondendo tecnologie (come quella dei processori [[Microprocessore superscalare|superscalari]]) che consentono l'esecuzione di più istruzioni in [[calcolo parallelo|parallelo]]. Le istruzioni che possono comparire in un programma in linguaggio macchina descrivono azioni semplici quali ad esempio "somma", "dividi" o "confronta".
▲L'espressione "''il'' linguaggio macchina" è, strettamente parlando, scorretta; infatti, ogni modello di processore è in grado di comprendere un proprio particolare linguaggio macchina. Tuttavia, pur variando nella [[sintassi]] specifica, i linguaggi macchina di tutti i processori sono basati su un insieme di principi e di concetti analoghi.
▲Se un determinato processore P1 comprende esattamente il linguaggio di un altro processore P2, si dice che P1 è [[compatibilità a livello di linguaggio macchina|compatibile]] con P2. Per esempio, i processori cosiddetti [[x86]] sono chiamati in questo modo perché sono in grado di comprendere un linguaggio macchina inventato dalla [[Intel]] e in seguito usato anche su processori [[AMD]], [[VIA Technologies|VIA]] o [[Cyrix]]. È da notare come diversi processori compatibili non debbano esserlo anche a livello [[hardware]]: i processori Intel e AMD x86 interpretano lo stesso linguaggio macchina anche se internamente sono molto diversi.
=== Rapporto con l'assembly ===
== Assembly ==▼
{{vedi anche|Linguaggio assembly}}
L'assembly è in realtà un [[linguaggio di programmazione a basso livello]] che, analogamente ai [[linguaggio di programmazione ad alto livello|linguaggi ad alto livello]] come [[linguaggio C|C]], [[C++]], [[C sharp|C#]], [[Pascal (linguaggio)|Pascal]], [[Java (linguaggio)|Java]], [[Python]], [[Visual Basic]], [[Ruby]], ecc., richiede un processo di traduzione.▼
▲
I codici operativi e i dati nel linguaggio macchina sono [[pattern]] (stringhe) di [[bit]]. L'assembly utilizza al loro posto istruzioni mnemoniche, che rendono più semplice al [[programmatore]] umano lo [[sviluppo (informatica)|sviluppo]] e il [[debug]] di programmi. Per esempio, sul processore [[Z80]], il codice macchina <code>00000101b (05h)</code> corrisponde all'ordine di decrementare il numero contenuto nel [[registro (informatica)|registro]] B<ref>{{cita web | url=http://z80.info/zip/z80cpu_um.pdf | titolo=Manuale processore Z80, codici operativi delle istruzioni, tabella operazioni aritmetiche/logiche | pp=50-51 | formato=pdf | accesso=31 ottobre 2020 | urlmorto=no | urlarchivio=https://web.archive.org/web/20200914025313/http://z80.info/zip/z80cpu_um.pdf | lingua=inglese}}</ref>, mentre in linguaggio assembly lo stesso ordine si scrive <code>DEC B</code><ref>{{cita web | url=http://z80.info/zip/z80cpu_um.pdf | titolo=Manuale processore Z80, assembly, istruzione DEC | pp=170-171 | formato=pdf | accesso=31 ottobre 2020 | urlmorto=no | urlarchivio=https://web.archive.org/web/20200914025313/http://z80.info/zip/z80cpu_um.pdf | lingua=inglese}}</ref>.
=== Esempi di notazione ===
I codici macchina si possono trascrivere, per comodità anche in notazione [[esadecimale]]: ad esempio sempre nello Z80 il susseguirsi di codici:
3E 41 D3
Riga 38 ⟶ 34:
6 5 5 5 5 6 bit
[ op | rs | rt | address/immediate] tipo I
[ op | target address ] tipo
[ op | rs | rt | rd |shamt| funct] tipo R
Riga 53 ⟶ 49:
[ op | rs | rt | address/immediate]
35 3 8 68 forma decimale
<references/>
== Bibliografia ==
* {{cita libro| autore1=David Andrew Patterson | autore2=John Leroy Hennessy | titolo=Struttura e progetto dei calcolatori | editore=Zanichelli | anno=2015 | ed=4 | ISBN=978-88-08-35202-6 | capitolo=Il calcolatore: astrazioni e tecnologia }}
* {{cita libro| autore1=David Andrew Patterson | autore2=John Leroy Hennessy | titolo=Struttura e progetto dei calcolatori | editore=Zanichelli | anno=2015 | ed=4 | ISBN=978-88-08-35202-6 | capitolo=Le istruzioni: il linguaggio dei calcolatori }}
== Voci correlate ==
* [[Unità centrale di elaborazione]]▼
* [[Architettura MIPS]]
* [[IBM compatibile]]
* [[Instruction set]]
* [[Linguaggio assembly]]
* [[Microprogrammazione]]
* [[Sistema numerico binario]]
▲* [[Unità centrale di elaborazione]]
== Altri progetti ==
{{Interprogetto|preposizione=sul|wikt=codice di macchina|wikt_etichetta=codice di macchina}}
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{FOLDOC|machine code|machine code}}
{{Controllo di autorità}}
| |||