Llenguatge d'assemblatge i llenguatges d'alt nivell: quan i per què

1986/12/01 Alegria Loinaz, Iñaki Iturria: Elhuyar aldizkaria

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.

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.

Introducció

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ó.

Figura : Esquema funcional del COMPILADOR.

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.

Tipus de traductors

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:

    Quan s'utilitza un compilador, si un programa està bé, el seu programa objecte pot ser guardat i no ha de ser retornat en posteriors execucions d'aquest programa. Per contra, el programa haurà de traduir-se en totes les execucions utilitzant un intèrpret.
  1. Quan un nou programa s'està desenvolupant a través del compilador, per a provar-lo primer es retornarà el programa complet, després s'executaran i es repetiran els passos previs a la correcció dels errors obtinguts. Si es realitza a través de l'intèrpret, el programa pot canviar a mesura que s'executa el programa i provar-lo al mateix temps, sense perdre temps a traduir tot el programa.
Figura : Esquema funcional de l'INTÈRPRET.

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.

Característiques del llenguatge

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:

    Mentre el llenguatge d'assemblatge està lligat a la màquina, els llenguatges superiors són universals, és a dir, un programa escrit amb un llenguatge d'alt nivell pot ser utilitzat en diferents computadores sense canvis o amb pocs canvis. Un programa escrit en llenguatge d'assemblatge és vàlid únicament per a un computador concret. El llenguatge d'assemblatge està molt relacionat amb el llenguatge màquina, per la qual cosa està més lluny del programa que el llenguatge d'alt nivell. Per tant, la construcció dels programes resulta molt més senzilla amb un llenguatge d'alt nivell que amb un llenguatge d'assemblatge, la qual cosa provocarà menys errors o errors utilitzant un llenguatge d'alt nivell. Quan ho programem amb llenguatge d'assemblatge sabem com s'implementen ordres i dades en el llenguatge màquina o almenys el percebem. Per contra, l'ús de llenguatges d'alt nivell, pel seu caràcter universal, impedeix utilitzar els detalls i avantatges de cada llenguatge màquina. En conseqüència, el programa d'objectes obtingut amb un llenguatge d'assemblatge per al mateix problema serà més ràpid i tindrà una deposició de memo menor que l'obtinguda amb un llenguatge superior.
  • Per al maneig d'alguns components o operacions especials de la computadora (principalment per a realitzar anomenades al sistema o per a obtenir o modificar informació sotmesa al sistema) és necessari utilitzar el llenguatge d'assemblatge. En aquest cas és obligatori l'ús del llenguatge d'assemblatge.
1. Taula.- Mesures dels programes de l'exemple.

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.

    Per a la realització d'un programa o subprograma que manipuli determinats components i/o operacions especials de la computadora, i en aquest cas és imprescindible l'ús del llenguatge d'excitació (veure paràgraf d)). El temps o moment d'execució sigui crític. Per exemple, quan un programa construït amb un llenguatge d'alt nivell no entra en la memòria, si es fa amb un llenguatge de mànigues es pot introduir. En aplicacions en temps real el temps d'execució és crític, per la qual cosa val la pena realitzar el programa complet o les subrutines més utilitzades amb llenguatge d'assemblatge.
2. Taula. Llenguatges de programació més importants.

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:

veure taula 2
    Tipus d'aplicació. No és el mateix programar la política de gestió que l'aplicació científica. Mentre que en els primers es manegen quantitats molt elevades de dades mitjançant càlculs simples, en els altres el més important i complex és el càlcul. Per això, existeixen llenguatges dirigits al càlcul científic (FORTRAN, APL...) dirigits a la gestió (COBOL, RPG,...) encara que uns altres s'utilitzen en dos àmbits (PL/1, BASIC, PASCAL). Eficiència. Alguns llenguatges, quan es van dissenyar, es van centrar en aquest concepte. En aquests casos la major importància és la velocitat d'execució, la potència, l'eficàcia... Per això, els compiladors resulten bastant grans i no poden implementar-se en computadores petites. A aquest tipus pertanyen els llenguatges COBOL, FORTRAN i PL/1. Actualment, comercialment aquest tipus de llenguatges són els més utilitzats.
  1. Metodologia. En els últims anys s'està donant cada vegada més importància a la metodologia en l'elaboració de programari. En lloc de centrar-se en l'eficàcia, alguns llenguatges estan dirigits a la construcció de programes de bona metodologia, és a dir, a través d'aquests llenguatges es poden elaborar programes més fiables, estructurats, més simples, més variables. Amb aquests llenguatges s'aconsegueix un programari més barat, ja que està demostrat que més de la meitat del cost d'un programa es basa en proves i assajos. Un llenguatge d'aquest tipus és PASCAL, actualment el més adequat per a aprendre, ja que acostuma a l'alumne en la metodologia de programació. El llenguatge BASIC, per part seva, no ajuda en absolut a realitzar programes estructurats i els que aprenen com a primer llenguatge adquireixen molts mals costums.

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.)

Conclusions

Figura : PROGRAMA EXEMPLE.

Els criteris a tenir en compte a l'hora de seleccionar el llenguatge de programació són:

    Si el problema té a veure amb l'arquitectura de la computadora i amb el Sistema, la majoria de les vegades és obligatori l'ús del llenguatge d'assemblatge. Si la presa de memo o el temps d'execució és crític, l'ideal és utilitzar el llenguatge d'assemblatge. A excepció dels dos casos anteriors, s'utilitzarà un llenguatge d'alt nivell i tenint en compte el tipus d'aplicació, caldrà decidir quin concepte li donem més importància: eficiència o metodologia. L'ideal seria triar un llenguatge eficaç que impulsi la bona metodologia, però això no existeix en l'actualitat. No obstant això, les últimes versions de FORTRAN impulsen la metodologia i aconsegueixen programes estructurats sense perdre efectivitat. Si una vegada seleccionat el llenguatge existís compilador i interpretació per a traduir els programes, en les proves s'utilitzaria aquest últim i, una vegada comprovat la seva idoneïtat, s'utilitzarà el programa objecte per a l'explotació.