Exercice 1 Proposer un programme permettant de ranger en mémoire dans l'ordre c

Exercice 1 Proposer un programme permettant de ranger en mémoire dans l'ordre croissant l'ensembles des données 8 bits non signées à partir de l'adresse de base $0100 Corrigé1 : ORG $0000 * Début du programme LDX #$0100 * Début de table LDA #$00 * 1ere données $00 Boucle STA ,X+ * Chargement et incrémentation du pointeur CMPA #$FF * Dernière donnée = $FF alors fin de programme BEQ Fin INCA * Incrémentation de la donnée BRA Boucle Fin SWI Exercice 2 : Faire la même chose pour l'ensemble des données 8 bits signées à partir de l'adresse de base $0200. Corrigé 2 : ORG $0000 * Début du programme LDX #$0200 * Début 1ere donnée négative LDY #$0280 * Début 1ere donnée positive LDA #$FF * 1ere donnée négative $FF Boucle STA ,X+ * Chargement et incrémentation du pointeur X CMPA #$80 * Si donnée = $80 fin des données négatives BEQ Positif DECA * Décrémentation de la donnée BRA Boucle Positif LDA #$00 * 1ere donnée positive Boucle1 STA ,Y+ * Chargement et incrémentation du pointeur Y CMPA #$7F * Si donnée = $7F fin des données positives BEQ Fin INCA * Incrémentation de la donnée BRA Boucle1 Fin SWI Exercice 3 : Proposer un programme permettant d'effectuer le comptage des données positives, négatives et nulles d’une table de nombres signés de 8 bits. Le programme devra permettre de stocker ces résultats aux adresses $0050, $0051,$0052 par exemple. Corrigé 3 : TABLE EQU $1000 * Déclaration du début de table FIN_TAB EQU $1009 * Déclaration du pointeur de fin de table ORG $0000 * Début du programme LDX #TABLE * Chargement du pointeur Boucle CMPX #FIN_TAB+1 * Si le pointeur dépasse la fin de la table BEQ FIN * alors FIN LDA ,X+ * Chargement et incrémentation du pointeur BMI Negatif * Si l'opération est négative −> Négatif BEQ Nul * Si A = 0 −> Nul LDB >$0050 * Sinon la données est positive INCB * Incrémente le compteur situé en $0050 STB >$0050 * On mémorise la valeur BRA Boucle Negatif LDB >$0051 * La données est négative INCB * Incrémente le compteur situé en $0051 STB >$0051 * On mémorise la valeur BRA Boucle Nul LDB >$0052 * La données est nulle INCB * Incrémente le compteur situé en $0052 STB >$0052 * On mémorise la valeur BRA Boucle FIN SWI ORG $1000 * Début de la TABLE FCB −1,−1,0,5,8,−7,0,−9,2,6 Exercice4 : Proposer un programme permettant d'effectuer le comptage du nombre de données paires et impaires d’une table. Corrigé 4 : TABLE EQU $1000 * Déclaration du début de table FIN_TAB EQU $1009 * Déclaration du pointeur de fin de table ORG $0000 * Début du programme LDX #TABLE * Chargement du pointeur Boucle CMPX #FIN_TAB+1 * Si le pointeur dépasse la fin de la table BEQ FIN * alors FIN LDA ,X+ * Chargement et incrémentation du pointeur ANDA #$11 * ET logique avec $11 pour connaître la parité CMPA #$00 * Si A = 0 la donnée est paire −> Pair BEQ Pair LDB >$0050 * Sinon la donnée est impaire INCB * Incrémentation du compteur STB >$0050 * Mémorisation du compteur BRA Boucle Pair LDB >$0051 * La donnée est paire INCB * Incrémentation du compteur STB >$0051 * Mémorisation du compteur BRA Boucle FIN SWI ORG $1000 * Début de la TABLE FCB 1,2,3,4,5,6,7,8,9,0 Exercice 5 : Proposer un programme permettant de compter le nombre de données d'une table dont le bit b 3est égal à 1 Corrigé 5 : Commentaires Pour connaître l'état du bit 3 d'un nombre de 8 bit, il suffit de faire un ET logique entre ce mot et $08, si le résultat est égal à 0, le bit 3 est à 0, sinon le bit 3 est à 1 TABLE EQU $1000 * Déclaration du début de table FIN_TAB EQU $1009 * Déclaration du pointeur de fin de table ORG $0000 * Début du programme LDX #TABLE * Chargement du pointeur Boucle CMPX #FIN_TAB+1 * Si le pointeur dépasse la fin de la table BEQ FIN * alors FIN LDA ,X+ * Chargement et incrémentation du pointeur ANDA #$08 * ET logique avec $08 pour savoir si bit3=1 CMPA #$00 * Si A = 0 bit3=0 −> Boucle BEQ Boucle LDB >$0050 * Sinon bit3=1 INCB * Incrémentation du compteur STB >$0050 * Mémorisation du compteur BRA Boucle FIN SWI ORG $1000 * Début de la TABLE FCB 1,2,3,4,5,6,7,8,9,0 Exercice6 : Soit le nombre hexadécimal X 1=$23. Mettre au point un programme permettant de trouver le nombre X2tel que le produit X1*X2soit strictement inférieur à $0299. Corrigé 6 : Commentaire Pour connaître X 2, on incrémente un mot de 8 bit que l'on multiplie à $23, puis on teste le résultat à pour savoir s'il est supérieur ou égal à la valeur que l'on recherche. Si c'est le cas, la valeur de X 2 est donc le mot de 8 bit –1, puisque l'on désire obtenir un résultat strictement inférieur. ORG $0000 * Début du programme LDA #$23 * Chargement de la valeur à multiplier X1 LDB #$01 * Chargement de la 1ere valeur BOUCLE STB $1000 * Mise en mémoire de l’accumulateur B MUL * Multiplication de A par B CMPD #$0299 * Si A.B est inférieur ou égal à $0299 BHS RESULT * alors RESULT LDB >$1000 * Recharge de l'accumulateur B INCB * Incrémentation de l'accumulateur B LDA #$23 * Recharge de l'accumulateur A BRA BOUCLE RESULT LDB >$1000 * Recharge de l'accumulateur B DECB * Décrémentation de l'accumulateur B SWI Exercice7 : On dispose d'une table de 10 données de 8 bits choisies arbitrairement. Proposer un programme de recherche de la donnée maximale et de la donnée minimale de la liste, les nombres considérés étant non signés. Corrigé 7 : Commentaire Pour connaître le MIN et le MAX d'une table, on enregistre d'abord la 1 ère donnée dans MIN et dans MAX, puis on vient les comparer avec la valeur suivante. Si la nouvelle donnée est plus grande que la valeur contenue dans MAX, on met da nouvelle valeur dans MAX, on procède de manière identique pour la valeur MIN. Dans le cas ou la valeur n'est ni un MIN, ni un MAX, on pointe sur la valeur suivante de la table. MIN EQU $0050 * Déclaration de l'adresse du MAX MAX EQU $0060 * Déclaration de l'adresse du MIN TABLE EQU $1200 * Déclaration du pointeur de fin de table ORG $0000 * Début du programme LDX #TABLE * Chargement du pointeur LDA ,X+ * Chargement et incrémentation du pointeur STA >MAX * Mémorise la 1ere valeur dans MAX STA >MIN * Mémorise la 1ere valeur dans MIN Boucle CMPX #TABLE+10 * Si le pointeur dépasse la fin de la table BEQ FIN * alors FIN LDA ,X * Chargement et incrémentation du pointeur CMPA >MAX * Si A > MAX −> Hight BHI Hight LDA ,X * Chargement et incrémentation du pointeur CMPA >MIN * Si A < MIN −> Low BLO Low LDA ,X+ * Chargement et incrémentation du pointeur BRA Boucle Hight LDA ,X+ * Chargement et incrémentation du pointeur STA >MAX * Mémorise la valeur dans MAX BRA Boucle Low LDA ,X+ * Chargement et incrémentation du pointeur STA >MIN * Mémorise la valeur dans MIN BRA Boucle FIN SWI ORG $1200 * Début de la TABLE FCB 2,2,3,4,5,0,7,7,7,7 Exercice8 : Compléter ce programme de sorte qu'il soit capable de déterminer également le maximum et le minimum lorsque les données sont signées. Corrigé9 MIN EQU $0050 * Déclaration de l'adresse du MAX MAX EQU $0060 * Déclaration de l'adresse du MIN TABLE EQU $1200 * Déclaration du pointeur de fin de table ORG $0000 * Début du programme LDX #TABLE * Chargement du pointeur LDA ,X+ * Chargement et incrémentation du pointeur STA >MAX * Mémorise la 1ere valeur dans MAX STA >MIN * Mémorise la 1ere valeur dans MIN Boucle CMPX #TABLE+10 * Si le pointeur dépasse la fin de la table BEQ FIN * alors FIN LDA ,X * Chargement et incrémentation du pointeur CMPA >MAX * Si A > MAX −> High Exercice9 : Exercice10 : Exercice 11 : Exercice12 : uploads/Philosophie/ exercices-assembleur.pdf

  • 50
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager