Definizione del linguaggio assembly

Che cos'è un linguaggio assembly?

Un linguaggio assembly è un tipo di linguaggio di programmazione di basso livello destinato a comunicare direttamente con l'hardware di un computer.A differenza del linguaggio macchina, che consiste in caratteri binari ed esadecimali, i linguaggi assembly sono progettati per essere leggibili dagli esseri umani.

I linguaggi di programmazione di basso livello come il linguaggio assembly sono un ponte necessario tra l'hardware sottostante di un computer e i linguaggi di programmazione di livello superiore, come Python o JavaScript, in cui vengono scritti i moderni programmi software.

Da asporto chiave

  • Un linguaggio assembly è un tipo di linguaggio di programmazione che traduce linguaggi di alto livello in linguaggio macchina.
  • È un ponte necessario tra i programmi software e le loro piattaforme hardware sottostanti.
  • Il linguaggio assembly si basa sulla sintassi del linguaggio, sulle etichette, sugli operatori e sulle direttive per convertire il codice in istruzioni macchina utilizzabili.
  • Il linguaggio assembly può passare attraverso assembler a passaggio singolo o multipassaggio, ciascuno con usi e vantaggi specifici.
  • Oggi, i linguaggi assemble raramente vengono scritti direttamente, sebbene siano ancora utilizzati in alcune applicazioni di nicchia, ad esempio quando i requisiti di prestazioni sono particolarmente elevati.

Come funzionano i linguaggi assembly

Fondamentalmente, le istruzioni più elementari eseguite da un computer sono codici binari, costituiti da uno e zero.Questi codici vengono tradotti direttamente negli stati "on" e "off" dell'elettricità che si muove attraverso i circuiti fisici del computer.In sostanza, questi semplici codici costituiscono la base del "linguaggio macchina", la varietà più fondamentale del linguaggio di programmazione.

Naturalmente, nessun essere umano sarebbe in grado di costruire programmi software moderni programmando esplicitamente uno e zero.Invece, i programmatori umani devono fare affidamento su vari livelli di astrazione che possono permettersi di articolare i propri comandi in un formato più intuitivo per gli esseri umani.

In particolare, i programmatori moderni emettono comandi nei cosiddetti "linguaggi di alto livello", che utilizzano sintassi intuitiva come parole e frasi inglesi intere, nonché operatori logici come "e", "o" e "altro" che sono familiare all'uso quotidiano.

In definitiva, tuttavia, questi comandi di alto livello devono essere tradotti in linguaggio macchina.Piuttosto che farlo manualmente, i programmatori si affidano a linguaggi assembly il cui scopo è tradurre automaticamente tra questi linguaggi di alto livello e di basso livello.I primi linguaggi assembly sono stati sviluppati negli anni '40 e, sebbene i programmatori moderni e i moderni processori di linguaggio naturale trascorrano pochissimo tempo a occuparsi dei linguaggi assembly, rimangono comunque essenziali per il funzionamento generale di un computer.

Durante i primi giorni dell'informatica, la programmazione dei sistemi e la programmazione delle applicazioni si svolgevano entrambe interamente in linguaggio assembly.Senza i linguaggi assembly, molti computer moderni e linguaggi di livello superiore che usiamo oggi non sarebbero stati possibili.

Componenti del linguaggio assembly

Sintassi

Quando si scrive un codice in qualsiasi linguaggio di programma, esiste un ordine di regole osservabile e specifico che deve essere seguito per consentire a un compilatore di eseguire il codice senza errori.Queste regole sono definite come sintassi e contengono criteri come il numero massimo di caratteri consentiti, con quali caratteri devono iniziare le righe di codice o cosa significano determinati simboli "cioè un punto e virgola".

Etichetta

Un'etichetta è un simbolo che rappresenta l'indirizzo in cui è memorizzata un'istruzione o un dato.Il suo scopo è fungere da destinazione quando viene fatto riferimento in una dichiarazione.Le etichette possono essere utilizzate ovunque sia possibile utilizzare un indirizzo nei linguaggi assembly.Un'etichetta simbolica è costituita da un identificatore seguito da due punti, mentre le etichette numeriche sono costituite da un unico digitale seguito da due punti.

