Langage d'assemblage et langages de haut niveau : quand et pourquoi

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

Les ordinateurs de première génération étaient programmés en langage machine. Les secondes avec langage d'assemblage. Les troisième et quatrième sont programmés en langage de haut niveau. Ceux de la génération quintana seront programmés avec un langage proche du langage naturel.

Les ordinateurs de première génération étaient programmés en langage machine. Les secondes avec langage d'assemblage. Les troisième et quatrième sont programmés en langage de haut niveau. Ceux de la génération quintana seront programmés avec un langage proche du langage naturel.

Donc, pour programmer un ordinateur actuel, il est nécessaire de maîtriser un langage de haut niveau (BASIC, FORTRAN, COBOL, PASCAL...) et en utilisant ce langage comme outil, nous rédigerons des programmes qui résoudront nos problèmes. Dans tous les cas, sur un ordinateur spécifique, et plus encore sur un micro, nous ne pouvons pas utiliser n'importe quel langage, mais un de ceux que notre ordinateur a mis en œuvre dans son système d'exploitation.

L'utilisation de langages de haut niveau n'exclut pas le langage machine et surtout le langage d'assemblage (assembler). Ces options, au moins l'assemblage, sont parfois très adaptées.

Le but de cet article est d’expliquer quand et pourquoi le langage d’assemblage (ASSEMBLER) et les langages supérieurs doivent être utilisés.

Introduction

Les commandes exécutées ou exécutées directement par un ordinateur sont celles écrites en langage machine. Les commandes en langage machine sont connues et exécutées par l'unité de contrôle du processeur. Ces commandes adhèrent à l'ordinateur et sont relativement simples, dont chacune représente une seule opération arithmétique ou logique normale. Le langage machine est exprimé en codes binaires par 0 et 1.

Programmer en binaire est très lourd, laissant de côté les autres tracas. C'est pourquoi des langages symboliques ont été créés, d'abord des langages d'assemblage puis supérieurs.

Les programmes écrits en langage symbolique ne peuvent pas être exécutés directement. Les programmes écrits en langage machine ne peuvent être exécutés directement. Le but des traducteurs est de surmonter cette objection.

Un programme traducteur prend comme donnée le programme écrit en langage symbolique et à la suite de son exécution crée un programme équivalent écrit en langage machine. Par conséquent, le programme que nous effectuons lorsque nous le programmons en langage symbolique ne peut pas être exécuté directement, car avant de l'exécuter il faut effectuer un processus de traduction.

Figure : Schéma fonctionnel du COMPILATEUR.

C'est pourquoi nous avons dit que sur un ordinateur on ne peut pas programmer dans n'importe quelle langue, parce que pour programmer dans un langage il faut son réveil. Les programmes traducteurs sont écrits en langage machine et font partie du système d'exploitation, c'est-à-dire que les utilisateurs ne doivent pas les programmer et constituent l'une des principales parties du logiciel auxiliaire incorporant l'ordinateur.

Types de traducteurs

Le programme qui traduit automatiquement du langage de programmation à un autre langage que la machine comprend directement, le langage machine, s'appelle traducteur. Dans les traducteurs, on distingue différents types; d'autre part, les assembleurs, pour traduire des programmes de langage assembleur, et d'autre part, les compilateurs et les interprètes pour traduire des langages supérieurs.

Lorsque les compilateurs traduisent un programme, ils obtiennent un programme équivalent en langage machine (appelé programme objet), et sont prêts à exécuter ce programme objet (voir figure 1).

Au contraire, les interprètes ne traduisent pas entièrement le programme source, mais le lisent de manière ordonnée, le traduisent et l'exécutent. Ils ne correspondent donc pas à la deuxième phase indépendante (traduction et exécution), car les deux sont unifiées (voir figure 2).

