20 Novembre 2021
Expand search form

Cosa converte il programma in linguaggio assembly in linguaggio macchina?

Oggi siamo molto abituati ad eseguire una ricca varietà di sistemi operativi e programmi sui nostri dispositivi mobili, da Office su un portatile Windows a un gioco sul nostro smartphone Android, siamo abituati a eseguire qualsiasi programma che abbiamo installato (memorizzato) su un dispositivo. Ma una volta le cose non erano così. Ok, non sto parlando di 5 anni fa, ma più di 50 o 60 anni fa. Vedete, i primi computer non eseguivano programmi memorizzati su un qualche tipo di supporto, ma solo il programma che il circuito fisico permetteva loro di eseguire. L’idea di caricare ed eseguire un programma memorizzato non esisteva.

turing e von neumann

Questo fino a quando due ragazzi molto intelligenti hanno iniziato a pensare di costruire un computer universale che potrebbe teoricamente eseguire qualsiasi programma che vogliamo creare. Il primo di questi due ragazzi fu Alan Turing. Ha giocato un ruolo importante nel decifrare il codice tedesco Enigma durante la seconda guerra mondiale, tuttavia è anche conosciuto per molte altre cose, compreso il suo lavoro sull’IA (cioè il test di Turing) e per la sua idea della macchina di Turing (e la macchina universale di Turing). In sostanza Turing descrisse una macchina che poteva leggere o scrivere simboli da un nastro e poi sotto la direzione di quei simboli spostarsi in un’altra parte del nastro e leggere o scrivere altri simboli e così via. Questa idea fu estesa da Jon von Neumann in un progetto noto come architettura von Neumann, invece del nastro aveva una memoria ad accesso casuale (RAM) e una CPU che poteva eseguire istruzioni dalla RAM e modificare i dati nella stessa RAM. L’architettura von Neumann è la premessa di base di quasi tutti i computer moderni.

Von_Neumann_Architettura-1280px

Ma cosa ha a che fare tutto questo con il linguaggio assembly e il codice macchina? In poche parole il computer nel cuore del tuo smartphone è una macchina di von Neumann che esegue programmi (app) memorizzati nel telefono (la memoria flash) e questi programmi possono essere cambiati, aggiornati e rimossi, semplicemente alterando ciò che è memorizzato nella flash. Ogni app è composta da istruzioni, istruzioni memorizzate che dicono al processore cosa fare. Il tuo smartphone ha probabilmente un processore basato sull’architettura ARM e un core CPU progettato da ARM (ad esempio il Cortex-A72) o da uno dei partner di ARM come Samsung o Qualcomm. Questi processori capiscono tutti gli stessi codici di istruzioni.

Le istruzioni sono fondamentalmente numeri. La larghezza di questi numeri (ad esempio 8-bit, 16-bit, ecc.) dipende dall’architettura. Le istruzioni ARM possono essere larghe 16-bit, 32-bit o 64-bit, a seconda della modalità utilizzata. Quando la CPU vede un numero, per esempio 0x0120 o 288sa che questo significa “mettere 1 nel registro 0”. È lo stesso sul Cortex-A72, sul Qualcom Kryo, sul processore Apple A9, e così via.

È questo formato “grezzo” del numero che è codice macchina. Su un processore moderno è molto difficile (e inefficiente) scrivere codice macchina a mano, digitando i numeri grezzi. Quindi c’è un linguaggio di livello leggermente superiore chiamato linguaggio assembly che è una rappresentazione testuale del codice macchina. Un programma chiamato assemblatore viene poi usato per convertire dal linguaggio assembly al codice macchina.

assemblatore

Linguaggio di assemblaggio

Prima ho menzionato che 0x0120 significa “metti 1 nel registro 0”. Un registro è un piccolo vaso che può contenere un numero, ce ne sono solo pochi (al massimo 64), quindi non possono sostituire la memoria principale, tuttavia quando si fa un lavoro particolare (per esempio, un looping mentre si lavora su una stringa) sono ottimi come un veloce supporto temporaneo per i dati. Nel linguaggio assembly “metti 1 nel registro 0” si scrive così: “movs r0, #1”. Così quando l’assemblatore vede un’operazione “movs” può generare il giusto codice macchina, a seconda del registro usato ecc.

