Académique Documents
Professionnel Documents
Culture Documents
Problème I
Écrire un programme en assembleur qui effectue les opérations suivantes :
1. Chargement dans la mémoire des données suivantes
• 32h, 0Ah, 89h, 47h, BCh, FFh, 11h
• 84h, BAh, 90h, B7h, 6Ah, F0h, 00h
2. Comparaison entre deux éléments de la même colonne.
3. Affectation du nombre le plus grand à la pile.
La comparaison doit commencer à partir de la 1ère colonne :
32h, 0Ah, 89h, 47h, BCh, FFh, 11h
84h, BAh, 90h, B7h, 6Ah, F0h, 00h
4. Retour au DOS
Problème II
L’interfaçage entre un afficheur LCD et le port parallèle d’un PC est réalisé comme le montre la
figure ci-dessous :
Port Parallèle
D0 D0
D1 D1
D2 D2
D3 D3
D4 D4 Afficheur LCD
D5 D5
D6 D6 Vcc
D7 D7
E R/W RS Vcc
strobe
Select
printer
Avec :
E ≡ (Enable) marche sur front descendant permettant la saisie de la donnée à afficher.
RS ≡ (Registre Select) travaille au niveau bas validant l’afficheur.
a. Faire un organigramme qui permet d’afficher la série 00h – FFh. L’affichage de chaque
donnée dure 1s. Justifier les différentes étapes ainsi que les valeurs d’initialisation des
registres.
b. Traduire l’organigramme en langage C.
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Solution
Problème I :
DOSSEG
.MODEL SMALL
.STACK 0100H
.DATA
T1 DB 32H, 0AH, 89H, 47H, 0BCH, 0FFH, 11H
T2 DB 84H, 0BAH, 90H, 0B7H, 6AH, 0F0H, 00H
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AH, 00H
MOV BX, OFFSET T1
MOV CX, 7
BOUCLE: MOV AL, [BX]
CMP AL, [BX+7]
JA SORTIE
MOV AL, [BX+7]
SORTIE: PUSH AX
INC BX
LOOP BOUCLE
MOV AX, 4C00H
INT 21H
END START
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Les 3 opérations doivent être répétées 5 fois, avant d’effectuer le retour au DOS.
On mettra l’opération 1 en sous programme.
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Solution
DOSSEG
.MODEL SMALL
.CODE
START:
MOV CX, 05H
BOUCLE: CALL SAISIE
MOV DL, AL
CALL SAISIE
ADD DL, AL
MOV AH, 02H
INT 21H
LOOP BOUCLE
MOV AX, 4C00H
INT 21H
SAISIE PROC NEAR
MOV AH, 01H
INT 21H
RET
SAISIE ENDP
END START
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Le code ASCII représente chaque caractère sur 8 bits (1 octet). Le chiffre de poids fort
est toujours égal à 0. Les codes des lettres alphabétiques minuscules se suivent et
varient de 61h à 7Ah. Lorsque le 6ème bit passe à 0 le caractère prend la forme
majuscule.
Exemple : Le code ASCII de a est 61h : 0 1 1 0 0 0 01
Lorsque a passe en majuscule A, le code devient 41h : 0 1 0 0 0 0 0 1
1. Mettre dans la pile les codes ASCII de toutes les lettres minuscules (a … z).
3. Retourner au DOS.
Solution:
DOSSEG
.MODEL SMALL
.STACK 0100H
.CODE
START:
MOV AL, 61H
SAUT: PUSH AX
INC AX
CMP AL, 7AH
JBE SAUT
MOV SI, 02H
BOUCLE: CALL TRANSFORMATION
ADD SI, 02H
CMP DL, 41H
JA BOUCLE
MOV AX, 4C00h
INT 21H
2. Effectuer les opérations suivantes, sur 4 bits, et préciser les valeurs des indicateurs
CF, ZF, SF, OF, et PF :
Solution:
EXERCICE 4:
DOSSEG
.MODEL SMALL
.STACK 0100H
.DATA
T1 DB 18H, 11H, 29H, 04H, 20H
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AH, 00H
MOV BX, OFFSET T1
MOV CX, 4
MOV AL, [BX]
BOUCLE:
CMP AL, [BX+1]
JB S1
MOV AL, [BX+1]
S1: INC BX
LOOP BOUCLE
PUSH AX
MOV AX, 4C00H
INT 21H
END START
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Solution:
DOSSEG
.MODEL SMALL
.STACK 0100H
.DATA
T1 DB 01H, 00H, 02H, 00H, 03H, 00H, 04H, 00H
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AH, 00H
MOV BX, OFFSET T1
MOV AL, 08H
MOV CX, AL
SORTIE: CMP [BX], 00H
JNZ S1
JMP S2
S1: DEC AL
S2: INC BX
LOOP SORTIE
PUSH AX
MOV AX, 4C00H
INT 21H
END START
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
1. Parmi les instructions suivantes indiquer celles qui sont incorrectes et corriger
les :
PUSH AL
ROL AX, 2
MOV AX, var
MOV AX, BL
MOV AX, [0001]
MOV BX, AX
MOV AX, 03h
AND AX, [SI+6]
Solution 1:
EXERCICE 4:
DOSSEG
.MODEL SMALL
.STACK 0100H
.DATA
T1 DB 01H, 00H, 02H, 00H, 03H, 00H, 04H, 00H
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AH, 00H
MOV BX, OFFSET T1
MOV AL, 8
MOV CX, AL
SORTIE: CMP [BX], 00H
JE S1
JMP S2
S1: DEC AL
S2: INC BX
LOOP SORTIE
MOV AX, 4C00H
INT 21H
END START
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Solution 2:
EXERCICE 4:
DOSSEG
.MODEL SMALL
.STACK 0100H
.DATA
T1 DB 01H, 00H, 02H, 00H, 03H, 00H, 04H, 00H
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AH, 00H
MOV BX, OFFSET T1
MOV AL, 8
MOV CX, AL
SORTIE: CMP [BX], 00H
JNE S2
DEC AL
S2: INC BX
LOOP SORTIE
MOV AX, 4C00H
INT 21H
END START
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
1. Donner la position des indicateurs CF, ZF, SF, PF et OF à la fin de l’exécution des
instructions suivantes :
2. Quelle est la procédure suivie par le processeur lors de l’appel d’un sous
programme à passage de paramètre par la pile.
• Faire l'addition de toutes les colonnes et ranger dans la pile les éléments des
colonnes qui donnent comme résultat la valeur 6.
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Solution:
EXERCICE 3:
DOSSEG
.MODEL SMALL
.STACK 0100H
.DATA
T1 DB 01H, 00H, 02H, 00H, 03H, 00H, 02H, 00H
T2 DB 01H, 02H, 02H, 01H, 03H, 00H, 04H, 00H
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AH, 00H
MOV BX, OFFSET T1
MOV CX, 8
SORTIE: MOV AL, [BX]
ADD AL, [BX+8]
CMP AL, 06H
JNE S1
PUSH [BX]
PUSH [BX+8]
S1: INC BX
LOOP SORTIE
MOV AX, 4C00H
INT 21H
END START
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Exercice I :
Exercice II :
Solution:
Exercice II :
DOSSEG JA S2
.MODEL SMALL MOV AL, VAR3
.STACK 0100 H S2:
.DATA PUSH AX
VAR1 DB 01H MOV AL, VAR1
VAR2 DB 04H ADD AL, VAR2
VAR3 DB 03H ADD AL, VAR3
.CODE PUSH AX
START: MOV BX, OFFSET VAR1
MOV AX, @DATA MOV CX, 3
MOV DS, AX S3:
MOV AH, 00H MOV AL,[BX]
MOV AL, VAR1 PUSH AX
CMP AL, VAR2 INC BX
JA S1 LOOP S3
MOV AL, VAR2 MOV AX, 4C00H
S1: INT 21H
CMP AL, VAR3 END START
SP F6h
0003
SP F8h
0004
SP FAh
0001
SP FCh
0008
SP FEh
0003
SP 100h
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Exercice I :
1. Quelle est la différence entre une interruption matérielle et une interruption
logicielle ?
2. Donner les étapes de traitement d’une interruption matérielle
3. Indiquer le type du mode d’adressage des instructions suivantes en expliquant la
méthode de saisie de la donnée
Exercice II :
aAbBcC…zZ
Solution:
Exercice II :
DOSSEG DOSSEG
.MODEL SMALL .MODEL SMALL
.CODE .CODE
START: START:
MOV BL, 61H MOV AL, 61H
SAUT: SAUT:
MOV DL, BL MOV DL, AL
CALL AFFICHAGE CALL AFFICHAGE
CALL TRANSFORMATION CALL TRANSFORMATION
CALL AFFICHAGE CALL AFFICHAGE
INC BL INC AL
CMP BL, 7AH CMP AL, 7AH
JBE SAUT JBE SAUT
MOV AX, 4C00H MOV AX, 4C00H
INT 21H INT 21H
AFFICHAGE PROC NEAR AFFICHAGE PROC NEAR
MOV AH, 02H MOV AH, 02H
INT 21H INT 21H
RET RET
AFFICHAGE ENDP AFFICHAGE ENDP
Exercice I :
1. Préciser le rôle de chacun des registres suivants :
CS, DS, SP et IP
Exercice II :
• Lire les données à partir de la pile en les comparants. Ranger la valeur la plus
grande dans le registre DX
Solution:
Exercice II :
DOSSEG
.MODEL SMALL
.STACK 0100H
.DATA
T1 DB 18H, 11H, 29H, 04H, 20H
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AH, 00H
MOV BX, OFFSET T1
MOV CX, 5
SORTIE: MOV AL, [BX]
INC BX
PUSH AX
LOOP SORTIE
POP DX
S1: CMP SP, 100H
JZ FIN
POP AX
CMP DL, AL
JA S1
MOV DL, AL
JMP S1
FIN:
MOV AX, 4C00H
INT 21H
END START
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
PARTIE I :
1. Rappeler brièvement tous les registres du 80x86 en précisant le rôle de chacun des
registres.
2. Donner le mode d’adressage de l’instruction suivante et indiquer les étapes de
l’exécution : AND AX, [BX+SI+7]
3. Pourquoi les segments de la mémoire ont une taille de 64 Ko ?
4. Donner l’architecture de l’espace mémoire en précisant les adresses et le mode
d’adressage du microcontrôleur 80C535.
5. Quelle est la différence entre un registre général est un SFR ?
6. Citer 3 exemples de registres généraux et 3 exemples de registres SFR.
PARTIE II :
PARTIE III :
Justifier le choix des valeurs à mettre dans les registres pour avoir la période voulue.
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Solution:
PARTIE II :
DOSSEG
.MODEL SMALL
.CODE
START:
MOV DL, 00H
MOV CX, 04H
BOUCLE: CALL SAISIE
CMP DL, AL
JA SAUT
MOV DL, AL
SAUT:
LOOP BOUCLE
MOV AH, 02H
INT 21H
MOV AX, 4C00H
INT 21H
SAISIE PROC NEAR
MOV AH, 01H
INT 21H
RET
SAISIE ENDP
END START
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
PARTIE III :
Solution 1:
CPU 80515
INCLUDE stddef51
USING bank0
SEGMENT code
ORG 0000H
START:
MOV R7, #80H
BOUCLE : CPL P1.7
CALL ATTENTE Début
JB P4.7 START
MOV R7, #40H
SJMP BOUCLE R7← 80H
ATTENTE :
SAUT2: MOV R6, #00H
CPL P1.7
SAUT1: DJNZ R6, SAUT1
DJNZ R7, SAUT2
RET
ATTENTE
END
Solution 2:
CPU 80515
INCLUDE stddef51
USING bank0
SEGMENT code
ORG 0000H
START:
CPL P1.7
JB P4.7 HAUT
CALL ATTENTE2
SJMP BAS
HAUT : CALL ATTENTE1 Début
BAS : SJMP START
ATTENTE1 :
CPL P1.7
MOV R7, #80H
SAUT2: MOV R6, #00H
SAUT1: DJNZ R6, SAUT1
DJNZ R7, SAUT2 P4.7
RET
ATTENTE2 :
MOV R7, #40H
ATTENTE1 ATTENTE2
SAUT4: MOV R6, #00H
SAUT3: DJNZ R6, SAUT3
DJNZ R7, SAUT4
RET
END
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
EXERCICE I :
Écrire le programme assembleur qui exécute les opérations suivantes :
• Créer le tableau : 01h, 00h, 02h, 00h, 03h, 00h, 04h, 00h.
• Compter le nombre de valeurs nulles.
• Mettre ce nombre dans le registre AX puis dans la pile.
EXERCICE II :
Soit le programme du microcontrôleur 80C535 suivant :
CPU 80515
INCLUDE stddef51
USING bank0
SEGMENT code
ORG 0000H
START :
mov R6, #30h
mov 35h, #2Fh
mov P1, #FFh
mov @R0, #50h
nbr : orl AR6, #01010101B
cpl P1
cjne R6, #04, nbr
sjmp start
END
Solution :
EXERCICE I :
DOSSEG
.MODEL SMALL
.STACK 0100H
.DATA
T1 DB 01H, 00H, 02H, 00H, 03H, 00H, 04H, 00H
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AH, 00H
MOV BX, OFFSET T1
MOV AL, 08H
MOV CX, AL
SORTIE: CMP [BX], 00H
JNZ S1
JMP S2
S1: DEC AX
S2: INC BX
LOOP SORTIE
PUSH AX
MOV AX, 4C00H
INT 21H
END START
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
EXERCICE II :
; Programme principal
START:
mov R6, #30h ; Mettre 30H dans le reistreR6
END
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
• Compter le nombre de valeurs non nulles dans cette série (lire les
données à partir de la mémoire).
• Ranger ce nombre dans la pile.
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Solution:
EXERCICE 3:
DOSSEG
.MODEL SMALL
.STACK 0100H
.DATA
T1 DW 1001H, 0000H, 2002H, 0000H, 0A003H, 0000H, 1F04H, 0000H
.CODE
START:
MOV AX, @DATA
MOV DS, AX
MOV AH, 00H
MOV BX, OFFSET T1
MOV AL, 8
MOV CX, AX
SORTIE: CMP [BX], 0000H
JNE S1
DEC AL
S1: ADD BX, 2
LOOP SORTIE
MOV AX, 4C00H
INT 21H
END START
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Exercice I :
1. Quelle est la différence entre une interruption matérielle et une interruption
logicielle ?
2. Donner les étapes de traitement d’une interruption matérielle
3. Pour un microcontrôleur 80C535, préciser l’emplacement dans la mémoire des
bases (banks) de registres généraux en donnant leur nombre.
4. Donner quelques exemples de registres SFR.
Exercice II :
aAbBcC…zZ
L’affichage du caractère doit être traité sous forme d’un sous programme.
Exercice III :
EXERCICE II:
Solution1 : Solution2 :
DOSSEG DOSSEG
.MODEL SMALL .MODEL SMALL
.CODE .CODE
START: START:
MOV AL, 61H MOV AL, 61H
SAUT: SAUT:
MOV DL, AL MOV DL, AL
CALL AFFICHAGE CALL AFFICHAGE
ADD DL, 20H AND DL, 0DFH
CALL AFFICHAGE CALL AFFICHAGE
INC AL ADD AL, 20H
CMP AL, 7AH INC AL
JBE SAUT CMP AL, 7AH
MOV AX, 4C00H JBE SAUT
INT 21H MOV AX, 4C00H
AFFICHAGE PROC NEAR INT 21H
MOV AH, 02H AFFICHAGE PROC NEAR
INT 21H MOV AH, 02H
RET INT 21H
AFFICHAGE ENDP RET
END START AFFICHAGE ENDP
END START
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Exercice III :
1. Programme principal
2.1. Attente1 : 33,55 s
Début
Début
P1.7← 0B
R7← 80H
ATTENTE1
R6← 00H
CPL P1.7
2.2. Attente2 : 32,80
R5← 00H
Début
ATTENTE2
R5← R5 - 1 Non
R7← 40H R5 = 0
Oui
R6← 00H
R6← R6 - 1 Non
R6 = 0
Non R7← R7 - 1
Oui
R7 = 0
Retour au
Oui programme
Retour au
programme
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
3.
CPU 80515
INCLUDE stddef51
USING bank0
SEGMENT code
ORG 0000H
START:
MOV P1.7, #0B
CALL ATTENTE1
CPL P1.7
CALL ATTENTE2
SJMP START
ATTENTE1 :
MOV R7, #80H
SAUT3: MOV R6, #00H
SAUT2: MOV R5, #00H
SAUT1: DJNZ R5, SAUT1
DJNZ R6, SAUT2
DJNZ R7, SAUT3
RET
ATTENTE2 :
MOV R7, #40H
SAUT5: MOV R6, #00H
SAUT4: DJNZ R6, SAUT4
DJNZ R7, SAUT5
RET
END
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
EXERCICE I :
EXERCICE II :
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
Exercice Supplémentaire :
On considère 8 diodes LED connectées sorties du port P1.
On souhaite faire défiler, sans arrêt, les 8 diodes suivant deux périodes
différentes.
Solution
CPU 80515
INCLUDE stddef51
USING bank0
SEGMENT code
ORG 0000H
START:
MOV A, #FEH
SAUT3: MOV R7, #80H
SAUT4 : MOV P1, A
CALL ATTENTE
JB P4.6 SAUT1
RL A
SJMP SAUT2
SAUT1 : RR A
SAUT2 : JB P4.7, SAUT3
MOV R7, #40H
SJMP SAUT4 Début
ATTENTE :
S2: MOV R6, #00H A← 11111110B
S1: DJNZ R6, S1
DJNZ R7, S2
RET R7← 80H
END
P1← A
ATTENTE
Gauche Droite
P4.6
RL A RR A
Registres de segment : servent souvent pour spécifier, lors d’une écriture où lecture,
le segment de mémoire ou il faut effectuer l’opération.
CS (Code Segment) : c’est le bloc de mémoire qui contient le programme ou le code
en cours d’exécution
DS (Data Segment) : la zone mémoire où se trouvent les données du programme
SS (Stack Segment) : Zone de la pile dans la quelle la CPU stocke des données
relatives aux opérations utilisant la pile ; y compris les appels de procédures et les
interruptions
ES (Extra Segment) : un segment supplémentaire pouvant recevoir des données.
Registre de travail :
IP (Instruction Pointer) : Ce registre est associé au registre de segment CS pour
indiquer la prochaine instruction à exécuter. Ce registre ne pourra jamais être modifié
directement par les instructions de saut, par les programmes et par les interruptions.
Registre de flags (PSW) : appelé aussi registre condition, constitue des drapeaux
(flags) qui indiquent certains états particuliers. Ces bits indicateurs peuvent être testés
pour déterminer la suite du déroulement du programme.
CF : il sera mis à 1 s’il’ y a eu retenue lors de la dernière instruction arithmétique.
PF : l’indicateur mis à 1 si le résultat d’une opération contient un nombre pair de bits
1.
AF : c’est la retenue de poids 24 utilisée lors d’opérations arithmétiques décimales.
ZF : il sera mis à 1 si le résultat d’une instruction arithmétique à donné zéro.
SF : il sera mis à 1 si le résultat d’une instruction à donné un nombre négatif.
OF : il sera mis à 1 si le résultat d’une addition de 2 nombres positifs donne un
nombre négatif est inversement.
DF : est un indicateur utilisé lors de la manipulation de chaînes de caractère.
IF : autorise ou non la prise en compte des interruptions externes masquables.
TF : assure la visualisation du contenu des registres et le fonctionnement pas à pas.
Le bit est positionné à 1.
X X X X OF DF IF TF SF ZF X AF X PF X CF
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
INSTRUCTIONS ARITHMETIQUES
ADD Addition
ADC Addition avec retenue
INC Incrémentation de 1
AAA Ajustement ASCII pour l'addition
DAA Ajustement BCD pour l'addition
SUB Soustraction
SBB Soustraction avec retenue
DEC Décrémentation de 1
NEG Complément à 2
CMP Comparaison
AAS Ajustement ASCII pour la soustraction
DAS Ajustement BCD pour la soustraction
CMP Comparaison
NOT Inversion logique
AND ET logique
OR OU inclusif
XOR OU exclusif
TEST ET logique sans résultat (positionne les indicateurs)
Décalages :
Rotations :
INSTRUCTIONS DE BRANCHEMENT
Branchements conditionnels :
Indicateurs
Arithmétique signée
Branchements inconditionnels :
Boucles :
LOOP Boucle
LOOPE/LOOPZ Boucle si égal / si zéro
LOOPNE/LOOPNZ Boucle si pas égal / si pas zéro
JCXZ Branchement si CX = 0
Interruptions :
INT Interruption
INTO Interruption si overflow
IRET Retour d'interruption
Université Sidi Mohamed Ben Abdellah
Faculté des Sciences et Techniques
Département Génie Industriel
MOV Transfert
PUSH Chargement de la pile
POP Déchargement de la pile
XCHG Echange
XLAT Translation d'octet
Adresses :
Indicateurs :
Entrées – sorties :