AS: TIQUON

Alors les petits, vous avez passé de bonnes vacances, cet été, au soleil ? Pour nous, c’était le pied. Mis à part le fait que Lipfy n’a pas bronzé, que le pauvre Pierre est en train de contaminer la rédaction avec une maladie hautement contagieuse, et que Robby s’est fait voler sa voiture. A part cela, tout se passe le mieux du monde. Allez, retrouvons donc notre bon vieux Z80 après l’avoir délaissé pendant nos batifolages estivaux.

 

Comme je vous le disais, mis à part de petits ennuis dus aux retours de vacances, la joie et l’allégresse règnent dans nos locaux. A la vue de la superbe crinière (et du reste ) de notre Miss X nationale, bon nombre de rédacteurs sont tombés mollement sur le sol moquette mais non moins dur de nos bureaux.

Ainsi. INC B sera exécuté de la manière suivante : B=B+1. Mais, comme rien ne vient sans rien et que l’assembleur n’est fait que de petits ennuis, un dépassement de capacité de l’opérande entraîne une remise à zéro de celle-ci- Si par exemple C vaut 255. la valeur de C après un INC C sera 0. De la même manière, si D vaut 0 et que l’instruction DEC D est rencontrée, D vaudra 255.

Lipfy. dont tous les lecteurs se demandent à quoi il ressemble exactement, vient de faire l’acquisition d’une conduite : ne plus se taper la tête contre les murs à la vue de Miss X. Pour moi. tout va, sauf que je  suis obligé de partager mon petit bureau avec un être étrange (de cake) : Brice. C’est dur d’être ainsi, minute après minute, confronté avec des génies ( sans bouillir ). Peut-être que si cela continue dans la voie actuelle, je changerai de pseudonyme en devenant Disciplus Simples, pour faire allusion à la fameuse BD Léonard génie.

Zap , lecteur assidu de notre revue, ne cesse de nous appeler au téléphone pour nous parler de choses et d’autres. Surtout d’autres à vrai dire. Mais je jure devant Miss X que tout cela ne m’empêchera pas de vous faire encore un petit cours assembleur maison.

Comme dans le dernier numéro nous avions vu les instructions de chargement nous nous sommes dit qu’il serait bienvenu de faire un petit programme illustrant toutes ces connaissances. C’est pour cela que nous allons encore aborder quelques petites mnémoniques, avant de nous lancer dans la programmation en assembleur.

C’EST QUOI INC ET DEC DIS DONC DOC ?
Eh bien, voilà enfin une bonne question. Ce ne sont que quelques petites instructions permettant d’additionner ou de soustraire la valeur un à l’opérande désirée et précisée.

Certains pourront penser que cela fausse les calculs. Eh bien pas du tout, car la retenue est positionnée en cas de dépassement de capacité. Donc, si un débordement intervient, que ce soit lors d’un INC ou d’un DEC. la retenue sera là pour témoigner de l’infâme affront qu’aura provoqué le pauvre Z80. DEC sert donc à soustraire un et INC à additionner un à la valeur représentée par l’opérande. Cette opérande peut être tout registre de huit ou seize bits, et des octets en mémoire adressés par le registre HL ou les registres d’index. Mais voici quelques exemples.

INC        (HL)
DEC        (IX+0)
INC        HL
DEC        B

COMPARONS EN CŒUR
Pas de chance, mais nous ne pourrons toujours pas écrire notre petit programme si nous n’avons pas abordé cette instruction plus qu’indispensable. CP permet de faire des comparaisons, mais uniquement avec l’accumulateur (le registre A). Vous pouvez comparer n’importe quoi, mais seulement avec le bon vieux maître des lieux. Le mode d’adressage est le même qu’à l’habitude, c’est-à-dire qu’il est possible de comparer A avec tous les registres huit bits, et également avec de la mémoire adressée par HL et les registres d’index.

Une comparaison est comme son nom l’indique, un moyen d’obtenir des informations sur les différences existant entre les deux valeurs prises en compte. Que peut-il se passer ? Soit une valeur est plus grande que l’autre, soit c’est l’inverse, soit encore les valeurs sont égales. Ceci paraît simple, à première vue, mais les choses peuvent se corser si vous travaillez en mode signé. Nous avions vu qu’il est possible d’utiliser le Z80 de deux manières différentes. La première est de voir les valeurs des registres comme de simples entiers de 0 à 255. la seconde est de dire que le bit 7 contient le signe de la valeur codée sur les sept autres bits (de zéro à six).

Pour le premier mode d’utilisation, aucun problème. Il faut simplement savoir que l’opération CP effectue une soustraction entre l’accumulateur et l’opérande, soit, en clair, A-op.

