Linguaxe de ensamblaje e linguaxes de alto nivel: cando e por que

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

As computadoras de primeira xeración programábanse en linguaxe máquina. As segundas con linguaxe de ensamblaje. O terceiro e cuarto prográmanse en linguaxe de alto nivel. Os da xeración quintana programaranse cunha linguaxe próxima á linguaxe natural.

As computadoras de primeira xeración programábanse en linguaxe máquina. As segundas con linguaxe de ensamblaje. O terceiro e cuarto prográmanse en linguaxe de alto nivel. Os da xeración quintana programaranse cunha linguaxe próxima á linguaxe natural.

Por tanto, paira programar una computadora actual é necesario dominar algunha linguaxe de alto nivel (BASIC, FORTRAN, COBOL, PASCAL...) e utilizando esta linguaxe como ferramenta, redactaremos programas que resolvan os nosos problemas. En calquera caso, nunha computadora concreta, e máis aínda nunha micro, non podemos utilizar calquera linguaxe, senón un dos que a nosa computadora ten implementados no seu Sistema Operativo.

O uso de linguaxes de alto nivel non exclúe a linguaxe máquina e sobre todo a linguaxe de ensamblaje (assembler). Estas opcións, polo menos a do ensamblaje, ás veces son moi adecuadas.

O obxectivo deste artigo é explicar cando e paira que deben utilizarse a linguaxe de ensamblaje (ASSEMBLER) e as linguaxes superiores.

Introdución

As ordes que executa ou executa directamente un computador son aquelas escritas en linguaxe máquina. As ordes en linguaxe máquina son coñecidas e executadas pola Unidade de Control da CPU. Estas ordes adhírense ao computador e son relativamente sinxelas, cada una delas representa una soa operación aritmética ou lóxica normal. A linguaxe máquina exprésase en códigos binarios mediante 0 e 1.

Programar en binario resulta moi pesado, deixando ao carón as outras molestias. Por iso creáronse linguaxes simbólicas, primeiro linguaxes de ensamblaje e logo superiores.

Os programas escritos en linguaxe simbólica non poden executarse directamente. Os programas escritos en linguaxe máquina só poden executarse directamente. O obxectivo dos tradutores é superar esta obxección.

Un programa tradutor toma como dato o programa escrito en linguaxe simbólica e como resultado da súa execución crea un programa equivalente escrito en linguaxe máquina. Por tanto, o programa que realizamos cando o programamos en linguaxe simbólica non se pode executar directamente, xa que antes de executalo hai que realizar un proceso de tradución.

Figura : Esquema funcional do COMPILADOR.

Por iso diciamos que nunha computadora non se pode programar en calquera lingua, porque paira programar nunha linguaxe é necesario o seu espertador. Prográmalos tradutores están escritos en linguaxe máquina e forman parte do Sistema Operativo, é dicir, os usuarios non deben programalos e constitúen una das principais partes do software auxiliar que incorpora a computadora.

Tipos de tradutores

O programa que traduce automaticamente da linguaxe de programación a outra linguaxe que a máquina entende directamente, a linguaxe máquina, chámase tradutor. Nos tradutores distínguense diferentes tipos; doutra banda, os ensambladores, paira traducir programas de linguaxe ensamblador, e doutra banda, os compiladores e os intérpretes paira traducir linguaxes superiores.

Cando os compiladores traducen un programa, obteñen un programa equivalente en linguaxe máquina (chamado programa de obxectos), quedando preparados paira executar devandito programa de obxectos (ver figura 1).

Pola contra, os intérpretes non traducen integramente o programa fonte, senón que o len ordenadamente, tradúceno e execútano. Por tanto, non corresponden á 2ª fase independente (tradución e execución), xa que ambas se unifican (ver figura 2).