Operatori

Detti anche comandi, gli operatori sono espressioni logiche che si verificano dopo il campo dell'etichetta.Inoltre, deve essere preceduto da almeno uno spazio vuoto.Gli operatori possono essere opcode o direttiva.Il codice operativo corrisponde direttamente alle istruzioni della macchina e il codice operazione include qualsiasi nome di registro associato all'istruzione.In alternativa, i codici operativi delle direttive sono istruzioni conosciute dall'assemblatore.

Direttiva

Le direttive sono istruzioni per l'assemblatore che indicano quali azioni devono essere eseguite durante il processo di assemblaggio.Le direttive hanno l'importanza di dichiarare o riservare memoria per le variabili; queste variabili possono essere richiamate successivamente nei processi per svolgere funzioni più dinamiche.Le direttive vengono utilizzate anche per suddividere i programmi in diverse sezioni.

Macro

Una macro in linguaggio assembly è un formato di scarpa modello che presenta una serie o un modello di istruzioni.Questa sequenza di istruzioni in linguaggio assembly potrebbe essere comune a più programmi diversi.Una funzione macro viene utilizzata per interpretare le definizioni delle macro, mentre una chiamata alla macro viene inserita nel codice sorgente in cui sarebbe andato il codice assembly "normale" invece del set di istruzioni della macro.

Mnemonico

Un mnemonico è l'abbreviazione di un'operazione.Un mnemonico viene inserito nel codice operativo per ciascuna istruzione del programma assemble per specificare un "codice operativo" abbreviato che rappresenta un insieme di codici più ampio e completo.Ad esempio, il mnemonico "moltiplica per due" ha un set completo di codice che esegue il mnemonico.

Trading ad alta frequenza

Oggi, i linguaggi assembly rimangono oggetto di studio da parte degli studenti di informatica, al fine di aiutarli a capire come il software moderno si relaziona alle sue piattaforme hardware sottostanti.In alcuni casi, i programmatori devono continuare a scrivere in linguaggi assembly, ad esempio quando le richieste di prestazioni sono particolarmente elevate o quando l'hardware in questione è incompatibile con gli attuali linguaggi di alto livello.

Uno di questi esempi rilevanti per la finanza sono le piattaforme di trading ad alta frequenza (HFT) utilizzate da alcune società finanziarie.In questo mercato, la velocità e l'accuratezza delle transazioni sono di fondamentale importanza affinché le strategie di trading HFT si dimostrino redditizie.Pertanto, al fine di ottenere un vantaggio rispetto ai loro concorrenti, alcune aziende HFT hanno scritto il loro software di trading direttamente in linguaggi assembly, rendendo così superfluo attendere che i comandi da un linguaggio di livello superiore vengano tradotti in linguaggio macchina.

Molti credono che i linguaggi assembly abbiano le curve di apprendimento più ripide e siano i linguaggi informatici più difficili da imparare.

Vantaggi e svantaggi

Il linguaggio assembly di solito può essere eseguito più velocemente dei linguaggi di alto livello.È relativamente facile inserire componenti di eliminazione del codice del linguaggio assembly e il linguaggio assembly in genere richiede meno istruzioni per completare un'attività rispetto ad altri tipi di linguaggi.

I linguaggi assembly sono spesso utilizzati anche dai programmatori che desiderano un maggiore controllo sui propri computer poiché i linguaggi assembly consentono di manipolare direttamente l'hardware.A causa della sua velocità e importanza, alcuni programmi vengono scritti in modo specifico utilizzando il linguaggio assembly poiché il codice di solito può rimanere più piccolo.

I linguaggi assembly tendono ad avere diversi inconvenienti.I programmi lunghi scritti utilizzando il linguaggio assembly richiedono solitamente una potenza di elaborazione maggiore e non possono essere eseguiti su computer di piccole dimensioni.Alcuni potrebbero trovare la sintassi del linguaggio assembly più difficile da ricordare e potrebbe essere necessario più tempo per codificare utilizzando il linguaggio assembly poiché è più complesso.Inoltre, il linguaggio assembly di solito non è portabile tra diverse marche di computer diversi; analogamente al modo in cui i benefici per i dipendenti vengono persi quando si cambia azienda, le lingue non possono essere tradotte senza problemi su computer diversi.

