★ CODING ★ Dr.Watson - Autoformation à l'assembleur par Micro Application ★ |
Dr.Watson - Autoformation à l'assembleur - Solutions |
CHAPITRE 1 ENT ENT CHAPITRE 2 ORG 30000 On utilise de préférence l'instruction JR NZ à l'instruction JP NZ car la distance de saut est entre +129 et -126 octets, et l'instruction JR NZ nécessite un temps d'exécution plus court. Elle est des lors plus efficace. ORG 30000 CHAPITRE 3 Case mémoire Contenu ENT Si vous utilisez la sous-routine plot en code machine en 48106, le programme devient: ENT ENT Remarque: Il n'est pas vraiment nécessaire, a part pour une illustration, de charger les coordonnées en mémoire. Ce programme est plus rapide qu'un programme qui stocke les coordonnées en mémoire et oui les lit ensuite encore une fois. ENT ENT LD BC, 35000 LD A,65 LD E,26 ;26 parcours de boucle sont requis NXT: LD(BC),A INC BC INC A ;Lettre ASCII suivante DEC E JR NZ,NXT: LD BC,35000 LD E,26 ;26 parcours de boucle sont requis PUT: LD A,(BC) INC BC CALL 47962 DEC E JR NZ,PUT: RET ENT LD IX,35000 LD A,83 LD (IX+0),A LD (IX+2),A INC A INC A LD (IX+1),A LD A,65 LD (IX+3),A LD A,78 LD (IX+4),A LD A,(IX+2) CALL 47692 LD A,(IX+3) CALL 47692 RET CHAPITRE 4 ENT LD A,200 ADD A,48 CALL 47692 RET Ceci affiche un petit bonhomme sur l'écran. ENT LD A,&41 ADD A,&10 CALL &BB5A RET Ceci place un Q sur l'écran. ENT LD C,&FA octet faible de 250 LD A,&58 octet faible de 600 AND A ADD A,C ADD A,65 LD (&7000),A LD C,&00 octet fort de 250 LD A,&2 octet fort de 600 ADC A,C ADD A,65 LD (&7001),A LD A,(&7000) CALL &BB5A LD A, (&7001) CALL &BB5A RET Ceci produit une forme comme le bras d'un robot. ENT LD C,9 LD A,233 SUB C CALL &BB5A RET Il n'est pas nécessaire de soustraire 65 de la réponse parce que CHR$(224) est un caractère imprimable (une figure souriante). ENT LD A,126 ADD A,97 LD C,153 SUB C CALL &BB5A RET Cela met "F" sur l'écran. ENT LD DE,4008 LD HL,4248 AND A SBC HL,DE LD A,L CALL &BB5A RET Cela met la flèche haut sur l'écran. ENT LD HL,35000 LD A,10 LD (HL),A INC HL LD A,20 LD (HL),A LD A,65 ADD A,(HL) LD (HL),A DEC HL LD A,65 ADD A,(HL) LD (HL),A CALL &BB5A INC HL LD A,(HL) CALL &BB5A RET Ceci affiche "KU" sur l'écran. ENT LD DE,100 LD HL,50 CALL 48118 LD D,0 LD E,100 LD A,75 ADD A,E LD E,A LD H,0 LD L,50 LD A,75 ADD A,L LD L,A CALL 48118 RET CHAPITRE 5 LD A,&7 ADD A,&C DAA ADD A,65 CALL &BB5A RET Ceci mettra un "Z" sur l'écran. LD C,&12 LD A,&35 SUB C DAA ADD A,65 CALL &BB5A RET Ceci mettra un "d" sur l'écran. 1. C=0 2. C=1 3. C=0 Le masque requis sera 00000011. 253 AND 75 = 73 (1001001) 1. 1001 OR 1101 = 1101 2. 250 OR 25 = 251 3. (209 OR 20) AND 27 = 17 1. 1101 XOR 1110100 = 127 LD C,11 LD A,116 XOR C CALL &BB5A RET Ceci affiche un échiquier sur l'écran. 2. 77 XOR 200 = 133 LD C,77 LD A,200 XOR C CALL &BB5A RET Ceci affiche une barre verticale sur l'écran, 3. (25 OR 255) AND 200 = 200 LD C,25 LD A,200 OR C LD C,200 AND C CALL &BB5A RET Ceci affiche deux diagonales sur l'écran, 1. 0100 2. 0100010 3. 0001 1. 1010 ; = 10 1101 ; = -3 0111 ; = 7 2. 1111 0111 0110 3. 0110 = -10 1000 =8 1110 = -2 LD A, 20 CPL INC A ADD A,98 CALL &BB5A RET Ceci affiche un "N" sur l'écran. CHAPITRE 6 La solution est la même que pour le programme 6.1 sauf pour ces lignes: LD C,10 LD E,9 Le programme devra afficher le caractère 155 sur l'écran, c'est-à-dire T renversé avec une barre courte. LD C,124 LD E,146 LD D,0 LD B,8 LD HL,O NXTB: SRI C JR NC,NOADD: ADD HL,DE NOADD:SLA E RL D DEC B JR NZ,NXTB: LD A,H CALL &BB5A LD A,H CALL &BB5A RET Cela donne F. Pour réaliser facilement ceci, effacer DEC B et remplacer la ligne JR NZ,NXTB: par: DJNZ NXTB: LD A,5 RLCA RLCA RLCA RLCA RLCA CALL &BB5A RET Ceci affiche la flèche haut en haut de l'écran; le caractère ASCII pour 160. 2.LD A, 254 RRCA CALL &BB5A RET Ceci affiche CHR$(127); un échiquier sur l'écran. LD A,255 CALL &BB5A RES 4,A CALL &BB5A SET 1,A RES 3,A CALL &BB5A RET Ceci affiche une flèche a deux têtes, une fusée et une pyramide à son côté, sur l'écran. CHAPITRE 7 ENT LD DE,0 LD HL,0 Met curseur graphique sur(0,0) CALL &BBC0 LD DE,100 ;Charge 100 dans DE LD HL,200 ;Charge 200 dans HL PUSH DE Sauvegarde DE sur la pile PUSH HL Sauvegarde HL sur la pile CALL &BBF6 Dessine ligne jusqu'à (100,200) LD DE,0 LD HL,0 Met curseur sur (0,0) CALL &BBC0 POP DE Met ancien contenu de HL dans DE POP HL Met ancien contenu de DE dans HL CALL &BBF6 Dessine ligne jusqu'à (100,200) RET ENT LD A,43 Met "+" dans A PUSH AF Stocke A sur la Pile actuelle CALL &BB5A Met "+" sur écran LD (&7148),SP Enregistre valeur actuelle de SP LD HL,&7148 Se prépare pour: LD SP,HL Fixer a nouveau la pile en 30000 LD A,61 Met "=" dans A PUSH AF Stocke A dans nouvelle pile CALL &BB5A Met "=" sur écran LD HL,(&714A) Trouve emplacement originel de SP LD SP,HL Revient sur la pile originelle POP AF Retrouve "+" PUSH AF CALL &BB5A LD HL,&7146 Parce que A et F sont dans la nouvelle pile LD SP,HL POP AF CALL &BB5A LD HL,(&714A) LD SP,HL POP AF CALL &BB5A RET CHAPITRE 8 LD HL,&B100 LD DE,&C000 LD BC,&3FFF LOOP: LDI JP PO,FINISH: JP LOOP: FINISH:RET ANNEXE 5 i) 3 ii) 4 iii) 128 iv) 131 v) 183 vi) 115 i) 31 ii) 41 iii) 189 iv) 136 i) 9 ii) 19 iii) 165 iv) 174 v) 14 vi) 26 vii) 234 i) 0000 0100 v) 0101 0011 ii) 0001 0000 vi) Trop grand pour représentation ; BCD sur deux octets iii) 0111 0111 vii) Trop grand pour représentation ; BCD sur deux octets iv) 1001 0111 viii) Trop grand pour représentation ; BCD sur deux octets i) 1 ; v) 49 ii) 9 ; vi) 23 iii) 15 ; vii) 97
|