★ CODING ★ LA CARRYNETTA BELLE TCHI TCHI ★ |
Assembleur ACPC n°40 - Le CARRY |
Vous avez passé de bonnes vacances? Les minettes et les virils poilus étaient à votre goût? Vous voulez sans doute des nouvelles des vacances de Sined ou Poum. Ils ont bossé comme des fous et n'ont vu comme soleil que le témoin du moniteur de leurs machines. Là, Poum, tu exagères. Je dois dire que les vacancières étrangères et estivales étaient assez affriolantes dans leurs dessous inexistants. De plus, Paris, la plus belle ville du monde, est aussi belle sous le soleil que sous la pluie. Quelques chaleurs ne gâchent rien à son charme et ont le mérite d'en ajouter aux femmes. Tu aurais mieux fait de sortir plutôt que de rester cloîtré. Tes yeux et ton âme en auraient été émerveillés. Si nous passions à la suite, histoire de ne pas laisser languir le lecteur de ces pages. Salut à toi, ô vénéré lecteur qui nous fait manger et sans qui notre loyer serait impayé (NDPoum : Sined vient de se dégoter une chambre à Paris, quel miracle !). Ne sait-tu pas ce que nous avons concocté pour toi ce petit mois? Un simple passage en revue du mnémonique AdC que nous avons entraperçu le mois dernier. Egalement un tableau que notre Poum vous a préparé avec amour. A l'attaque ! ADDITION COHERENTE ADC est, comme nous l'avons vu le mois précédent, une addition permettant d'obtenir la somme de deux opérandes et d'ajouter à cette dernière ce contenu de Carry. Ce bit est supposé être le résultat du débordement de capacité engendré par la dernière opération (lisez le paragraphe que Poum lui a consacré plus loin). Vous pouvez donc additionner n'importe quoi à n'importe quoi à condition de suivre tout de même le chemin suivant. La première opérande de l'opération doit obligatoirement être un accumula teur simple ou double soit les registres A ou HL. Les opérandes peuvent être: en huit bits, Z, A, B, C, D, E, H, L, (HL), (IX+Z), (IY+Z) où Z est une valeur huit bits; en seize bits, HL, BC, DE, SP. Voici quelques exemples: ADC A,12 |
« ? » peut-être un registre 8 ou 16 bits, une valeur ou une adresse, bref, n'importe quoi. |
SOUSTRACTION IDEM
Comme l'addition avec retenue, il existe la soustraction. Les modes d'utilisation de cette opération sont les mêmes que ceux de l'addition. Si vous désirez effectuer une soustraction seize bits à partir de registres huit bits, utilisez des séquences du type:
LD A,(HL)
SUB A,1
LD (HL),A
INC HL
LD A,(HL)
SBC A,0
LD (HL),A
JR C,ERREUR
Cette routine décrémente un mot de seize bits contenu à l'adresse pointée par HL. Il est sûrement possible d'écrire du code plus compact et plus efficace mais celui-ci évite toute sauvegarde de registres. En espérant que vous trouverez d'autres applications comme celles du genre trente-deux bits:
LD HL,(COMPT)
LD DE,(COMPT+2)
LD BC,(MODIF)
ADD HL,BC
LD (COMPT),HL
EX DE,HL
LD BC,0
ADD HL,BC
LD (COMPT+2),HL
Voilà qui clôt les additions et soustractions diverses.
Revenons tout de même deux secondes sur cette fameuse Carry qui est en fait un carry, mais au féminin ça sonne mieux.
NDPOUM A CARRY
Si le contenu d'un registre quelconque dépasse d'un côté comme de l'autre la capacité de celui-ci (il n'y a pas de barrière de sécurité), le résultat sera modulo la taille maximale stockable par ce registre plus 1 ! Soyons plus clair. Prenons l'accu. Sa valeur maximale stockable est 255. Si on lui ajoute 1, il devrait théoriquement passer à 256. Or les choses étant impossibles, il fera un modulo 256 et passera à O. En gros, pour lui, la valeur suivant 255 est O. De même 250 plus 20 donnera 14. Cela marche également dans l'autre sens. 0 moins 1 sera égal à 255 ou 10 moins 20 sera égal à 246.
Lorsqu'un registre réagit d'une des deux façons sus citées, nous parlerons de débordement. Il existe un moyen de tester dans certains cas ce débordement: la consultation de la Carry.
ATTENTION: tous les débordements ne sont pas pris en compte par la Carry. Il existe quelques instructions qui mettent la Carry à 1 lors d'un débordement et d'autres pas.
Comment s'y retrouver? Pas facile. Il nous arrive à tous (même Sined) de nous poser la question: telle instruction met la Carry ou pas? Pour cela, reportez-vous au tableau ci-joint. Il vous donnera toutes les instructions de notre cher zao et vous pourrez ainsi tout savoir sur leurs réactions durant le déroulement d'un programme.
Prenons une instruction comme CALL connue de tous car utilisée même sous Basic.
CALL C,
ADRESSE
Cela veut dire appelle la routine ADRESSE si la carry est mise. Donc s'il y a eu un débordement avant cette instruction. Prenons un autre exemple. B=250. On lui additionne la valeur A qui est prise elle-même dans une case mémoire.
LD B,250
LD A,(MÉMOIRE) ADC A,B
CALL C,ADRESSE
Si la valeur pokée dans MÉMOIRE est supérieure à 5 le CALL sera lancé, sinon le programme continuera comme si de rien n'était. OK ? Ne vous en faites pas, nous reviendrons sur ce type d'appel, mais il fallait tout de même vous en toucher deux mots. Voici donc un tableau récapitulatif des différentes influences des mnémoniques sur les drapeaux (flags). Tout cela, les flags et les mnémoniques vous seront détaillées dans les numéros des mois suivants.
CARRY FAUT EN FINIR
Car il faut en finir. En espérant que tout cela ne vous sera pas trop incompréhensible. Nous vous souhaitons de bonnes heures de programmation.
Page précédente : Bidouilles ACPC n°39 - Gestion directe du FDC 765 |
|