Paira traducir unha linguaxe de alto nivel pódese utilizar un compilador ou un intérprete. Paira os casos de BASIC, PASCAL e outros se adoitan ofrecer ambas, compilador e intérprete. Cando o tradutor resulta moi complexo e longo, non é conveniente una implementación interpretativa. E é que paira levar a cabo o programa, o intérprete ten que estar todo o tempo na momoría, tomando paira el una parte demasiado grande. Por tanto, na maioría das linguaxes complexas utilízanse compiladores. Por iso non hai intérpretes paira COBOL ou FORTRAN, polo menos nas computadoras normais.

Cando hai dúas opcións paira volver, cal elixir?, interpretación ou compilación?

Antes de responder a esta pregunta hai que analizar as dúas principais diferenzas que xera o seu uso:

    Cando se utiliza un compilador, si un programa está ben, o seu programa obxecto pode ser gardado e non debe ser devolto en posteriores execucións de devandito programa. Pola contra, o programa deberá traducirse en todas as execucións utilizando un intérprete.
  1. Cando un novo programa está a desenvolverse a través do compilador, paira probalo primeiro devolverase o programa completo, despois executaranse e repetiranse os pasos previos á corrección dos erros obtidos. Si realízase a través do intérprete, o programa pode cambiar a medida que se executa o programa e probalo ao mesmo tempo, sen perder tempo en traducir todo o programa.
Figura : Esquema funcional do INTÉRPRETE.

Entón, paira responder á pregunta anterior, hai que diferenciar dous casos: Paira o desenvolvemento dun novo programa, o ideal é utilizar un intérprete, xa que as probas xeradas polas correccións poden realizarse de forma inmediata. Cando o programa estea probado e funcione correctamente, é mellor conseguir mediante o compilador un programa de obxectos equivalente e utilizar o programa de obxectos en todas as execucións posteriores, co que o tempo de execución foi menor, xa que non é necesario traducir.

Por tanto, cando hai dúas opcións paira unha linguaxe determinada, o mellor na fase de desenvolvemento é utilizar o intérprete, pero una vez comprobado que o programa está ben. Mediante o compilador obterase un programa de obxectos paira a súa utilización na fase de explotación.

Con todo, moitas veces non está dispoñible xa que o Sistema Operativo só ofrece un. Na maioría do micro só se ofrece intérprete paira a linguaxe BASIC. Os programas que traducen a linguaxe de ensamblaje denomínanse machihembradores (ASSEMBLY), aínda que sexan similares aos compiladores. Os ensambladores, ao ser a linguaxe de orixe correspondente a linguaxe de ensamblaje, presentan una característica particular: a súa tradución é moi rápida ao obter una soa orde de máquina de cada manancial. Por tanto, o proceso de tradución é moito máis sinxelo que o dos compiladores.

Características da linguaxe

Á marxe das diferenzas intrínsecas que supón o uso dun ou outro tipo de tradutores nunha determinada linguaxe, cada linguaxe de programación ten as súas propias características que limitan o seu uso.

En primeiro lugar, as linguaxes de programación poderían clasificarse en dous tipos: a linguaxe de alto nivel e as linguaxes de ensamblaje compáranse a continuación as características de ambos os tipos:

    Mentres a linguaxe de ensamblaje está ligado á máquina, as linguaxes superiores son universais, é dicir, un programa escrito cunha linguaxe de alto nivel pode ser utilizado en diferentes computadoras sen cambios ou con poucos cambios. Un programa escrito en linguaxe de ensamblaje é válido unicamente paira un computador concreto. A linguaxe de ensamblaje está moi relacionado coa linguaxe máquina, polo que está máis lonxe do programa que a linguaxe de alto nivel. Por tanto, a construción dos programas resulta moito máis sinxela cunha linguaxe de alto nivel que cunha linguaxe de ensamblaje, o que provocará menos erros ou erros utilizando unha linguaxe de alto nivel. Cando o programamos con linguaxe de ensamblaje sabemos como se implementan ordes e datos na linguaxe máquina ou polo menos percibímolo. Pola contra, o uso de linguaxes de alto nivel, polo seu carácter universal, impide utilizar os detalles e vantaxes de cada linguaxe máquina. En consecuencia, o programa de obxectos obtido cunha linguaxe de ensamblaje paira o mesmo problema será máis rápido e terá una deposición de memo menor que a obtida cunha linguaxe superior.
  • Paira o manexo dalgúns compoñentes ou operacións especiais da computadora (principalmente paira realizar chamadas ao sistema ou paira obter ou modificar información sometida ao sistema) é necesario utilizar a linguaxe de ensamblaje. Neste caso é obrigatorio o uso da linguaxe de ensamblaje.
