Obligement - L'Amiga au maximum

Vendredi 19 avril 2024 - 13:16  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

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

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des 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,
ALL


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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


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 arrêter 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]