Pour traduire un langage de haut niveau, vous pouvez utiliser un compilateur ou un interprète. Pour les cas de BASIC, PASCAL et d'autres sont généralement offerts les deux, compilateur et interprète. Quand le traducteur est très complexe et long, une mise en œuvre interprétative n'est pas commode. Et c'est que pour réaliser le programme, l'interprète doit être tout le temps à la momorité, prenant pour lui une partie trop grande. La plupart des langages complexes utilisent donc des compilateurs. C'est pourquoi il n'y a pas d'interprètes pour COBOL ou FORTRAN, au moins sur les ordinateurs normaux.

Quand il y a deux options pour revenir, lequel choisir?, Interprétation ou compilation ?

Avant de répondre à cette question, il faut analyser les deux principales différences que génère son utilisation:

    Lorsqu'un compilateur est utilisé, si un programme est correct, son programme objet peut être enregistré et ne doit pas être retourné dans les exécutions ultérieures de ce programme. Au contraire, le programme doit être traduit dans toutes les exécutions en utilisant un interprète.
  1. Lorsqu'un nouveau programme est développé par le compilateur, le programme complet sera d'abord retourné pour le tester, puis les étapes avant la correction des erreurs obtenues seront exécutées et répétées. Si elle est effectuée par l'interpréteur, le programme peut changer à mesure que le programme est exécuté et testé en même temps, sans perdre de temps à traduire l'ensemble du programme.
Figure : Schéma fonctionnel de l'INTERPRÈTE.

Donc, pour répondre à la question précédente, il faut différencier deux cas: Pour développer un nouveau programme, l'idéal est d'utiliser un interprète, car les tests générés par les corrections peuvent être effectués immédiatement. Lorsque le programme est testé et fonctionne correctement, il est préférable d'obtenir par le compilateur un programme d'objets équivalent et d'utiliser le programme d'objets dans toutes les exécutions ultérieures, de sorte que le temps d'exécution a été inférieur, car il n'est pas nécessaire de traduire.

Par conséquent, quand il ya deux options pour un langage donné, le meilleur dans la phase de développement est d'utiliser l'interprète, mais une fois vérifié que le programme est correct. Le compilateur permet d'obtenir un programme d'objets à utiliser dans la phase d'exploitation.

Cependant, il n'est souvent pas disponible car le système d'exploitation n'en offre qu'un. Dans la plupart des micro, seuls les interprètes sont offerts pour le langage BASIC. Les programmes qui traduisent le langage d'assemblage sont appelés machihembradores (ASSEMBLY), même s'ils sont similaires aux compilateurs. Les assembleurs, étant le langage d'origine correspondant au langage d'assemblage, présentent une caractéristique particulière: leur traduction est très rapide en obtenant un seul ordre de machine de chaque source. Le processus de traduction est donc beaucoup plus simple que celui des compilateurs.

Caractéristiques du langage

En dehors des différences intrinsèques impliquant l'utilisation d'un ou d'un autre type de traducteurs dans un certain langage, chaque langage de programmation a ses propres caractéristiques qui limitent son utilisation.

Tout d'abord, les langages de programmation pourraient être classés en deux types : le langage de haut niveau et les langages d'assemblage comparent ensuite les caractéristiques des deux types :

    Tant que le langage d'assemblage est lié à la machine, les langages supérieurs sont universels, c'est-à-dire qu'un programme écrit avec un langage de haut niveau peut être utilisé sur différents ordinateurs sans changement ou avec peu de changements. Un programme écrit en langage d'assemblage est valable uniquement pour un ordinateur spécifique. Le langage d'assemblage est très lié au langage machine, il est donc plus éloigné du programme que le langage de haut niveau. Par conséquent, la construction des programmes est beaucoup plus facile avec un langage de haut niveau qu'avec un langage d'assemblage, ce qui provoquera moins d'erreurs ou d'erreurs en utilisant un langage de haut niveau. Lorsque nous programmons le langage d'assemblage, nous savons comment les commandes et les données sont implémentées dans le langage machine ou au moins nous le percevons. Au contraire, l'utilisation de langages de haut niveau, par leur caractère universel, empêche d'utiliser les détails et les avantages de chaque langage machine. Par conséquent, le programme objet obtenu avec un langage d'assemblage pour le même problème sera plus rapide et aura un dépôt de mémo inférieur à celui obtenu avec un langage supérieur.
  • Pour gérer certains composants ou opérations informatiques spéciales (principalement pour passer des appels système ou pour obtenir ou modifier des informations soumises au système), il est nécessaire d'utiliser le langage d'assemblage. Dans ce cas, l'utilisation du langage d'assemblage est obligatoire.