Quindi ecco un frammento di linguaggio assembly:

Le linee che iniziano con “//” sono in realtà commenti che contengono l’equivalente in linguaggio C di ciò che il linguaggio assembly sta facendo. Come potete vedere questo codice imposta una variabile chiamata iche è memorizzata 8 byte più in basso sullo stack, a 15. Poi imposta jche è memorizzata 12 byte più in basso sullo stack, a 25. Infine aggiunge i a j (caricando i in r2 e j in r3) e poi memorizza il risultato in i (8 byte in basso nello stack).

Questo significa che per impostare il valore di due variabili e poi sommarle richiede 8 righe di codice. Immaginate quanto codice avreste bisogno per scrivere un gioco come Clash Royale! È qui che entrano in gioco linguaggi di livello superiore come C, C++ e Java. Il programma equivalente in C è lungo solo tre righe, un bel risparmio! Inoltre i linguaggi di alto livello ti permettono di usare bei nomi di variabili piuttosto che dover memorizzare le cose sullo stack o nella memoria principale.

Normalmente le applicazioni per Android sono scritte in Java. Il Java viene compilato in byte-code Java che a sua volta viene eseguito sulla Java Virtual Machine. Questo funziona bene per la maggior parte delle applicazioni, ma se hai bisogno di spremere quel po’ di prestazioni in più dalla tua applicazione, allora potresti voler scrivere il codice in C o direttamente in linguaggio assembly. Utilizzando l’Android Native Development Kit (NDK) è possibile scrivere un’applicazione in C. Il C viene poi compilato direttamente in codice macchina. O se vuoi il massimo livello di controllo, puoi anche scrivere codice assembly usando l’NDK! Solo i nerd devono fare domanda.

Ricapitolazione

I computer a programma memorizzato possono essere indicati come macchine con architettura von Neumann. Eseguono programmi memorizzati da qualche parte nel sistema e sono flessibili (universali) nel senso che possono eseguire qualsiasi algoritmo calcolabile. Le istruzioni grezze che la CPU esegue sono chiamate codice macchina. Una forma leggermente più leggibile del codice macchina è chiamata linguaggio assembly e un programma chiamato assemblatore è usato per convertire le notazioni assembly in codice macchina. I linguaggi di livello superiore come C o C++ sono convertiti in codice macchina usando un compilatore. Mentre le normali applicazioni sono scritte in Java su Android, è possibile scrivere programmi in C, C++ e linguaggio assembly usando l’NDK.

Potresti anche essere interessato agli argomenti

Cosa converte il linguaggio assembly in linguaggio macchina?

Un programma per computer che converte il linguaggio assembly in linguaggio macchina è Assembler. Assemblatore : Un assemblatore è un tipo di programma per computer che interpreta programmi software scritti in linguaggio assembly in linguaggio macchina, codice e istruzioni che possono essere eseguiti da un computer.

Quale programma converte un programma in linguaggio assembly in codice macchina?

assemblatore
Un assemblatore è un programma che converte il linguaggio assembly in codice macchina. Prende i comandi e le operazioni di base dal codice assembly e li converte in codice binario che può essere riconosciuto da uno specifico tipo di processore. Gli assemblatori sono simili ai compilatori in quanto producono codice eseguibile.

Viene usato per convertire il programma in linguaggio assembly in linguaggio macchina?

Il compilatore è usato per convertire il programma in linguaggio assembly in linguaggio macchina.

In cosa è scritto il codice macchina?

linguaggio macchina
Il codice macchina è un programma per computer scritto in linguaggio macchina. Utilizza il set di istruzioni di una particolare architettura di computer. Di solito è scritto in binario.

Quali sono gli svantaggi del linguaggio macchina?

