PROGRAMMATION EN ASSEMBLEUR Z-80 : LES SAUTS ET LES ETIQUETTESAprès un bref article d'initiation à l'assembleur, nous espérons que vous avez bien assimilé ce cours. Dans le cas contraire, ne vous alarmez surtout pas, Olivier le vénéré rédacteur de ce magazine a dit à mon binôme Manu qu'il n'y avait rien compris lui non plus, mais cela on s'en doutait un peu, vu son Q.I. (NDO : ah oui ? c'est quoi un Q.I. ?). ETIQUETTES Je pense qu'actuellement vous savez qu'en assembleur on ne peut appeler une ligne par un numéro comme en Basic, par exemple : 10 PRINT A; 100 GOTO 10
Mais vous pouvez affecter à une ligne une étiquette de votre choix, par exemple l'étiquette «BOUCLE». Il est bien sûr possible d ' utiliser plusieurs étiquettes dans un programme, mais Il est Impossible d'utiliser le même nom pour deux étiquettes, ou d'utiliser des noms d'instructions. La taille d'une étiquette ne dépasse que très rarement huit caractères selon l'assembleur que vous utilisez. Passons donc aux choses sérieuses. Essayez d'écrire un programme qui utilisera les étiquettes pour écrire votre nom tout en employant la routine 0BB5AH. Voici la solution qui écrit le nom «CPC » ORG 7000H LOAD 7000H LD A,67 CALL PRINT LD A,50 CALL PRINT LD A,67 CALL PRINT RET PRINT: EQU 0BB5AH ENDL'appellation PRINT est en fait une étiquette qui simplifie la compréhension et permet de créer un sous-programme (les sous-programmes sont développés dans la suite de l'article). L'instruction EQU attribue une adresse à l'étiquette PRINT. Cette adresse correspond dans le cas présent à la routine système 0BB5AH. J'espère qu'à présent vous avez bien compris le fonctionnement des étiquettes (sinon arrêtez l'assembleur), car maintenant nous allons voir les instructions de saut vers une adresse ou vers ces étiquettes. LES SAUTS Il existe différents types de sauts : il y a les sauts conditionnels, que nous développerons dans la troisième partie et les sauts inconditionnels. On peut différencier trois types de sauts Inconditionnels : les Jumps notés JP. les CALL et les sauts relatifs notés JR. 1-LES JUMPS Les jumps peuvent s'utiliser de plusieurs façons en assembleur : soit l'on fait un saut à une étiquette, soit l'on fait un saut à une adresse. L'avantage des étiquettes, c'est qu'elles facilitent beaucoup la compréhension et la programmation du listing. Par exemple, pour écrire une infinité de «A» , nous pouvons programmer : ORG 7000H LOAD 7000H BOUCLE: LD A,65 CALL 0BB5AH JP BOUCLE RET ENDL'instruction JUMP correspond au GOTO du Basic 2 - LES CALLS Le second type de saut Inconditionnels est le CALL associé au RET qui correspondent au GOSUB et au RETURN du Basic. Ils permettent la création de sous-programmes. Le branchement sur le sous-programme peut se faire de deux façons : * soit par l'appel du sous-programme par son adresse (l'adresse de début du sous-programme est donnée par l'éditeur que vous utilisez lors de l'assemblage) fonction : CALL adresse » soit en mettant au début du sous-programme une étiquette. Dans ce cas la fonction est : CALL étiquette. Tout sous-programme doit se terminer par l'instruction RET. Programme d'exemple : ORG 7000H LOAD 7000H LD A,67 CALL SP LD A,80 CALL SP LD A,67 CALL SP RET SP: CALL 0BB5AH RET END3-LE SAUT RELATIF JR Ce troisième type de saut, noté JR, effectue un saut relativement à l'adresse actuelle. C'est la distance de saut qui doit être Indiquée. L'opération qui sera utilisée est JR e, e correspondant à la distance appelée offset. CALCUL DE L'OFFSET: Considérons un programme dans lequel l'instruction JR se trouve à l'adresse OA006H et ou le but du saut se trouve à l'adresse 0A003H. La différence entre l'adresse où se trouve le JR et l'adresse où se trouve le but est de 0A006H-0A003H = 3. Mais. comme il s'agit d'un retour en arrière, l'adresse du JR étant supérieure à l'adresse du but, alors l'offset sera négatif, soit égal à-3, Pour calculer l'octet de notre Instruction. Il nous faut ôter deux de la distance car le processeur commence toujours par lire une Instruction entièrement. Alors il lira donc le code JR et l'offset. Chaque fols que le processeur lit un octet. Il est Incrémenté de un. Notre Instruction lue entièrement, le compteur de programme Indique l'adresse de la prochaine instruction. L'adresse Indiquée est donc élevée de deux. L'offset est donc égal à -3 -2 = - 5 = 0FBH En résumé l'offset noté e est égal à: e=adr1-adr2-2 adr1 correspondant à l'adresse du but adr2 correspondant à l'adresse de l'instruction JR. Dans ce cas. l'octet est placé à l'adresse 0A007H. Pour faire ce saut relatif. Il faudra donc taper : JR adr adr correspondant à l'adresse du but. Ce type de saut peut se faire sur une distance maximale de +129 ou -126 par rapporta l'adresse actuelle. Son seul avantage par rapport au JP est d'être plus rapide que ce dernier, dans sa fourchette d'utilisation. Le calcul de l'offset vous permet de vérifier si l'adresse que vous associez au JR est bonne. PROGRAMME D'EXEMPLE : ORG 7000H LOAD 7000H A000 LD A.65 A003 CALL 0BB5AH A005 JR 0A00H A007 RET A008 ENDIl est pour l'instant difficile de faire des programmes plus intéressants car vous ne connaissez encore que peu d'Instructions mais, le mois prochain, nous verrons les opérations logiques, les compteurs, les décompteurs ainsi que les sauts conditionnels. AMSTAR&CPC n°38 ★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser... |
|
|