1. Tableau.- Mesures des programmes de l'exemple.

Pour la même raison, les programmes écrits en langage supérieur sont plus compréhensibles et lisibles que les écrits en langage d'assemblage.

Les caractéristiques des paragraphes a) et b) sont favorables à l'utilisation des toiles supérieures et celles des paragraphes c) et d) contre. En définitive, l'utilisation de langages de haut niveau génère des programmes plus universels, faciles, fiables et compréhensibles, mais avec des temps d'exécution plus lents et un plus grand accueil de mémoire.

Certaines des caractéristiques mentionnées ci-dessus seront analysées par un exemple. L'exemple présente un programme qui, une fois calculé les premiers mille nombres premiers, est rédigé 1000 avec trois langages différents : le langage d'assemblage, le FORTRAN et le PASCAL (voir figure 3). Dans les trois cas, le même algorithme et le mode de programmation (appelé programmation structurée) ont été suivis, mis en œuvre dans le miniputateur appelé VAX 750.

En suivant l'exemple, les commandes du programme écrites en langage d'assemblage ne sont pas comprises si le langage d'assemblage de l'ordinateur VAX 11 n'est pas connu. Les deux autres peuvent être comprises si FORTAN ou PASCAL est connu de n'importe quel ordinateur.

Dans le programme écrit avec un langage d'assemblage, bien que les commandes soient comprises une par une, il est très difficile de comprendre dans son intégralité et de faire quelque changement. Dans les deux autres cas, surtout dans celui de PASCAL, l'intelligibilité du programme est beaucoup plus grande.

Afin de donner une idée plus claire des caractéristiques exposées au paragraphe c) ci-dessus, les exemples ont traduit et exécuté les 3 programmes en obtenant les résultats affichés dans le tableau 1.

En analysant le Tableau 1, on constate qu'en utilisant des langages de haut niveau, on crée des programmes de plus grande réception et de moindre lenteur. Ainsi, dans ce cas, la partie mémo occupant les ordres des programmes écrits en langage de haut niveau est (environ) 50% plus grande que la partie correspondante au programme de langage d'assemblage, atteignant 100% pour les données. En ce qui concerne le temps d'exécution, le programme de langage d'assemblage est 50% plus rapide que celui de FORTRAN et 100% plus rapide que celui de PASCAL. Ces mesures sont assez généralisées, bien que dans le cas de l'adoption du memori de cet exemple il y ait trop de différences.

En général, on peut affirmer que les programmes réalisés en langage de haut niveau sont 50% plus lents et plus élevés que ceux réalisés en langage d'assemblage.

Après avoir vu et analysé les caractéristiques ci-dessus, il est temps de répondre à la question principale. Quand utiliser un langage d'assemblage et quand un niveau élevé ?

La réponse est maintenant évidente. Dans la plupart des cas, les langages de haut niveau et le langage d'assemblage ne seront utilisés que dans les deux cas suivants.

    Pour la réalisation d'un programme ou sous-programme qui manipule certains composants et/ou opérations spéciales de l'ordinateur, auquel cas il est indispensable d'utiliser le langage d'excitation (voir paragraphe d)). Le temps ou le moment d'exécution est critique. Par exemple, quand un programme construit avec un langage de haut niveau n'entre pas dans la mémoire, si elle est faite avec un langage à manches, vous pouvez entrer. Dans les applications en temps réel, le temps d'exécution est critique, il vaut donc la peine de réaliser le programme complet ou les sous-routines les plus utilisées avec le langage d'assemblage.
