CODINGHEBDOGICIEL ★ COURS D'ASSEMBLEUR - HEBDOGICIEL n°86 ★

La page pédagogique d'hebdogiciel : Formation à l'assembleur

Récemment, nous avons brièvement survolé l'exemple d'une structure d'édition de messages. Nous allons maintenant tenter de formuler (d'un point de vue tout à fait général) la démarche à suivre pour aboutir à une routine (portable sur n'importe quel matériel) d'édition de messages ou de caractères. Pour cela vous devez impérativement disposer d'une adresse de la ROM de votre ordinateur : celle du sous-programme qui gère l'édition d'un caractère sur un périphérique. Nous aurons à nous en servir car nos connaissances et notre maîtrise du langage machine ne nous permet pas de concevoir mieux que cette procédure installée par les concepteurs du micro.

Comme je suis partisan de la méthode du clou enfoncé, nous allons suivre scrupuleusement les différentes étapes que je vous avais fortement conseillé lors d'une précédente causerie.

1.  Nous débranchons en rythme notre micro-ordinateur, nous nous saisissons d'une pile de papier et de différents stylos (plusieurs couleurs peuvent aider à la compréhension de schémas).

2.  Nous devons maintenant définir clairement le problème que nous nous posons, et ce en français et non pas en instructions diverses et incompréhensibles.

Nous voulons créer une routine en langage machine qui puisse gérer et éditer des messages, quel que soit le contenu et la longueur de ces messages. Cette routine devra, d'autre part, pouvoir être transférée d'un programme à l'autre sans modification. Enfin, elle devra contenir le minimum d'impératifs du type : zone mémoire à réserver pour le stockage des messages, encombrement mémoire minimum, rapidité d'exécution pas trop ringarde...

3.  Pour résoudre sans anarchie le problème que nous venons de nous poser, nous devons impérativement disséquer les différentes phases de ce travail pour arriver à une structure cohérente. Chacune des parties que nous allons dégager dans le traitement d'un message à éditer devra répondre aux critères suivants : poser un problème à la fois et un seul, être relativement indépendant des autres problèmes et enfin ne pas cacher d'autre problème derrière une banalité de mauvais aloi.

L'édition d'un message est d'une difficulté relativement peu élevée. Malgré tout, nous aurons à différencier deux parties principales dans ce travail :

a.  la recherche du prochain caractère à éditer.

b.   l'édition du caractère proprement dite, à l'aide de la routine interne de votre micro.

Si la seconde partie ne présente aucune difficulté, la première par contre mérite d'être approfondie. En effet, il est hors de question d'admettre comme immédiat la recherche du prochain caractère à éditer. Le simple fait de parler de recherche sous-entend que nous allons avoir d'une part une zone de stockage des caractères et d'autre part un caractère spécial qui nous permettra de juger que nous sommes arrivés en fin de message. Notre premier problème de la recherche du prochain caractère se décompose donc en deux nouvelles parties : saisie du caractère et comparaison avec le caractère de fin de message. Ce que nous pouvons résumer de la sorte :

a. recherche du prochain caractère à éditer : 

a1. saisie du caractère

a2. test sur le caractère : fin de message ou non.


Nous nous retrouvons donc à la tête d'une structure (j'insiste sur ce mot. vous l'auriez peut-être déjà oublié) parfaitement opérationnelle, à un détail majeur près ! Nous n'avons pas encore résolu la méthode que nous utiliserons pour détecter la zone de début de message.
Pour réaliser ce repérage, nous avons deux solutions au choix, l'une meilleure que l'autre bien entendu :

Solution 1 : nous pouvons imposer une zone de la mémoire comme étant le stock de messages à éditer. Nous aurons alors besoin d'un pointeur qui nous indiquera l'endroit où nous en sommes dans cette zone. Deux reproches viennent rapidement à l'esprit : la zone mémoire est obligatoirement bloquée dans sa totalité, monopolisant du même coup un espace mémoire dont nous pourrions avoir besoin par ailleurs et le pointeur devra être sur deux octets si nous pensons éditer des messages de plus de 256 caractères, et comme nous voulons une routine universelle pour notre bécane, il nous faudra donc un pointeur seize bits.

Solution 2 : elle consiste à placer les messages complètement n'Importe où dans la mémoire. Cotte fois nou3 nous servirons obligatoirement d'un pointeur de deux octets (il permet de pointer une zone dans les 64 Ko courants dans les micros familiaux). Nous n'aurons donc que le problème de la gestion du pointeur à régler. Cette solution, si elle n'est pas gourmande en place mémoire (les zones réservées contenant juste les messages et rien d'autre), implique un nouvel impératif : avant d'appeler la routine d'édition de caractères, nous devrons initialiser le pointeur pour lui donner l'adresse de début du message à éditer.

Pour notre routine nous choisirons bien sur la seconde solution, pour le repérage de la zone du message. De ce fait, nous nous retrouvons dans l'obligation de résoudre un nouveau problème : la gestion d'un pointeur de deux octets. En effet, la quasi-totalité des micros familiaux n'offre pas la possibilité de pratiquer des opérations sur seize bits. Nous avons donc découvert un nouveau problème, que nous nous devons de résoudre avant de considérer la partie de recherche algorithmique comme terminée.

Je ne vous bombarderai pas le cerveau d'informations inutiles ou superfétatoires avec la recherche de la méthode optimale pour les opérations sur seize bits. Je vous donnerai une possibilité de résoudre ce problème qui n'est ni la seule, ni forcément la meilleure, mais elle offre l'incomparable avantage de fonctionner dans tous les cas de figure. Je vous confierai l'algorithme de cette méthode dans la suite de ma démonstration.

4. Nous arrivons ici à la phase chronologique de nos recherches. Nous nous devons d'établir un schéma général de la séquence de déroulement des différents points que nous avons dégagés précédemment. Nous allons donc, ni plus ni moins. classifier les différentes étapes que le micro-processeur aura à suivre pour aboutir à l'édition d'un message à l'écran.
Nous allons donc aboutir à un schéma proche de celui que je vous livre :

a.  initialisation du pointeur : mettre dons ce vecteur l'adresse de début de message.

b.   appel de la routine : sans commentaire.

c.  recherche du caractère à éditer : notre initialisation sert pour le premier caractère.

d.  test sur le caractère : si le caractère est celui correspondant à la fin du message alors fin de la routine.

e.  édition du caractère : appel à la routine spécifique do votre micro-ordinateur

f.   incrémentation du pointeur : l'opération se passe sur deux octets.

g.  aller on c : continuer l'édition des caractères jusqu'à Ia rencontre du caractère de fin de message.

HEBDOGICIEL n°86

★ LICENCE: COMMERCIALE
★ ANNÉES: 1985
★ AUTEUR(S): ???

Page précédente : La page pédagogique d'hebdogiciel 085

CPCrulez[Content Management System] v8.75-desktop/c
Page créée en 096 millisecondes et consultée 1395 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.