1. Táboa.- Medidas dos programas do exemplo.

Pola mesma razón, os programas escritos en linguaxe superior son máis comprensibles e legibles que os escritos en linguaxe de ensamblaje.

As características dos parágrafos a) e b) están a favor da utilización dos lenzos superiores e as dos parágrafos c) e d) en contra. En definitiva, o uso de linguaxes de alto nivel xera programas máis universais, fáciles, fiables e comprensibles, pero con tempos de execución máis lentos e con maior acollida de memoria.

Algunhas das características mencionadas analizarémolas cun exemplo. No exemplo preséntase un programa que, una vez calculados o primeiros mil números primos, redáctase 1000 con tres linguaxes diferentes: a linguaxe de ensamblaje, o FORTRAN e o PASCAL (ver figura 3). No tres casos seguiuse o mesmo algoritmo e o modo de programación (denominada programación estruturada), implementados no miniconputador denominado VAX 750.

Rastrexando o exemplo, as ordes do programa escritas en linguaxe de ensamblaje non se entenden si non se coñece a linguaxe de ensamblaje da computadora VAX 11. As outras dúas pódense entender si coñécese FORTAN ou PASCAL de calquera computador.

No programa escrito con linguaxe de ensamblaje, aínda que as ordes compréndense una a unha, resulta moi difícil comprender na súa totalidade e realizar algún cambio. Nos outros dous casos, sobre todo no de PASCAL, a inteligibilidad do programa é moito maior.

Co fin de dar una idea máis clara das características expostas no parágrafo c) anterior, os exemplos traduciron e executado os 3 programas obtendo os resultados que se mostran na táboa 1.

Analizando a Táboa 1 obsérvase que utilizando linguaxes de alto nivel créanse programas de maior acollida e de menor lentitude. Por iso, neste caso, a parte de memo que ocupan as ordes dos programas escritos en linguaxe de alto nivel é (aproximadamente) un 50% maior que a parte correspondente ao programa de linguaxe de ensamblaje, chegando ao 100% paira os datos. De face ao tempo de execución, o programa de linguaxe de ensamblaje é un 50% máis rápido que o de FORTRAN e un 100% máis rápido que o de PASCAL. Estas medidas son bastante xeneralizadas, aínda que no caso da adopción do memori deste exemplo hai demasiadas diferenzas.

En xeral, pódese afirmar que os programas realizados en linguaxe de alto nivel son un 50% máis lentos e altos que os realizados en linguaxe de ensamblaje.

Tras ver e analizar as características anteriores, chegou o momento de responder á pregunta principal. Cando utilizar unha linguaxe de ensamblaje e cando un alto nivel?

A resposta é agora evidente. Na maioría dos casos utilizaranse linguaxes de alto nivel e linguaxe de ensamblaje unicamente nos dous seguintes casos.

    Paira a realización dun programa ou subprograma que manipule determinados compoñentes e/ou operacións especiais da computadora, nese caso é imprescindible o uso da linguaxe de excitación (ver parágrafo d)). O tempo ou momento de execución sexa crítico. Por exemplo, cando un programa construído cunha linguaxe de alto nivel non entra na memoria, si faise cunha linguaxe de mangas pódese introducir. En aplicacións en tempo real o tempo de execución é crítico, polo que merece a pena realizar o programa completo ou as subrutinas máis utilizadas con linguaxe de ensamblaje.
