Linguaggio macchina e Wikipedia:Pagine da cancellare/Conta/2019 luglio 6: differenze tra le pagine

(Differenze fra le pagine)
Contenuto cancellato Contenuto aggiunto
La conversione tra i linguaggi basso livello e quello macchina è più semplice perché più prossimo ad esso, ma probabilmente per una svista era scritto il contrario
 
BotCancellazioni (discussione | contributi)
Bot: aggiornamento pagina di servizio giornaliera per i conteggi del 6 luglio 2019
 
Riga 1:
{{Conteggio cancellazioni}}
{{F|linguaggi di programmazione|marzo 2013|Nessuna fonte}}
{{Conteggio cancellazioni/In corso/Start|19:48, 11 lug 2019 (CEST)}}
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]].
{{Conteggio cancellazioni/In corso/Voce|i = 1 |voce = Maya Avant |turno = |tipo = consensuale |data = 2019 luglio 6 |multipla = |argomenti = Televisione |temperatura = 40 }}
 
{{Conteggio cancellazioni/In corso/Voce|i = 2 |voce = Phoebe Forrester |turno = |tipo = consensuale |data = 2019 luglio 6 |multipla = |argomenti = Televisione |temperatura = 33 }}
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.
{{Conteggio cancellazioni/In corso/Voce|i = 3 |voce = Marco Montuori |turno = |tipo = semplificata |data = 2019 luglio 6 |multipla = |argomenti = cucina |temperatura = 13 }}
 
{{Conteggio cancellazioni/In corso/Voce|i = 4 |voce = Italia centro-meridionale |turno = |tipo = semplificata |data = 2019 luglio 6 |multipla = |argomenti = geografia |temperatura = 100 }}
== Compatibilità dei linguaggi macchina ==
{{Conteggio cancellazioni/In corso/Voce|i = 5 |voce = Elizabeth Keen |turno = |tipo = semplificata |data = 2019 luglio 6 |multipla = |argomenti = Televisione |temperatura = 3 }}
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.
{{Conteggio cancellazioni/In corso/Voce|i = 6 |voce = Vita da strega |turno = |tipo = semplificata |data = 2019 luglio 6 |multipla = |argomenti = pagine di servizio, televisione |temperatura = 53 }}
 
{{Conteggio cancellazioni/In corso/Stop}}
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.
 
== Struttura ==
[[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".
 
== Assembly ==
Il linguaggio macchina viene spesso confuso con il linguaggio [[assembly]] e viceversa.
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.
A differenza di questi ultimi, l'assembly consente una traduzione particolarmente semplice che trasforma ogni istruzione dell'assembly, in modo univoco, in una istruzione in linguaggio macchina.
 
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, mentre in linguaggio assembly lo stesso ordine si scrive <code>DEC B</code>.
 
== 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
 
è fissa mentre in altri essa varia da istruzione a istruzione. Anche l'organizzazione dei pattern varia moltissimo.
 
Come esempio specifico possiamo prendere l'[[architettura MIPS]]. Le istruzioni di questa architettura sono tutte composte da '''32 bit''' (o 4 [[byte]]). I primi 6 bit contengono il codice operativo. Le istruzioni di tipo J (da jump: salto) ed I (immediate) sono completamente specificate dal campo ''op'' mentre le istruzioni di tipo R (registro) comprendono un campo addizionale chiamato ''func'' che codifica la specifica funzione da eseguire. Il formato dettagliato delle istruzioni è il seguente:
 
6 5 5 5 5 6 bit
[ op | rs | rt | address/immediate] tipo I
[ op | target address ] tipo J
[ op | rs | rt | rd |shamt| funct] tipo R
 
''rs'', ''rt'', e ''rd'' indicano i registri nei quali si trovano gli operandi; ''shamt'' sta per "shift amount" mentre ''address'' e ''immediate'' contengono direttamente degli operandi.
 
Per esempio l'operazione di somma dei registri 1 e 2 con memorizzazione del risultato nel registro 6 è codificata come:
 
[ op | rs | rt | rd |shamt| funct]
0 1 2 6 0 32 forma decimale
000000 00001 00010 00110 00000 100000 forma binaria
 
Caricamento nel registro 8 di un valore memorizzato nella cella di memoria posta 68 celle dopo quella puntata dal registro 3:
 
[ op | rs | rt | address/immediate]
35 3 8 68 forma decimale
 
== Voci correlate ==
* [[Unità centrale di elaborazione]]
* [[Architettura MIPS]]
* [[IBM compatibile]]
* [[Microprogrammazione]]
 
{{Controllo di autorità}}
{{portale|informatica}}
 
[[Categoria:Microprocessore]]
[[Categoria:Linguaggi di programmazione]]