9
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

Exercices assembleur

Embed Size (px)

Citation preview

Page 1: Exercices assembleur

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

Page 2: Exercices assembleur

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

Page 3: Exercices assembleur

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

Page 4: Exercices assembleur

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

Page 5: Exercices assembleur

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

Page 6: Exercices assembleur

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

Page 7: Exercices assembleur

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

Page 8: Exercices assembleur

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 :