2. Táboa. Linguaxes de programación máis importantes.

Con todo, cando utilizamos unha linguaxe de alto nivel, que linguaxe escoller? Non é obxecto deste artigo responder a esta pregunta, pero paira a toma de decisión teranse en conta o seguintes tres características:

ver táboa 2
    Tipo de aplicación. Non é o mesmo programar a política de xestión que a aplicación científica. Mentres que nos primeiros manéxanse cantidades moi elevadas de datos mediante cálculos simples, nos demais o máis importante e complexo é o cálculo. Por iso, existen linguaxes dirixidas ao cálculo científico (FORTRAN, APL...) dirixidos á xestión (COBOL, RPG,...) aínda que outros se utilizan en dous ámbitos (PL/1, BASIC, PASCAL). Eficiencia. Algunhas linguaxes, cando se deseñaron, centráronse neste concepto. Nestes casos a maior importancia é a velocidade de execución, a potencia, a eficacia... Por iso, os compiladores resultan bastante grandes e non poden implementarse en computadoras pequenas. A este tipo pertencen as linguaxes COBOL, FORTRAN e PL/1. Actualmente, comercialmente este tipo de linguaxes son os máis utilizados.
  1. Metodoloxía. Nos últimos anos está a darse cada vez máis importancia á metodoloxía na elaboración de software. En lugar de centrarse na eficacia, algunhas linguaxes están dirixidos á construción de programas de boa metodoloxía, é dicir, a través destas linguaxes pódense elaborar programas máis fiables, estruturados, máis simples, máis variables. Con estas linguaxes conséguese un software máis barato, xa que está demostrado que máis da metade do custo dun programa baséase en probas e ensaios. Unha linguaxe deste tipo é PASCAL, actualmente o máis adecuado paira aprender, xa que afai ao alumno na metodoloxía de programación. A linguaxe BASIC, pola súa banda, non axuda en absoluto a realizar programas estruturados e os que aprenden como primeira linguaxe adquiren moitos malos costumes.

Na táboa 1 pódese comparar a velocidade correspondente a un programa de PASCAL e a correspondente a un programa de FORTRAN. O de PASCAL é un 25% máis lento, pero como se pode observar na Figura 3, o programa de PASCAL lese mellor que o de FORTRAN. Ademais, o compilador PASCAL realiza moitas máis comprobacións, polo que os erros atópanse antes reducindo o tempo de proba.

As linguaxes aquí mencionadas son convencionais, é dicir, imperativos; non se mencionaron as linguaxes funcionais (LISP e similares) e explicativos (PROLOG) que actualmente teñen un gran desenvolvemento.

Tampouco se mencionaron as linguaxes desenvolvidas paira aplicacións concretas (estadistica GPSS, simulación SIMULA, etc.)

Conclusións

Figura : PROGRAMA EXEMPLO.

Os criterios a ter en conta á hora de seleccionar a linguaxe de programación son:

    Si o problema ten que ver coa arquitectura da computadora e co Sistema, a maioría das veces é obrigatorio o uso da linguaxe de ensamblaje. Si a toma de memo ou o tempo de execución é crítico, o ideal é utilizar a linguaxe de ensamblaje. Fóra dos dous casos anteriores, utilizarase unha linguaxe de alto nivel e tendo en conta o tipo de aplicación, haberá que decidir que concepto dámoslle máis importancia: eficiencia ou metodoloxía. O ideal sería elixir unha linguaxe eficaz que impulse a boa metodoloxía, pero iso non existe na actualidade. Con todo, as últimas versións de FORTRAN impulsan a metodoloxía e conseguen programas estruturados sen perder efectividade. Si una vez seleccionado a linguaxe existise compilador e interpretación paira traducir os programas, nas probas utilizaríase este último e, una vez comprobado a súa idoneidade, utilizarase o programa obxecto paira a explotación.