Upload
arthurrimbaudoo
View
214
Download
0
Embed Size (px)
Citation preview
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 :