Les computadores de primera generació es programaven en llenguatge màquina. Les segones amb llenguatge d'assemblatge. El tercer i quart es programen en llenguatge d'alt nivell. Els de la generació quintana es programaran amb un llenguatge pròxim al llenguatge natural.
Per tant, per a programar una computadora actual és necessari dominar algun llenguatge d'alt nivell (BASIC, FORTRAN, COBOL, PASCAL...) i utilitzant aquest llenguatge com a eina, redactarem programes que resolguin els nostres problemes. En qualsevol cas, en una computadora concreta, i més encara en una micro, no podem utilitzar qualsevol llenguatge, sinó un dels quals la nostra computadora té implementats en el seu Sistema Operatiu.
L'ús de llenguatges d'alt nivell no exclou el llenguatge màquina i sobretot el llenguatge d'assemblatge (assembler). Aquestes opcions, almenys la de l'assemblatge, a vegades són molt adequades.
L'objectiu d'aquest article és explicar quan i per a què han d'utilitzar-se el llenguatge d'assemblatge (ASSEMBLER) i els llenguatges superiors.
Les ordres que executa o executa directament un computador són aquelles escrites en llenguatge màquina. Les ordres en llenguatge màquina són conegudes i executades per la Unitat de Control de la CPU. Aquestes ordres s'adhereixen al computador i són relativament senzilles, cadascuna d'elles representa una sola operació aritmètica o lògica normal. El llenguatge màquina s'expressa en codis binaris mitjançant 0 i 1.
Programar en binari resulta molt pesat, deixant a un costat les altres molèsties. Per això es van crear llenguatges simbòlics, primer llenguatges d'assemblatge i després superiors.
Els programes escrits en llenguatge simbòlic no poden executar-se directament. Els programes escrits en llenguatge màquina només poden executar-se directament. L'objectiu dels traductors és superar aquesta objecció.
Un programa traductor pren com a dada el programa escrit en llenguatge simbòlic i com a resultat de la seva execució crea un programa equivalent escrit en llenguatge màquina. Per tant, el programa que realitzem quan el programem en llenguatge simbòlic no es pot executar directament, ja que abans d'executar-ho cal realitzar un procés de traducció.
Per això dèiem que en una computadora no es pot programar en qualsevol llengua, perquè per a programar en un llenguatge és necessari el seu despertador. Els programes traductors estan escrits en llenguatge màquina i formen part del Sistema Operatiu, és a dir, els usuaris no han de programar-los i constitueixen una de les principals parts del programari auxiliar que incorpora la computadora.
El programa que tradueix automàticament del llenguatge de programació a un altre llenguatge que la màquina entén directament, el llenguatge màquina, es diu traductor. En els traductors es distingeixen diferents tipus; d'altra banda, els assembladors, per a traduir programes de llenguatge assemblador, i d'altra banda, els compiladors i els intèrprets per a traduir llenguatges superiors.
Quan els compiladors tradueixen un programa, obtenen un programa equivalent en llenguatge màquina (anomenat programa d'objectes), quedant preparats per a executar aquest programa d'objectes (veure figura 1).
Per contra, els intèrprets no tradueixen íntegrament el programa font, sinó que el llegeixen ordenadament, el tradueixen i l'executen. Per tant, no corresponen a la 2a fase independent (traducció i execució), ja que ambdues s'unifiquen (veure figura 2).
Per a traduir un llenguatge d'alt nivell es pot utilitzar un compilador o un intèrpret. Per als casos de BASIC, PASCAL i uns altres se solen oferir ambdues, compilador i intèrpret. Quan el traductor resulta molt complex i llarg, no és convenient una implementació interpretativa. I és que per a dur a terme el programa, l'intèrpret ha d'estar tot el temps en la momoría, prenent per a ell una part massa gran. Per tant, en la majoria dels llenguatges complexos s'utilitzen compiladors. Per això no hi ha intèrprets per a COBOL o FORTRAN, almenys en les computadores normals.
Quan hi ha dues opcions per a tornar, quin triar?, interpretació o compilació?
Abans de respondre a aquesta pregunta cal analitzar les dues principals diferències que genera el seu ús:
Llavors, per a respondre a la pregunta anterior, cal diferenciar dos casos: Per al desenvolupament d'un nou programa, l'ideal és utilitzar un intèrpret, ja que les proves generades per les correccions poden realitzar-se de manera immediata. Quan el programa estigui provat i funcioni correctament, és millor aconseguir mitjançant el compilador un programa d'objectes equivalent i utilitzar el programa d'objectes en totes les execucions posteriors, amb el que el temps d'execució ha estat menor, ja que no és necessari traduir.
Per tant, quan hi ha dues opcions per a un llenguatge determinat, el millor en la fase de desenvolupament és utilitzar l'intèrpret, però una vegada comprovat que el programa està bé. Mitjançant el compilador s'obtindrà un programa d'objectes per a la seva utilització en la fase d'explotació.
No obstant això, moltes vegades no està disponible ja que el Sistema Operatiu només ofereix un. En la majoria dels micro només s'ofereix intèrpret per al llenguatge BASIC. Els programes que tradueixen el llenguatge d'assemblatge es denominen machihembradores (ASSEMBLY), encara que siguin similars als compiladors. Els assembladors, a l'ésser el llenguatge d'origen corresponent el llenguatge d'assemblatge, presenten una característica particular: la seva traducció és molt ràpida en obtenir una sola ordre de màquina de cada deu. Per tant, el procés de traducció és molt més senzill que el dels compiladors.
Al marge de les diferències intrínseques que suposa l'ús de l'un o l'altre mena de traductors en un determinat llenguatge, cada llenguatge de programació té les seves pròpies característiques que limiten el seu ús.
En primer lloc, els llenguatges de programació podrien classificar-se en dos tipus: el llenguatge d'alt nivell i els llenguatges d'assemblatge es comparen a continuació les característiques de tots dos tipus:
Per la mateixa raó, els programes escrits en llenguatge superior són més comprensibles i llegibles que els escrits en llenguatge d'assemblatge.
Les característiques dels paràgrafs a) i b) estan a favor de la utilització dels llenços superiors i les dels paràgrafs c) i d) en contra. En definitiva, l'ús de llenguatges d'alt nivell genera programes més universals, fàcils, fiables i comprensibles, però amb temps d'execució més lents i amb major acolliment de memòria.
Algunes de les característiques esmentades les analitzarem amb un exemple. En l'exemple es presenta un programa que, una vegada calculats els primers mil nombres primers, es redacta 1000 amb tres llenguatges diferents: el llenguatge d'assemblatge, el FORTRAN i el PASCAL (veure figura 3). En els tres casos s'ha seguit el mateix algorisme i la manera de programació (denominada programació estructurada), implementats en el miniconputador denominat VAX 750.
Rastrejant l'exemple, les ordres del programa escrites en llenguatge d'assemblatge no s'entenen si no es coneix el llenguatge d'assemblatge de la computadora VAX 11. Les altres dues es poden entendre si es coneix FORTAN o PASCAL de qualsevol computador.
En el programa escrit amb llenguatge d'assemblatge, encara que les ordres es comprenen una a una, resulta molt difícil comprendre íntegrament i realitzar algun canvi. En els altres dos casos, sobretot en el de PASCAL, la intel·ligibilitat del programa és molt major.
Amb la finalitat de donar una idea més clara de les característiques exposades en el paràgraf c) anterior, els exemples han traduït i executat els 3 programes obtenint els resultats que es mostren en la taula 1.
Analitzant la Taula 1 s'observa que utilitzant llenguatges d'alt nivell es creen programes de major acolliment i de menor lentitud. Per això, en aquest cas, la part de memo que ocupen les ordres dels programes escrits en llenguatge d'alt nivell és (aproximadament) un 50% major que la part corresponent al programa de llenguatge d'assemblatge, arribant al 100% per a les dades. De cara al temps d'execució, el programa de llenguatge d'assemblatge és un 50% més ràpid que el de FORTRAN i un 100% més ràpid que el de PASCAL. Aquestes mesures són bastant generalitzades, encara que en el cas de l'adopció del memori d'aquest exemple hi ha massa diferències.
En general, es pot afirmar que els programes realitzats en llenguatge d'alt nivell són un 50% més lents i alts que els realitzats en llenguatge d'assemblatge.
Després de veure i analitzar les característiques anteriors, ha arribat el moment de respondre a la pregunta principal. Quan utilitzar un llenguatge d'assemblatge i quan un alt nivell?
La resposta és ara evident. En la majoria dels casos s'utilitzaran llenguatges d'alt nivell i llenguatge d'assemblatge únicament en els dos següents casos.
No obstant això, quan utilitzem un llenguatge d'alt nivell, quin llenguatge triar? No és objecte d'aquest article respondre a aquesta pregunta, però per a la presa de decisió es tindran en compte les següents tres característiques:
En la taula 1 es pot comparar la velocitat corresponent a un programa de PASCAL i la corresponent a un programa de FORTRAN. El de PASCAL és un 25% més lent, però com es pot observar en la Figura 3, el programa de PASCAL es llegeix millor que el de FORTRAN. A més, el compilador PASCAL realitza moltes més comprovacions, per la qual cosa els errors es troben abans reduint el temps de prova.
Els llenguatges aquí esmentats són convencionals, és a dir, imperatius; no s'han esmentat els llenguatges funcionals (LISP i similars) i explicatius (PROLOG) que actualment tenen un gran desenvolupament.
Tampoc s'han esmentat els llenguatges desenvolupats per a aplicacions concretes (estadistica GPSS, simulació SIMULA, etc.)
Els criteris a tenir en compte a l'hora de seleccionar el llenguatge de programació són: