GPA770 Microélectronique appliquée Exercices – série B.1 1. Considérez le segment de code suivant. Quelles instructions de branchement seront activées à la suite de l’exécution du code suivant? Répondez oui ou non pour chaque instruction. LDAB SUBB #2 #$DF …suite aux deux instructions, B = $02 - $DF = $23, avec N=0, Z=0, V=0 et C=1, donc: a) BEQ non d) BMI non b) BLO oui e) BHI non c) BGT oui f) BRA oui 2. Un instruction en mode d’adressage direct (DIR) peut seulement accéder des données dans une étendue d’adresses de 0000 à 00FF. Est-ce vrai que l’instruction doit aussi être dans cette étendue d’adresses? Non, l’instruction peut être à n’importe quel endroit dans toute la mémoire. 3. Quel est le seul mode d’adressage d’une instruction qui ne forme pas une adresse mémoire? Le mode d’adressage inhérent (INH). 4. Quelle adresse mémoire sera accédée par le CPU pour les exemples suivants d’adressage indexé, sachant que l’index X pointe à l’adresse mémoire $0800: a) LDAA b) STAA c) LDAA 2, X 2, +X -2, X addresse : $0802 addresse : $0802 addresse : $07FE 4. Donnez 2 instructions qui indiquent s’il y a eu emprunt en affectant le bit d’état C du CCR. La plupart des instructions qui effectuent un soustraction, e.g., SUBA, SBS, SBCB, SUBD, et CMPA., indiquent s’il y a eu emprunt avec le bit C. 5. Est-ce que les bits N et Z du CCR peuvent les deux être égal à 0, ou bien à 1, suite à l’exécution d’une instruction LDAA? A la suite d’un LDAA, les bits N et Z ne peuvent les deux être ‘1’, mais peuvent les deux être ‘0’. 6. Supposez qu’on veut exécuter (d’une façon indépendante) le segment de code suivant avec le 68HC12. Quelle sera la valeur des bits d’état C, N, V et Z au registre CCR, ainsi que le contenu de l’accumulateur A, juste après l’exécution de la séquence de code? LDAA ADDA ADCA #$95 #$12 #%01011001 A = $00, Z = 1, C = 1, V = 0, N = 0 7. Écrire une séquence d’instructions qui incrémente un nombre qui est représenté sur 2 octets (16 bits) en mémoire, sans devoir utiliser les accumulateurs A et B. Voir l’exemple codé exB1_8 pour le code assembleur. RAMStart ROMStart EQU EQU $0800 $4000 NUM_DATA ORG FDB RAMStart $05FF ;exemple de valeur à incrémenter ROMStart #RAMStart 1,X DONE 0,X DONE ORG LDX INC BNE INC END 8. Quel est le rôle d’un assembleur? La conversion de fichiers source (qui sont écrits en langage assembleur) en code machine comprit par le CPU. 7. Supposez que le registre IY contient $C919, et que le registre SP contient $1000. Quel sera l’impact sur le contenu de IY, de SP, et de la mémoire RAM juste après l’exécution de l’instruction PSHY? IY = SP = 8. Assemblez ce code assembleur à la main, et organiser le code machine résultant dans la table qui suit. Il s’agit de montrer les valeurs numériques hexadécimales correspondant aux adresses mémoire après que ce programme a été assemblé. Combien d’octets le programme principal occupe t-il en mémoire ROM? AGAIN ORG RMB BRCLR Adresse mémoire C020 C021 C022 C023 9. Assemblez le segment de code machine dans la table qui suit. ORG Var FCB ORG LDAA Loop INCB SUBA STAA BEQ END Valeur numérique (hex) 0F 32 F0 FC assembleur suivant à la main, et organiser le code $1000 $50 $2000 Var #5 Var Loop Adresse mémoire 1000 … 2000 2003 $C010 $10 3, X+, $F0, AGAIN Valeur 50 … B6 10 00 52 2004 80 05 7A 10 00 27 F8 2006 2009 10. Est-ce qu’on peut initialise un pointeur de pile SP avec l’adresse de la première instruction du programme? Oui. En fait, on initialise souvent de cette façon car les programmes grandissent vers le bas, tandis que la pile grandit vers le haut. 11. Supposez que le registre IY contient $C919, et que le registre SP contient $1000. Quel sera l’impact sur le contenu de IY, de SP, et de la mémoire RAM juste après l’exécution de l’instruction PSHY? Adresse mémoire $0FFE $0FFF $1000 IY = $C919 SP = $0FFE Valeur numérique $C9 $19 12. Écrivez un programme qui compte le nombre de bytes dans une table qui sont égal à zéro. La table consiste de 6 nombres et commence à l’adresse $2000. Stocker les résultats à l’adresse mémoire $5000. Result Table EQU EQU $5000 $2000 CNT ORG FCB $1100 $06 TEST ORG $1000 LDAA CNT LDX #Table LDY #$0000 CMPA #$00 BEQ DONE LDAB 1,X+ DONE BNE INY Next BRA STY END Next DECA TEST Result 13. Quel est le contenu du registre d’index IX après l’exécution du programme suivant: LDS #$2000 PSHA PSHY TSX PULX [IX] = [IY] 14. En partant du programme suivant: ORG LDS LDY LDAB ABY PSHY SUBB $F054 #$7F88 #$AB63 #$36 #$2A a) Quel est le contenu des registres clés du 68HC12 après l'exécution du programme? B = $0C Y = $AB99 SP = $7F86 PC = $F061 CCR: N = 0, Z = 0 b) Quels sont les parties du CCR qui sont modifiées d’après l’exécution de PSHY et quels sont leurs nouveaux contenus? Aucunes sont modifiées 15. Répondez aux questions à partir du fichier probleme7.lst suivant: Fichier probleme7.lst 0010 46 ;******************************************* ; DATA ;******************************************* ORG $0010 VALUE FCB $46 C100 C103 C105 C108 CFE0 00 9610 16C1 09 3F ;******************************************* ; PROGRAMME PRINCIPAL ;******************************************* ORG $C100 START LDS #$E000 LDAA VALUE JSR SWAP SWI 48 89 48 89 48 89 48 89 3D ;****************************************** ; SWAP DES 4 BITS HIGH ET LOW DE L’ACC A ;****************************************** SWAP LSLA ADCA #0 LSLA ADCA #0 LSLA ADCA #0 LSLA ADCA #0 RTS C109 C10A C10C C10D C10F C110 C112 C113 C115 00 00 00 00 END Indiquez le contenu de PC, SP, A et des adresses mémoire $DFFF, $DFFE et $DFFD immédiatement après l’exécution des instructions suivantes: a. JSR à l’adresse C105: PC = C109 SP = DFFE A = 46 DFFD = pas connu DFFE = C1 DFFF = 08 b. LSLA à l’adresse C10C: PC = C10D SP = DFFE A DFFD DFFE DFFF = 18 = pas connu = C1 = 08 c. RTS à l’adresse C115: PC = C108 SP = E000 A = 64 DFFD = pas connu DFFE = pas connu DFFF = pas connu Quel sera l’impact sur le fonctionnement du programme si la valeur stockée aux adresses mémoires $C101 et $C102 est changée de $E000 aux valeurs suivantes? a. $C105: Le programme calcul correctement la valeur dans A, et termine comme il le doit. Cependant, il va écrire par-dessus le opcode JSR et l’adresse de l’instruction LDAA (mauvais style). b. $C116: Le programme ne calcul pas correctement la valeur dans A, et ne termine pas car il écrit par-dessus le op-code RTS et l’opérant immédiat de l’instruction ADCA. C1 sera ajouté à A, en ensuite l’instruction INX sera exécutée (INX à un op-code de 08). 16. Décrivez brièvement la fonction du programme assembleur suivant. Result Table CNT TEST Next DONE EQU EQU ORG FCB ORG LDAA LDX LDY CMPA BEQ LDAB BNE INY DECA BRA STY END $5000 $2000 $1100 $06 $1000 CNT #Table #$0000 #$00 DONE 1,X+ Next TEST Result Ce programme compte le nombre d’octets dans une table qui ont une valeur de $00. La table comprend de 6 valeurs numériques stockées à partir de l’adresse mémoire $2000. La somme est stockée à l’adresse mémoire $5000. 17. Écrivez une sous-routine qui échange les 4 bits du haut et les 4 du bas de l’accumulateur A. Par exemple, si le contenu de A est $35, l’exécution de la sous-routine va changer son contenu à $53. Voir l’exemple codé exB1_4 pour le code assembleur. 18. Complétez le programme en assembleur suivant. Il additionne 2 nombres de 4 octets (32 bits) qui sont stockés aux adresses mémoire $0800-$0803 et $0804-$0807, respectivement. Le programme commence par l’addition de l’octet le moins significatif, et progresse vers l’octet le plus significatif. Le résultat global de l’addition est stocké sur 4 octets aux adresses mémoire $0810-$0813. ORG LDD ADDD STD LDAA ADCA STAA LDAA ADCA STAA END $4000 $0802 ; addit. et stocker les 2 octets LSB $0806 $0812 $0801 ; addit. et stocker l’octet le 2ème MSB $0805; incluant la retenue des 2 octets LSB $0811 $0800 ; addit. et stocker l’octet MSB $0804; incluant la retenue des 3 octets LSB $0810 19. Indiquez brièvement les trois opérations de base qui sont effectuées par un contrôleur à logique floue afin de générer un signal de contrôle. Quelle est la fonction de chaque opération? RÉPONSE: 20. A partir du programme assembleur suivant: TABLE SOMME VERIF ARRET EQU ORG RMB ORG LDAB LDX LDAA CMPA BEQ ADDB INX INCA BRA STAB END $5000 $0800 1 $4000 #$00 #TABLE #$00 #$05 ARRET 0,X VERIF SOMME 5-1 (5 points) Décrivez brièvement la fonction du programme. RÉPONSE: 5-2 (15 points) Assemblez ce code assembleur à la main, et organiser le code machine résultant dans la table qui suit. Il s’agit de montrer les valeurs numériques hexadécimales correspondant aux adresses mémoire après que ce programme a été assemblé. Adresse mémoire Valeur numérique (hex) $0800 . . . $4000 . . . 5-3 (5 points) Combien d’octets le programme principal occupe t-il en mémoire ROM? RÉPONSE: Chapitre 2 du livre de Pack et Barrett (p.69) Fundamental: 4, 5, 8, 9 et 10 Advanced: 3, 5 et 9 Challenging: 2 et 4 Réponses pour la partie Fundamental: Q4: CPD #1234 Q5: Z=0, C=0, H=0, N=1 Q8: l’instruction est utilisée en mode indexé, et charge le contenu à l’adresse mémoire IX+$20 dans A. (Le $20 représente le décalage par rapport au IX.) Q9: ORG $0000 FCB $12 FCB $10 Q10: Avec les instructions CMPA et BITB, le contenu de l’accumulateur B reste inchangé à $34. (Seul le contenu du CCR sera affecté.) Réponses pour la partie Advanced: Q3: L’utilisation du mode d’adressage direct permet de réduire les dimensions du code, et le temps d’exécution du programme. Q5: Il n’y a aucune restriction en termes de l’étendue d’adressage effective. On peut accéder des valeurs numériques à des adresses qui s’étendent de $0000 à $FFFF. Q9: On commence en calculant le nombre de bytes associé à chaque instruction. Les instructions DECA et TSTA consistent tous les deux d’un op-code à 1 byte, tandis que BNE consiste d’un op-code à 1 byte et d’un opérant de 1 byte. L’instruction BNE est utilisée pour vérifier le bit d’état Z du CCR. Quand le bit Z est zéro, l’instruction BNE modifie la valeur du PC selon: PC + décalage PC On doit donc avoir un décalage de 4 bytes vers l’arrière, alors XX = $FC. La valeur $FC correspond au complément à 2 de ‘-4’ représentée sur 8 bits. Réponses pour la partie Challenging: Q2: Le mode d’adressage indexé devrait être utilisé pour copier un table de valeurs d’un endroit à l’autre en mémoire car, avec ce mode, l’adresse effective est définit comme la somme d’un registre d’index (IX, IY, SP, PC) et d’un décalage. En effet, ce mode permet d’utiliser un registre d’index comme pointeur au début d’une liste, et le décalage pour bouger dans cette liste. Ce mode représente une façon flexible de représenter un adresse effective comme variable. Q4: Programme pour copier une table de 5 valeurs des adresses mémoires commencent à $5000 vers les adresses mémoires commencent à $6000. Voir l’exemple codé exB1_10 pour le code assembleur. SOURCE: DESTINATION: EQU EQU $5000 $6000 ; adresse source ; adresse destination NUM_DATA: ORG FCB $4000 $05 ; nombre de bytes à copier ORG LDAA LDX LDY CMPA BEQ LDAB STAB DECA BRA END $4100 NUM_DATA ; #$05 --> A #SOURCE ; source: $5000 --> IX #DESTINATION ; destination:$6000 -> IY #$00 ; condition d’arrêt DONE ; si A = $00, DONE 1,X+ ; source, poste inc. 1,Y+ ; destin., poste inc. COPY: COPY