★ CODING ★ HEBDOGICIEL ★ COURS D'ASSEMBLEUR - HEBDOGICIEL n°86 ★ |
La page pédagogique d'Hebdogiciel n°86 | Coding Hebdogiciel |
La page pédagogique d'hebdogiciel : Formation à l'assembleurRé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 :
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. a. initialisation du pointeur : mettre dons ce vecteur l'adresse de début de message.
|