Obligement - L'Amiga au maximum

Lundi 20 novembre 2017 - 01:08  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Dossier : 10 questions sur le langage machine et l'assembleur
(Article écrit par Edgar Pixel et extrait de Tilt - septembre 1987)


Le binaire est-il, comme le prétend Edgar Faure, le mariage de la solitude et de la nullité ? Edgar Pixel, qui sait parler aux machines, présente le dialecte de vos micros.

Comment se présente le langage machine ?

C'est le seul langage que comprennent directement les machines. Il se compose d'une suite d'instructions aux circuits de l'ordinateur exprimées en binaire se présentant sous la forme d'une suite irrégulière de 0 et de 1. C'est une succession d'ordres élémentaires accompagnés des coordonnées de l'endroit où les effectuer : mettre à 0 le contenu de telle zone en mémoire, puis y mettre le contenu de telle autre zone mémoire, puis y ajouter le contenu de telle troisième zone mémoire, etc.

Quel est le rôle du programme d'assemblage et désassemblage ?

Un désassembleur est le programme qui traduit le binaire utilisé par la machine en la suite de codes mnémotechniques qu'on appelle couramment assembleur (alors que ce n'est pas rigoureusement exact puisque l'assembleur est seulement le programme qui assure la traduction entre les versions binaire et mnémotechnique du langage machine) et souvent aussi langage machine (dans l'expression "programmer en langage machine"). Le programme d'assemblage effectue une traduction dans l'autre sens.

Les programmeurs en langage machine ou en assembleur utilisent pourtant des lettres et des mots anglais ?

Pour aider les programmeurs, les instructions sont rentrées non pas sous leur forme binaire mais avec ce code mnémotechnique fait d'abréviations anglaises. Le programme d'assemblage traduit instruction par instruction.

Certes, mais ma machine comprend le BASIC, il y est même résident !

Ça n'a aucun rapport. Le langage BASIC a été installé à demeure en mémoire morte. Il pourrait être seulement sur disquette. On pourrait vendre des micros avec un programme de jeu en mémoire morte, mais si un BASIC peut servir à créer beaucoup de programmes, on se lasserait vite de jouer à un seul jeu ! Et le Mac SE contient en mémoire morte le portrait numérisé de l'équipe de ses concepteurs.

On dit que la programmation en assembleur prend plus de temps que dans un autre langage ?

Oui, car une instruction d'un langage évolué se traduit en un grand nombre d'instructions en langage machine. Ainsi, obtenir un nombre aléatoire est un processus complexe, qui nécessite plusieurs instructions et beaucoup de travail à la machine. Elle est si utile que les concepteurs du BASIC ont voulu l'obtenir à l'aide d'une seule instruction : RND.

On dit qu'un programme rédigé en langage machine tourne plus vite. Oui, parce qu'on économise du travail de la machine en suivant de très près, dès le stade de la programmation, la logique de la machine.

Peut-on apporter la preuve de ces affirmations ?

Prenons le problème de Syracuse. On choisit un nombre entier. S'il est pair, on le divise par 2, s'il est impair, on le multiplie par 3 et on ajoute 1. On applique le même traitement au résultat. La suite des résultats successifs forme une série de chiffres qui retombe à 1 après un temps variable, et après avoir atteint des valeurs plus ou moins hautes. Mais il n'existe pas encore de preuve mathématique qu'en appliquant ce traitement à tous les nombres on finira toujours par revenir à 1. Si l'on veut tester ainsi beaucoup de nombres, les calculs deviennent vite assommants.

En BASIC, le processus s'écrit :

IF N MOD 2=0 THEN N=N/2 ELSE N=3N+1

Élémentaire ? On fait une boucle en prenant le résultat comme N du cycle suivant. On imprime N à chaque cycle. Il faut stopper la boucle dès que N égale 1.

En langage machine, le programme est plus long. Il faut réserver deux registres, A et B. Dans l'exemple, N=27, on met N en binaire dans A : 00011011. B est vide : 00000000. Il faut copier A dans B (sinon la machine oubliera quel est le chiffre de départ), puis on divise par 2, ce qui en binaire revient à décaler A de 1 bit vers la droite : 00001101. Le chiffre d'extrême droite est mis dans un drapeau de retenue. C'est 1 en l'occurrence. Si la retenue est 1, c'est que le chiffre était impair, si la retenue est 0, c'est que le chiffre était pair.

Donc, on teste la retenue : si c'est 0, N était pair et on a dans le registre A N/2. Si c'est 1, il faut multiplier N par 3 et ajouter 1. Le plus rapide est de copier B dans A, de l'ajouter encore et de rajouter une troisième fois, puis de rajouter 1. Résultat, A contient 3N+1. A l'exécution, le programme BASIC exige deux ou trois centaines de cycles contre 18 ou 20 en langage machine. Dix fois plus rapide !

Mais, quand j'affiche à l'écran les programmes de la plupart des progiciels, il apparaît une bouillie de codes et de caractères, je n'y reconnais pas les mots de l'assembleur !

C'est que les langages, y compris le langage d'assemblage, sont programmés avec des caractères alphabétiques. Ils sont faciles à lire. Mais une fois compilés, c'est-à-dire traduits en langage machine, ils se réduisent à des 0 et des 1. Le programme d'assemblage désassemblage retraduit ce binaire en langage lisible. Une tentative de lecture directe interprétera le programme comme s'il était un fichier de texte et affichera donc une salade de tous les caractères acceptés par la machine.

Et quel rôle jouent les routines résidentes en langage machine ?

Elles évitent aux programmeurs de reprogrammer des milliers de fois des opérations dont ils ont besoin pratiquement pour chaque programme. On gagne ainsi du temps de programmation : il suffira d'appeler la routine. Ces routines sont, en principe, programmées de la façon la plus dense possible, et avec un soin maniaque. On gagne du temps à chaque fois qu'elles sont exécutées, ce qui arrive souvent !

Un programme en assembleur de l'IBM PC tournera-t-il sur Amiga ?

Non, il faut des machines strictement identiques, puisqu'un langage machine est spécifique à un processeur et à une structure de la machine. Il ne fonctionne pas à un haut niveau d'abstraction, il est totalement incapable de résoudre le problème 1+2=?, mais il additionne le contenu de l'emplacement mémoire de telles coordonnées qu'on lui fournit avec le contenu de l'emplacement mémoire de telles autres coordonnées dont on lui indique l'adresse, il met le résultat dans un troisième emplacement et le dirige vers l'écran par le chemin qu'on lui aura précisément indiqué.


[Retour en haut] / [Retour aux articles]