Dipende dalla macchina, cioè differisce da computer a computer. È difficile da programmare e scrivere. È incline agli errori – È difficile da modificare. È un linguaggio di programmazione di basso livello che permette all’utente di scrivere un programma usando istruzioni mnemoniche alfanumeriche.

Quali sono gli svantaggi del linguaggio macchina?

È dipendente dalla macchina, cioè differisce da computer a computer. È difficile da programmare e scrivere. È incline agli errori – È difficile da modificare. È un linguaggio di programmazione di basso livello che permette all’utente di scrivere un programma usando istruzioni mnemoniche alfanumeriche.

Qual è la differenza tra linguaggio macchina e linguaggio assembly?

Il linguaggio macchina è il linguaggio di programmazione di basso livello. Il linguaggio macchina può essere rappresentato solo da 0 e 1. … Il linguaggio di assemblaggio è più del linguaggio di basso livello e meno di quello di alto livello, quindi è un linguaggio intermedio. I linguaggi assembly usano numeri, simboli e abbreviazioni invece di 0 e 1.

Quali sono gli svantaggi dell’apprendimento automatico?

Svantaggi dell’apprendimento automaticoPossibilità di errore elevato. In ML, possiamo scegliere gli algoritmi in base ai risultati accurati. … Selezione dell’algoritmo. La selezione di un algoritmo nel Machine Learning è ancora un lavoro manuale. … Acquisizione dei dati. In ML, lavoriamo costantemente sui dati. … Tempo e spazio.

Quali sono i pro e i contro del linguaggio macchina?

Linguaggio macchinaAvantaggiSvantaggiIl linguaggio macchina rende l’uso del computer veloce ed efficiente.Tutti i codici operativi devono essere ricordatiNon richiede un traduttore per tradurre il codice. È direttamente compreso dal computer.Tutti gli indirizzi di memoria devono essere ricordati.1 altra riga-28 agosto 2015

Quali sono gli esempi di linguaggio assembly?

Esempi tipici di grandi programmi in linguaggio assembly di questo periodo sono i sistemi operativi IBM PC DOS, il compilatore Turbo Pascal e le prime applicazioni come il programma per fogli di calcolo Lotus 1-2-3.

Dove si usa il linguaggio macchina?

Nella programmazione dei computer, il codice macchina è qualsiasi linguaggio di programmazione di basso livello, composto da istruzioni in linguaggio macchina, che viene usato per controllare l’unità centrale di elaborazione (CPU) di un computer.

Il linguaggio assembly è difficile?

Tuttavia, imparare l’assembly non è molto più difficile che imparare il tuo primo linguaggio di programmazione. L’assembly è difficile da leggere e capire. … È anche abbastanza facile scrivere programmi C, Prolog e APL impossibili da leggere. Con l’esperienza, troverete l’assembly facile da leggere come gli altri linguaggi.

Cos’è l’esempio del linguaggio macchina?

Il linguaggio macchina, o codice macchina, è un linguaggio di basso livello composto da cifre binarie (uno e zero). … Per esempio, il valore ASCII per la lettera “A” è 01000001 nel codice macchina, ma questi dati vengono visualizzati come “A” sullo schermo.

A cosa non serve il machine learning?

Richiedono un lungo addestramento offline/batch. Non imparano in modo incrementale o interattivo, in tempo reale. Scarsa capacità di trasferimento dell’apprendimento, riusabilità dei moduli e integrazione. I sistemi sono opachi, il che li rende molto difficili da correggere.

Qual è l’uso principale del machine learning?

L’apprendimento automatico (ML) è un tipo di intelligenza artificiale (AI) che permette alle applicazioni software di diventare più accurate nel prevedere i risultati senza essere esplicitamente programmate per farlo. Gli algoritmi di apprendimento automatico usano dati storici come input per prevedere nuovi valori di output.

Articolo precedente

Come si fa a bollire un’aragosta di mezzo chilo?

Articolo successivo

Qual è il miglior set di posate in acciaio inossidabile?

You might be interested in …