PAGE 1

Mais cette opération n’affecte aucun registre et ne fait que déposer les résultats dans le registre d’état F : donc, ni A ni l’opérande utilisée ne sont modifiés. Cette instruction force de toute manière le drapeau N, ce qui signifie que la dernière opération réalisée était bien une soustraction. Si le drapeau Z d’égalité passe à un. cela signifie que les deux valeurs testées sont les mêmes. Si l’indicateur de retenue C est positionné ( à 1 ), cela veut dire qu’un débordement a été enregistré et que la valeur soustraite de A est plus grande que le contenu de A.

Dans le cas contraire, si C reste à l’état passif, le contenu de l’accumulateur est alors supérieur ou égal à l’opérande comparée. Dans le cas où le mode signé est utilisé, les choses peuvent se compliquer relativement. En fait, je ne conseillerai jamais assez de faire des essais simples avec des valeurs immédiates et connues. Mais passons à l’explication avant tout. Si les deux valeurs sont supérieures à 0 et inférieures à 127, tout se passe comme dans le cas précédent. Mais vous comprenez bien que. si vous considérez le bit 7 comme le bit de signe, cela pose des problèmes car un nombre dont ce bit est à 1 est inférieur a un nombre dont ce bit est à 0.

Ce qui montre bien la différence de traitement entre ce mode de travail et le précédent Eh bien, ne vous inquiétez pas ,  c’est beaucoup plus simple qu’il n’y paraît suffit de tester le bit S , qui donne le signe du résultai, en mode signé. Quand le drapeau S passe à un, cela signifie que l’accumulateur est inférieur à l’opérande comparée.

Quand S est à zéro. l’accumulateur est supérieur à l’opérande rencontrée, quel que soit le signe des deux octets. Il suffît de se rappeler que dans tous les cas. en mode signé. S ne signifie pas supérieur. Pour les branchements, il n’y a malheureusement pas de sauts conditionnels relatifs influences par S, et les seules instructions utilisables sont alors JP M (S=1) et JP P (S=0), qui ne font pas partie du jeu relogeable. Tant pis. il faut faire avec. Maintenant que nous savons cela, nous pouvons faire notre petite routine bête mais pas si méchante que cela.

REMPLISSAGE BIDON
Nous allons faire un petit programme de remplissage de l’écran qui pourra tout aussi bien servir de CLS. ceci avec ou sans barreau. Cette routine sert simplement à illustrer les quelques instructions que nous avons passées en revue ce mois-ci. Voici d’abord un petit idéogramme du programme pour que tout soit clair. D’abord, il faut savoir que la mémoire écran s’étend de l’adresse &C000 à &FFFF. Pour que ce que nous venons de dire soit juste, il faut que nous utilisions dans notre routine les instructions INC et CP. au moins. Voici la petite explication du listing suivant.

D’abord on charge l’adresse de l’écran dans HL, et on met A à zéro. Pourquoi diront certains ? C’est simple. Nous savons que l’écran finit en #FFFF : il suffit donc d’arrêter de remplir avant le dernier octet lui sera zéro pour que la routine s’arrête, et : surveiller te débordement sur zéro. Cela car l’incrémentation d’un double registre n’influence aucun drapeau indicateur et qu’il faut tout de même que le programme soit stoppé. Nous mettons ensuite dans .le registre B la valeur de remplissage, et la registre B la valeur de remplissage, la la boucle peut alors commencer.

Dans cette boucle, le contenu de B est rangé à l’adresse pointée par HL qui est ensuite incrémenté pour passer à la case suivante. L’instruction de comparaison sert à tester si H vaut A donc zéro, pour témoigner du débordement. Si non. la boucle reprend son cours, si oui. le programme s’arrête en revenant au Basic.

;
;  
              ORG   #9000 
              EXEC $
;
              LD    HL,#C000
              XOR   A
              LD    B, A
BOUC     LD    (HL),B
              INC   HL
              CP    H 
              JR    NZ,BOUC
              RET
;
;
;

 

10 FOR I=&9000 TO &900A
20 READ A$:POKE I,VAL(« & »+A$).NEXT
30 DATA 21,00,C0,AF,47,70,23,BC,20,FB,09

 

SEE YOU NEXT MONTH
Nous vous souhaitons donc de bien travailler sur votre CPC. pendant que nous vous concoctons quelques petites routines d’enfer. De plus, si vous êtes un tantinet curieux, vous pouvez aller faire un tour sur Amcharge, où nous aurons plaisir à vous voir.

 

 

Sibar le nénède

Page 2