2. Tableau. Langages de programmation les plus importants.

Cependant, lorsque nous utilisons un langage de haut niveau, quel langage choisir ? Ce n'est pas l'objet de cet article de répondre à cette question, mais pour la prise de décision, les trois caractéristiques suivantes seront prises en compte:

voir tableau 2
    Type d'application. Ce n'est pas la même chose de programmer la politique de gestion que l'application scientifique. Alors que dans les premiers, des quantités très élevées de données sont traitées par des calculs simples, dans les autres, le calcul est le plus important et complexe. Par conséquent, il existe des langages destinés au calcul scientifique (FORTRAN, APL...) destinés à la gestion (COBOL, RPG,...) bien que d'autres soient utilisés dans deux domaines (PL/1, BASIC, PASCAL). Efficacité. Certains langages, lorsqu'ils ont été conçus, se sont concentrés sur ce concept. Dans ces cas, la plus grande importance est la vitesse d'exécution, la puissance, l'efficacité... Les compilateurs sont donc assez gros et ne peuvent pas être déployés sur de petits ordinateurs. Les langages COBOL, FORTRAN et PL/1 appartiennent à ce type. Actuellement, ce type de langages sont commercialement les plus utilisés.
  1. Méthodologie. Ces dernières années, la méthodologie dans le développement de logiciels est de plus en plus importante. Au lieu de se concentrer sur l'efficacité, certains langages sont destinés à la construction de programmes de bonne méthodologie, c'est-à-dire à travers ces langages on peut élaborer des programmes plus fiables, structurés, plus simples, plus variables. Avec ces langages, vous obtenez un logiciel moins cher, car il est prouvé que plus de la moitié du coût d'un programme est basé sur des tests et des essais. Un tel langage est PASCAL, actuellement le plus approprié pour apprendre, car il habitue l'élève à la méthodologie de programmation. Le langage BASIC, pour sa part, n'aide pas du tout à réaliser des programmes structurés et ceux qui apprennent comme premier langage acquièrent beaucoup de mauvaises habitudes.

Le tableau 1 permet de comparer la vitesse d'un programme PASCAL et celle d'un programme FORTRAN. Le PASCAL est 25% plus lent, mais comme on peut le voir dans la figure 3, le programme PASCAL est mieux lu que celui de FORTRAN. En outre, le compilateur PASCAL effectue beaucoup plus de vérifications, de sorte que les erreurs sont trouvées avant de réduire le temps d'essai.

Les langages mentionnés ici sont conventionnels, c'est-à-dire impératifs; les langages fonctionnels (LISP et similaires) et explicatifs (PROLOG) qui ont actuellement un grand développement n'ont pas été mentionnés.

Les langages développés pour des applications spécifiques (statistiques GPSS, simulation SIMULA, etc.) ne sont pas non plus mentionnés.

Conclusions

Figure : EXEMPLE PROGRAMME.

Les critères à prendre en compte lors de la sélection du langage de programmation sont:

    Si le problème concerne l'architecture de l'ordinateur et le système, l'utilisation du langage d'assemblage est souvent obligatoire. Si la prise de mémo ou le temps d'exécution est critique, l'idéal est d'utiliser le langage d'assemblage. À l'exception des deux cas précédents, un langage de haut niveau sera utilisé et compte tenu du type d'application, il faudra décider quel concept nous accordons le plus d'importance : efficacité ou méthodologie. L'idéal serait de choisir un langage efficace qui favorise la bonne méthodologie, mais cela n'existe pas aujourd'hui. Cependant, les dernières versions de FORTRAN stimulent la méthodologie et obtiennent des programmes structurés sans perdre d'efficacité. Si une fois le langage sélectionné, il y a compilateur et interprétation pour traduire les programmes, ce dernier sera utilisé dans les tests et, une fois vérifié leur adéquation, le programme objet sera utilisé pour l'exploitation.