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

La page pédagogique d'hebdogiciel 087: Formation à l'assembleurCoding Hebdogiciel

FORMATION A L'ASSEMBLEUR PRATIQUE LANGAGE MACHINE SUR AMSTRAD

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

Vous vous êtes sans doute, à la lecture du précédent numéro. rendu compte du fait que la linéarité existe (d'un point de vue algorithmique) même si la linéarité chronologique n'existe pas pour réaliser cette routine d'édition des caractères d'un message, nous sommes obligés d'intégrer une boude. C'est pour cette raison que l'étape 5 de la recherche est obligatoire car elle rend mieux compte de la présence de la boude.

5. Réalisation de l'ordinogramme (ou organigramme) de la routine. Il s'agit tout simplement de transcnre sous forme graphique la séquence que nous venons de coucher par écrit â l'étape 4.

Organigramme

6. A partir de maintenant, je ne peux plus que vous donner des conseils généraux, car vous devez passer a la programmation sur le papier de ce que vous venez d'écrire jusqu'à présent. Malgré tout, je dois encore vous donner une chose pour que vous puissez programmer en toute sérénité : il vous manque l'algorithme de gestion d'un pointeur seize bits, le voici !

Algorithme de gestion d'un pointeur seize hits

Comme dan3 notre cas nous n'avons besoin d'effectuer que des additions (incrémentation du pointeur) nous ne verrons que la version simplifiée de cet algorithme qui revient en fait ;i réaliser une incrémentation sur deux octets.   La   numérotation   des lignes  est   purement   indicative , en pratique, vous devrez suivre  celle que vous impose votre programme d'assemblage, ou votre moniteur assembleur.

100 Initialisation   du   pointeur (octet de poids faible et de poids fort).

110 Incrémenter l'octet de poids faible.

120 Si le bit Z est toujours égal à zéro, alors aller en 140.

130 Incrémenter l'octet de poids fort.

140 Fin du traitement pour une incrémentation du pointeur.

Les étapes 7. 8. 9 et 10 restent entièrement à votre charge, je ne peux développer pour chaque machine la programmation • réelle en assembleur. Un dernier conseil concernant cet exemple : choisissez comme code de test de fin de chaîne de caractères un code ne servant pas pour les caractères standards (00 par exemple !).

Voilà donc une démonstration de la démarche à tenir pour réaliser une routine en assembleur ou en langage machine. Pour les premières tentatives que vous ferez de vous-même, il sera bon que vous vous conformiez a mes conseils. Par la suite vous pourrez sauter certaines étapes, dans la mesure où votre habitude de programmation deviendra plus importante. En fin de compte vous devriez pouvoir écrire l'organigramme de votre routine directement après avoir analysé votre problème.

Vous me semblez particulièrement éprouvé par l'épreuve que vous venez de subir. Aussi, nous ne repartirons pas immédiatement â l'assaut d'un programme aussi complexe (j'exagère toujours) que celui qui précède. Aussi nous allons nous intéresser à un problème que nous venons partiellement d'évoquer : celui des opérations sur seize bits. En effet, peu des micro-ordinateurs huit bits disposent de routines d'addition et de soustraction sur deux octets. Nous allons donc nous pencher sur ces algorithmes, sachez tout de suite que le principe que nous développerons pourra s'étendre selon vos besoins à des nombres sur plusieurs octets. La seule limitation restant celle de la capacité de votre ordinateur.

Réfléchissons sur la gestion de notre pointeur dans le cadre de la routine d'édition de messages. Nous incrémentions notre compteur (car c'en était un !) à chaque caractère édité. Maintenant nous désirons pouvoir additionner autre chose que 1 à nos deux octets. Je vous épargnerai la description étape par étape, comme nous venons de la faire pour la routine précédente. Si vous vous sentez largué" par la suite de mon discours, rien ne vous empêche (bien au contraire) de reprendre mon exposé de telle façon que vous colliez exactement a la méthode de travail que je vous ai indiquée.

Nous savons que , du fait que nos ordinateurs fonctionnent grâce a un micro-processeur huit bits, ils ne peuvent pas traiter plus d'un octet a la fois. Nous aurons donc â séparer le traitement en deux parties distinctes : addition des deux octets de poids faible puis addition des deux octets de poids fort. De ces  deux  opérations,   un   seul écueil émerge : tout processeur huit bits dispose d'une instruction du type addition de deux octets. Cette instruction peut influencer quatre bits du registre d'états. Parmi ces quatre, un sera essentiel â la bonne réalisation de cette addition sur deux octets : le bit de Carry (qui indique s'il y a retenue lors d'une addition).

Regardons l'exemple d'une addition en décimal :

18 + 23 = (8 + 3) + (10 + 20)

La première parenthèse correspond à l'addition des unités (octets de poids faible) alors que la seconde s'occupe des dizaines (octets de poids fort). Admettons que nous pratiquions l'addition parenthèse par parenthèse (comme va le faire notre ordinateur). Nous allons effectuer les deux opérations séparément :

8 + 3 = 1 + 10

et

10 * 20 - 30

Nous avons comme résultat de la première addition 1. avec une retenue (le bit de Carry serait mis à 1) et comme résultat de la seconde addition 30. En pratique lorsque vous effectuez cette opération de tête, vous reportez automatiquement cette retenue sur les dizaines. Vous obtiendrez donc comme résultat à notre exemple: 41. Le processeur de notre ordinateur ne se comporte pas forcément de la même façon.

En effet, suivant l'origine du processeur, nous pourrons rencontrer deux types d'instruction commandant l'addition de deux octets : soit le microprocesseur ajoute les deux octets sans plus (méthode 1) soit il ajoute les deux octets et au résultat il ajoute le contenu du bit de retenue (méthode 2). De ces deux catégories jailliront deux méthodes de calcul multi-octets. Nous allons voir séparément ces deux techniques, dans la mesure où elles aboutissent â de-; algorithmes différents.

Méthode 1 : nous allons maintenant nous consacrer exclusivement à l'addition sans repoti automatique de la Carry.

Avant de pratiquer les calculs, nous allons devoir fixer une structure de stockage de nos données. Celles-ci sont au nombre de trois : premier opérande, deuxième opérande et résultat. Nous aurons donc besoin de six octets pour stocker ces trois nombres. Comme le bit de carry n'est pas automatiquement ajouté à notre première opération entre octets de poids faible, nous n'avons pas à nous en préoccuper. Par contre après avoir effectué l'addition des octets de poids fort, nous aurons à tester le contenu de la retenue pour corriger notre calcul si le besoin s'en fait sentir.
 

http://cpcrulez.fr - HEBDOGICIEL n°87

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

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