Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Linguaggio macchina - Wikipedia

Linguaggio macchina

Da Wikipedia, l'enciclopedia libera.

Il linguaggio macchina o codice macchina è il linguaggio in cui sono scritti i programmi eseguibili per computer. Può venire classificato come linguaggio di programmazione, sebbene quest'ultima espressione sia più spesso utilizzata per indicare i 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. Il processore o CPU è quella componente hardware di un computer che è in grado di eseguire i programmi scritti in linguaggio macchina. Il linguaggio macchina è basato su un alfabeto detto binario perché comprende due soli simboli, generalmente indicati con 0 e 1. Un simbolo di questo alfabeto viene detto bit.

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 princìpi e di concetti analoghi.

Se un determinato processore P1 comprende esattamente il linguaggio di un altro processore P2, si dice che P1 è compatibile con P2. Per esempio, i computer cosiddetti IBM compatibili sono chiamati in questo modo perché sono in grado di comprendere un linguaggio macchina inventato dalla IBM e in seguito applicato sulla maggior parte dei personal computer.

Come nel linguaggio naturale, 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 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 memoria oppure il calcolo della somma dei valori contenuti in due 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 linguaggi imperativi

I processori tradizionali erano in grado di eseguire una sola istruzione per volta; attualmente si stanno diffondendo tecnologie (come quella dei processori superscalari) che consentono l'esecuzione di più istruzioni in parallelo.

Le istruzioni che possono comparire in un programma in linguaggio macchina descrivono azioni semplici quali "somma" ("sottrai", "dividi", "moltiplica"), "preleva" (dalla memoria), "deposita" (in memoria) o istruzioni di salto traducibili con "passa all'istruzione N", dove N rappresenta un indirizzo di memoria in cui è memorizzata un'istruzione (in assenza di salti, il processore esegue le istruzioni del programma sequenzialmente).

Il linguaggio macchina viene spesso confuso con il linguaggio assembly. L'assembly è in realtà un linguaggio di programmazione che, analogamente ai linguaggi ad alto livello come C, Pascal, Java e così via, richiede un processo di traduzione; a differenza di questi ultimi, l'assembly consente una traduzione particolarmente semplice che trasforma ogni parola dell'assembly, in modo univoco, in una parola del linguaggio macchina. Esso utilizza però un alfabeto più ricco che consente di esprimere le singole parole in una forma più facilmente comprensibile al programmatore umano (per esempio, SUM per "somma"). In altre parole, i codici operativi e i dati nel linguaggio macchina sono pattern di bit. L'assembly utilizza codici mnemonici al posto dei pattern di bit. Per esempio, sul processore Z80, il codice macchina 00000101 corrisponde all'ordine di decrementare di 1 il numero contenuto nel registro B, mentre in linguaggio assembly lo stesso ordine si scrive DEC B (proprio per questo motivo un programma assembly richiede una traduzione per poter essere poi eseguito dal processore). I codici macchina si possono trascrivere, per comodità anche in notazione esadecimale: ad esempio sempre nello Z80 il susseguirsi di codici:

3E 41 D3 98  equivale in assembler a:
       LD      A,41H
       OUT     98H

Che invia la lettera A maiuscola (codice ASCII 41H) sulla porta di uscita 98H (in alcuni casi è lo schermo).

In alcuni linguaggi macchina la lunghezza delle istruzioni è 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 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 bits
[  op  |  rs |  rt |  rd |shamt| funct]  tipo R
[  op  |  rs |  rt | address/immediate]  tipo I
[  op  |        target address        ]  tipo J

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
 100011 00011 01000 00000 00001 000100   forma binaria

Salto all'indirizzo 1025:

[  op  |        target address        ]
    2                 1025               forma decimale
 000010 00000 00000 00000 10000 000001   forma binaria
Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com