CODINGCLASSEURS WEKA ★ Comment exploiterr toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

4/2.5.1 Initiation au langage machine - I. Assembleur ou langage machine ?Coding Classeurs Weka

4/2 - Assembleur Z80 : Définitions et rappels de base

4/2.5 - Cours de programmation

4/2.5.1 Initiation au langage machine

 

I. Assembleur ou langage machine ?

La confusion est fréquente entre « assembleur » et « langage machine ». Il faut dire que la différence est assez subtile, mais importante.

L'Amstrad est bâti autour d'un composant électronique très évolué, le « microprocesseur » Z 80. Il s'agit d'un véritable petit ordinateur à lui tout seul, mais assez rudimentaire : il ne possède que très peu de mémoire (l'équivalent de quelques caractères) et ne peut être programmé que dans un langage très « rustique », le langage machine.

Pour obtenir un Amstrad, on complète le Z 80 par des périphériques et de la mémoire : une mémoire vive ou RAM permettant d'emmagasiner programmes et données, mais aussi une mémoire morte ou ROM contenant un énorme programme en langage machine.

Celui-ci commence à s'exécuter dès la mise sous tension de la machine, et en gère complètement le fonctionnement : c'est lui qui vient lire le clavier, qui forme des images sur l'écran, et qui veille à la bonne organisation du contenu de la mémoire. C'est lui aussi qui « interprète » les ordres Basic que vous frappez au clavier ou que vous chargez à partir d'une cassette ou d'une disquette : chaque commande ou instruction est « traduite » en langage machine puisque ce n'est que sous cette forme que le Z 80 peut l'exécuter.

Le langage Basic équipant votre Amstrad est donc une combinaison particulière d'instructions en langage machine, dont les possibilités sont larges, mais tout de même limitées : certaines tâches sont laborieuses ou même impossibles en Basic.

D'autres langages « évolués » (Logo, Forth, etc.) représentent d'autres combinaisons d'instructions Z 80, qui présentent certains avantages et certains inconvénients par rapport au Basic. La grande force de ces langages évolués dont le Basic est le plus répandu est leur facilité d'apprentissage : les instructions sont formulées pratiquement « en clair », à l'aide de mots anglais très simples et de règles peu contraignantes. Les erreurs commises sont signalées au programmeur qui peut les corriger commodément.

Les choses sont très différentes en langage machine : l'équivalent du programme Basic d'une ligne 10 GOTO 10 s'écrira :

195 64 156 ou C3 40 9C

C'est déjà moins parlant, mais il y a pire : il ne suffit pas de le frapper au clavier puis de faire RUN pour le lancer ! Il faut réfléchir pour déterminer à quel endroit de la mémoire on ira l'implanter, et « appeler » cette « adresse » pour déclencher l'exécution. En cas d'erreur ou de « bouclage », on ne pourra pas reprendre « la main » par un BREAK : l'ordinateur sera bloqué ou « planté » et pour le débloquer, il faudra effacer le programme !

Pas question non plus de faire LIST pour examiner le programme : il faut aller inspecter la mémoire à l'aide d'un logiciel « moniteur » ou avec des PEEK I

La contrepartie de cette lourdeur est que l'on peut réaliser en langage machine des opérations inaccessibles au Basic : seules l'imagination et la compétence du programmeur limitent les possibilités logicielles, pourvu que l'on ne cherche pas à aller plus loin que ne le permet le matériel (le langage machine ne fera pas apparaître de la couleur sur un écran monochrome I) Egalement, à possibilités égales, un programme machine est bien plus rapide que son équivalent Basic : n'oublions pas que l'interpréteur Basic doit traduire chaque instruction en langage machine avant de l'exécuter... Si une boucle FOR-NEXT renouvelle mille fois la même tâche, la séquence de lignes correspondante sera traduite mille fois : c'est neuf cent quatre-vingt-dix-neuf fois de trop, ou même mille fois puisqu'il est possible d'écrire directement cette « routine » en langage machine I Cette économie de temps s'accompagne aussi d'une importante diminution d'encombrement mémoire : bien que plus rapide, un programme machine occupera considérablement moins de place que son équivalent Basic.

Le langage machine se prête donc particulièrement bien à l'écriture de logiciels exceptionnellement performants, mais au prix d'un travail considérable. Une forme de simplification consiste à écrire le langage machine non plus « à la main » comme nous allons apprendre à le faire, mais à l'aide d'un logiciel « assembleur » : il s'agit d'un programme écrit dans un langage a priori quelconque, qui peut « traduire » en langage machine des instructions écrites à l'aide de « mnémoniques », abréviations rappelant un peu les « mots-clés » du Basic. En assembleur, notre petit programme exemple s'écrirait : JP 40000, ce qui est déjà plus parlant si on considère que JP est l'abréviation du mot anglais JUMP qui signifie « sauter » !

Un bon logiciel assembleur est généralement accompagné d'un « désas-sembleur » capable de reconstituer un « listing » de mnémoniques à partir du programme machine terminé (utile par exemple pour étudier le contenu de la ROM de l'Amstrad, ou tout simplement pour contrôler le travail de l'assembleur).

Un débogueur est également utile, permettant de modifier un programme machine sans le récrire en entier, et de le faire « tourner » pas à pas en évitant les blocages sur erreurs.

Ces puissants outils transforment l'Amstrad en un véritable « système de développement de Z 80 », analogue à ce qu'utilisent les programmeurs professionnels. Pour les rentabiliser, il faut toutefois avoir à écrire des logiciels machine de plusieurs centaines ou milliers d'octets, ce qui suppose une profonde maîtrise de la programmation du Z 80.

Si vous lisez ces lignes, c'est fort probablement parce que vous ne maîtrisez précisément pas cette discipline ! Commençons donc par le commencement : entre, le « tout Basic » et le « tout assembleur » existe un domaine relativement facile à explorer, et qui peut vous apprendre beaucoup. 

Cherchons donc à écrire de courts « sous-programmes » ou « routines » en langage machine, que le Basic pourra « appeler » pour « sous-traiter » des tâches qu'il ne sait pas exécuter, ou qu'il exécute dans de mauvaises conditions.

Si alors les horizons ouverts par la programmation machine vous séduisent, vous souhaiterez probablement cesser d'assembler vos instructions à la main et vous vous offrirez un assembleur-désassembleur-debugger... Mais ne brûlez pas les étapes : c'est en forgeant que l'on devient forgeron, mais c'est aussi en assemblant manuellement de courtes routines que l'on assimile les notions de base sans lesquelles on ne pourra rien tirer de bon d'un assembleur, aussi performant soit-il.

 

★ NOTE: 9e Complément

Page précédente : 4/2.5.1 Initiation au langage machine

CPCrulez[Content Management System] v8.7-desktop/cache
Page créée en 060 millisecondes et consultée 345 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.