Che linguaggio capisce un computer?

Un computer è una macchina molto complessa costruita da strati e strati di tecnologia.

In definitiva, i computer non capiscono nulla, sono una grande rete di semplici circuiti digitali che obbediscono alle leggi della fisica. Un chip moderno può avere miliardi di transistor. Alcuni strati sono molto complessi ma offrono solo un'interfaccia limitata. Per esempio, un chip Intel ha un sistema operativo Minix completo che gira al suo interno solo per offrire un livello di linguaggio macchina con molte CPU.

Detto questo, di solito, il livello più basso che un umano può usare per dare ordini ai computer è il linguaggio macchina. Questo è un insieme di istruzioni sotto forma di numeri (sequenza di cifre). Queste istruzioni compongono il set di istruzioni della CPU, e quel set di istruzioni limita ciò che il computer può fare.

Il linguaggio macchina sarebbe rappresentato, per gli umani, come numeri. Negli anni '50 o '60, prima che il linguaggio di assemblaggio e gli assemblatori si diffondessero, i programmatori potevano dover inserire i numeri, a mano, in un pannello.

L'immagine qui sotto mostra il pannello a 22 bit del PDP-11. Si inseriva un indirizzo e un numero che sarebbe stato caricato in quell'indirizzo in memoria.

main-qimg-bb7430205e5e9c1c87f33d72b2b94bf3.webp

Quindi, il linguaggio più semplice che un computer e un umano possono capire e "comunicare" sono numeri che rappresentano istruzioni che controllano il comportamento del circuito elettronico (come aggiungere il registro B al registro A). Lo chiamiamo linguaggio macchina.

Devo sottolineare che ci sono computer che hanno un set di istruzioni modificabile, o computer che possono essere microprogrammati, cioè, c'è un linguaggio "sotto" il set di istruzioni che si può usare per modificare ciò che il computer può fare, nei limiti del suo circuito.

Gli esseri umani, tuttavia, sono molto meglio con le parole. Fin dall'inizio, abbiamo associato queste istruzioni a delle mnemotecniche che le rappresentano, come ADD A,B per aggiungere il registro B al registro A. Queste mnemotecniche formano il linguaggio Assembly.

Oggi, la maggior parte dei chip verrebbero lanciati e discussi utilizzando il loro linguaggio Assembly come una rappresentazione molto più leggibile del vero linguaggio macchina (numeri). Di solito, usiamo Assemblatori (una specie di programma per computer) per tradurre l'Assembly in linguaggio macchina, ma alla fine, lavorando su un nuovo chip, è possibile che qualcuno debba fare qualche traduzione manuale.

Non è facile programmare grandi sistemi in Assembly, così abbiamo sviluppato Linguaggi di Programmazione. I linguaggi di programmazione sono progettati per essere facili da programmare e non ambigui per i computer. Di solito, sono progettati con un obiettivo, come, all'inizio, Fortran è stato progettato per i calcoli, Cobol per le applicazioni commerciali, e C per la programmazione di sistema.

I linguaggi di programmazione possono essere tradotti direttamente, dai compilatori, in linguaggio macchina o altra rappresentazione intermedia, come l'assemblaggio o anche altri linguaggi di programmazione. Molti studenti creano linguaggi di programmazione traducendo qualcosa in C, e compilano il C.

Ci sono sforzi per far capire ai computer la grafica (come i diagrammi UML) e il linguaggio naturale (come l'inglese).

Quindi, la risposta è che i computer capiscono molti linguaggi diversi, riguardo a quale livello della gerarchia di questa macchina molto complessa si sta discutendo.

Puoi fare riferimento a Structured Computer Organization di Andrew Tanenbaum per capire meglio questi livelli e i loro linguaggi.

Se vuoi saperne di più sui linguaggi di programmazione, puoi guardare il libro Programming Languages di Sebesta.