Professionisti
  • L'esecuzione potrebbe essere più semplice rispetto ad altri linguaggi

  • L'esecuzione è generalmente più veloce rispetto ad altre lingue

  • Consente il controllo diretto sull'hardware

  • Il codice può rimanere più piccolo rispetto ad altre lingue

contro
  • La programmazione potrebbe essere più difficile da imparare rispetto ai linguaggi di alto livello

  • La sintassi dei linguaggi assembly è difficile

  • Non portatile tra macchine

Tipi di assemblatori

Il linguaggio assembly deve essere tradotto in linguaggio macchina utilizzando un assemblatore.Esistono due tipi principali di assemblatori.

Un assembler a passaggio singolo esegue la scansione di un programma una volta e crea un programma binario equivalente.Questo tipo di assembler convalida il codice del linguaggio assembly cercando il codice in una tabella di codici mnemonici.Un assembler a passaggio singolo è spesso più veloce di un assemblatore a più passaggi e di solito non è necessario costruire codice intermedio.

Un assemblatore multi-pass significa che l'assemblatore utilizza più di un passaggio.Gli assemblatori multi-pass creano una tabella con ogni simbolo e ciascuno dei loro valori nel primo passaggio, quindi utilizzano la tabella nei passaggi futuri per generare nuovo codice.Ogni passaggio separato di solito gestisce un'attività specifica diversa.Sebbene di solito più lenti, gli assemblatori multi-pass con strutture modulari possono spesso essere riutilizzati per macchine diverse.

Esempio di codice del linguaggio assembly

Di seguito è riportato un esempio di codice in linguaggio assembly Netwide Assembler (NASM).

Esempio di codice del linguaggio assembly.

Loyola Marymount University

In questo esempio, l'istruzione SYSCALL verso la fine del codice attiva la parte di memoria in cui sono archiviati i servizi del sistema operativo.Quindi, il codice RAX viene utilizzato per richiedere la scrittura del codice, quindi RDI per uscire.La funzione SYSCALL viene utilizzata due volte per richiamare il sistema operativo e per indicare al sistema quando il codice è terminato ed è ora di uscire.

Che cos'è un esempio di un linguaggio assembly?

I linguaggi assembly più comunemente usati includono ARM, MIPS e x86.

C++ è un linguaggio assembly?

C++ non è composto da codice assembly.Il linguaggio di elaborazione C++ è costituito da codice C++ che un compilatore traduce in un codice macchina eseguibile.

Python è un linguaggio assembly?

Python è più avanzato dei linguaggi assembly.I linguaggi assembly sono considerati un linguaggio di basso livello, mentre i linguaggi di alto livello come C, Java o Python usano 0 e 1 invece di numeri, simboli e abbreviazioni.

Come vengono utilizzati oggi i linguaggi assembly?

Sebbene siano considerati linguaggi di livello inferiore rispetto ai linguaggi più avanzati, i linguaggi assembly sono ancora utilizzati.Il linguaggio assembly viene utilizzato per manipolare direttamente l'hardware, accedere a istruzioni specializzate del processore o valutare problemi di prestazioni critiche.Queste lingue vengono anche utilizzate per sfruttare il loro vantaggio in termini di velocità rispetto alle lingue di alto livello per attività sensibili al fattore tempo come il trading ad alta frequenza.

La linea di fondo

Il linguaggio assembly è un codice di basso livello che si basa su una forte relazione tra le istruzioni immesse utilizzando il linguaggio di codifica e il modo in cui una macchina interpreta le istruzioni del codice.Il codice viene convertito in azioni eseguibili utilizzando un assemblatore che converte l'input in istruzioni riconoscibili per la macchina.Sebbene fosse prevalente all'inizio dell'informatica, molti sistemi più grandi utilizzano linguaggi di livello superiore.