Professional Documents
Culture Documents
Problme I
crire un programme en assembleur qui effectue les oprations suivantes :
1. Chargement dans la mmoire des donnes suivantes
1re colonne
dernire colonne
4. Retour au DOS
Problme II
Linterfaage entre un afficheur LCD et le port parallle dun PC est ralis comme le montre la
figure ci-dessous :
Port Parallle
D0
D1
D2
D3
D4
D5
D6
D7
D0
D1
D2
D3
D4
D5
D6
D7
Afficheur LCD
Vcc
E
R/W
RS
Vcc
strobe
Select
printer
Avec :
E (Enable) marche sur front descendant permettant la saisie de la donne afficher.
RS (Registre Select) travaille au niveau bas validant lafficheur.
a. Faire un organigramme qui permet dafficher la srie 00h FFh. Laffichage de chaque
donne dure 1s. Justifier les diffrentes tapes ainsi que les valeurs dinitialisation des
registres.
b. Traduire lorganigramme en langage C.
Problme I :
DOSSEG
.MODEL SMALL
.STACK
.DATA
0100H
.CODE
START:
MOV AX,
@DATA
MOV AH,
00H
MOV CX,
MOV DS,
MOV BX,
AX
OFFSET T1
SORTIE: PUSH AX
INC BX
LOOP BOUCLE
MOV AX,
INT 21H
END START
4C00H
Les 3 oprations doivent tre rptes 5 fois, avant deffectuer le retour au DOS.
On mettra lopration 1 en sous programme.
.MODEL SMALL
.CODE
START:
MOV CX,
05H
CALL SAISIE
ADD DL, AL
LOOP BOUCLE
RET
SAISIE ENDP
END START
Le code ASCII reprsente chaque caractre sur 8 bits (1 octet). Le chiffre de poids fort
est toujours gal 0. Les codes des lettres alphabtiques minuscules se suivent et
varient de 61h 7Ah. Lorsque le 6me bit passe 0 le caractre prend la forme
majuscule.
1. Mettre dans la pile les codes ASCII de toutes les lettres minuscules (a z).
2. Transformer les caractres minuscules en caractres majuscules en les affichant
un par un.
3. Retourner au DOS.
DOSSEG
.MODEL SMALL
.STACK
.CODE
START:
0100H
SAUT: PUSH AX
INC AX
JBE SAUT
TRANSFORMATION ENDP
END START
2. Effectuer les oprations suivantes, sur 4 bits, et prciser les valeurs des indicateurs
CF, ZF, SF, OF, et PF :
1010 + 0101
et
0111 + 0001
.MODEL SMALL
.STACK 0100H
.DATA
.CODE
START:
BOUCLE:
LOOP BOUCLE
PUSH AX
END START
.MODEL SMALL
.STACK 0100H
.DATA
.CODE
START:
JNZ S1
JMP S2
S1: DEC AL
S2: INC BX
LOOP SORTIE
PUSH AX
INT 21H
END START
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]
.MODEL SMALL
.STACK 0100H
.DATA
.CODE
START:
MOV CX, AL
JMP S2
S1: DEC AL
S2: INC BX
LOOP SORTIE
END START
.MODEL SMALL
.STACK 0100H
.DATA
.CODE
START:
MOV CX, AL
DEC AL
S2: INC BX
LOOP SORTIE
INT 21H
END START
1. Donner la position des indicateurs CF, ZF, SF, PF et OF la fin de lexcution des
instructions suivantes :
2. Quelle est la procdure suivie par le processeur lors de lappel dun sous
programme passage de paramtre par la pile.
Faire l'addition de toutes les colonnes et ranger dans la pile les lments des
colonnes qui donnent comme rsultat la valeur 6.
.MODEL SMALL
.STACK 0100H
.DATA
.CODE
START:
PUSH [BX]
PUSH [BX+8]
S1: INC BX
LOOP SORTIE
INT 21H
END START
Exercice I :
Exercice II :
Exercice II :
DOSSEG
JA S2
.STACK 0100 H
S2:
.MODEL SMALL
.DATA
VAR1 DB 01H
VAR2 DB 04H
.CODE
VAR3 DB 03H
PUSH AX
START:
MOV CX, 3
MOV DS, AX
S3:
MOV AL,[BX]
PUSH AX
INC BX
JA S1
LOOP S3
INT 21H
S1:
END START
SP
F6h
SP
F8h
SP
FAh
SP
FCh
SP
FEh
SP 100h
0003
0004
0001
0008
0003
Exercice I :
1. Quelle est la diffrence entre une interruption matrielle et une interruption
logicielle ?
Exercice II :
Faire un programme en assembleur qui affiche les lettres de lalphabet en minuscule et
en majuscule comme le montre lexemple ci-dessous :
aAbBcCzZ
DOSSEG
.CODE
.CODE
.MODEL SMALL
START:
.MODEL SMALL
START:
SAUT:
SAUT:
MOV DL, BL
MOV DL, AL
CALL AFFICHAGE
CALL AFFICHAGE
CALL TRANSFORMATION
CALL TRANSFORMATION
CALL AFFICHAGE
CALL AFFICHAGE
INC BL
INC AL
JBE SAUT
JBE SAUT
INT 21H
INT 21H
RET
INT 21H
AFFICHAGE ENDP
AFFICHAGE ENDP
RET
TRANSFORMATION ENDP
TRANSFORMATION ENDP
END START
RET
END START
Exercice I :
1. Prciser le rle de chacun des registres suivants :
CS, DS, SP et IP
Exercice II :
1. crire un programme en assembleur qui excute les oprations suivantes:
Mettre dans la pile les valeurs ci-dessous dans cet ordre :
18h, 11h, 29h, 04h, 20h
Lire les donnes partir de la pile en les comparants. Ranger la valeur la plus
grande dans le registre DX
.MODEL SMALL
.STACK 0100H
.DATA
.CODE
START:
PUSH AX
LOOP SORTIE
POP DX
POP AX
CMP DL, AL
JA S1
MOV DL, AL
FIN:
JMP S1
INT 21H
END START
PARTIE I :
1. Rappeler brivement tous les registres du 80x86 en prcisant le rle de chacun des
registres.
PARTIE II :
microcontrleur 80C535. On souhaite faire clignoter, sans arrt, la diode suivant deux
priodes diffrentes. Le choix de la priode se fait laide dune commande externe
(interrupteur) connecte lentre 7 du port 4.
Justifier le choix des valeurs mettre dans les registres pour avoir la priode voulue.
PARTIE II :
DOSSEG
.MODEL SMALL
.CODE
START:
MOV DL,
MOV CX,
00H
04H
MOV DL, AL
SAUT:
LOOP BOUCLE
INT 21H
SAISIE ENDP
END START
80515
stddef51
bank0
code
0000H
Dbut
R7 80H
ATTENTE :
SAUT2:
MOV R6, #00H
SAUT1:
DJNZ R6, SAUT1
DJNZ R7, SAUT2
RET
END
CPL P1.7
ATTENTE
R7 40H
Bas
P4.7
Haut
Solution 2:
CPU
INCLUDE
USING
SEGMENT
ORG
START:
HAUT :
BAS :
ATTENTE1 :
SAUT2:
SAUT1:
ATTENTE2 :
SAUT4:
SAUT3:
END
80515
stddef51
bank0
code
0000H
CPL P1.7
JB P4.7 HAUT
CALL ATTENTE2
SJMP BAS
CALL ATTENTE1
SJMP START
Dbut
CPL P1.7
P4.7
ATTENTE1
ATTENTE2
EXERCICE I :
crire le programme assembleur qui excute les oprations suivantes :
Crer 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 microcontrleur 80C535 suivant :
CPU
INCLUDE
USING
SEGMENT
ORG
START :
nbr :
END
80515
stddef51
bank0
code
0000H
EXERCICE I :
DOSSEG
.MODEL SMALL
.STACK 0100H
.DATA
.CODE
START:
JNZ S1
JMP S2
S1: DEC AX
S2: INC BX
LOOP SORTIE
PUSH AX
END START
80515
INCLUDE
stddef51
USING
bank0
ORG
0000H
SEGMENT
;
code
Programme principal
START:
END
; Complmenter le port 1
Compter le nombre de valeurs non nulles dans cette srie (lire les
donnes partir de la mmoire).
Ranger ce nombre dans la pile.
.MODEL SMALL
.STACK 0100H
.DATA
.CODE
START:
MOV CX, AX
DEC AL
LOOP SORTIE
INT 21H
END START
Exercice I :
1. Quelle est la diffrence entre une interruption matrielle et une interruption
logicielle ?
2. Donner les tapes de traitement dune interruption matrielle
3. Pour un microcontrleur 80C535, prciser lemplacement dans la mmoire des
bases (banks) de registres gnraux en donnant leur nombre.
4. Donner quelques exemples de registres SFR.
Exercice II :
Laffichage du caractre doit tre trait sous forme dun sous programme.
Exercice III :
priode suivante :
EXERCICE II:
Solution1 :
Solution2 :
DOSSEG
DOSSEG
.CODE
.CODE
.MODEL SMALL
START:
.MODEL SMALL
START:
SAUT:
SAUT:
MOV DL, AL
MOV DL, AL
CALL AFFICHAGE
CALL AFFICHAGE
CALL AFFICHAGE
CALL AFFICHAGE
INC AL
JBE SAUT
INT 21H
INT 21H
RET
AFFICHAGE ENDP
END START
INC AL
JBE SAUT
AFFICHAGE ENDP
END START
Dbut
Dbut
P1.7 0B
R7 80H
ATTENTE1
R6 00H
CPL P1.7
ATTENTE2
R7 40H
R6 00H
R5 00H
R5 R5 - 1
R5 = 0
Oui
R6 R6 - 1
R6 = 0
Non
Non
R6 R6 - 1
R6 = 0
Oui
R7 R7 - 1
R7 = 0
Oui
Retour au
programme
Oui
R7 R7 - 1
R7 = 0
Oui
Retour au
programme
Non
Non
Non
80515
INCLUDE
USING
SEGMENT
ORG
START:
ATTENTE1 :
SAUT3:
SAUT2:
SAUT1:
ATTENTE2 :
SAUT5:
SAUT4:
END
stddef51
bank0
code
0000H
EXERCICE I :
EXERCICE II :
On souhaite faire dfiler, sans arrt, les 8 diodes suivant deux priodes
diffrentes.
le bit 6 du port 4
CPU
INCLUDE
USING
SEGMENT
ORG
START:
SAUT3:
SAUT4 :
SAUT1 :
SAUT2 :
Solution
80515
stddef51
bank0
code
0000H
MOV A, #FEH
MOV R7, #80H
MOV P1, A
CALL ATTENTE
JB P4.6 SAUT1
RL A
SJMP SAUT2
RR A
JB P4.7, SAUT3
MOV R7, #40H
SJMP SAUT4
Dbut
ATTENTE :
S2:
MOV R6, #00H
S1:
DJNZ R6, S1
DJNZ R7, S2
RET
A 11111110B
R7 80H
END
P1 A
ATTENTE
Gauche
P4.6
RL A
R7 40H
Bas
Droite
RR A
P4.7
Haut
Registres de segment : servent souvent pour spcifier, lors dune criture o lecture,
le segment de mmoire ou il faut effectuer lopration.
CS (Code Segment) : cest le bloc de mmoire qui contient le programme ou le code
en cours dexcution
DS (Data Segment) : la zone mmoire o se trouvent les donnes du programme
SS (Stack Segment) : Zone de la pile dans la quelle la CPU stocke des donnes
relatives aux oprations utilisant la pile ; y compris les appels de procdures et les
interruptions
ES (Extra Segment) : un segment supplmentaire pouvant recevoir des donnes.
Registre de flags (PSW) : appel aussi registre condition, constitue des drapeaux
(flags) qui indiquent certains tats particuliers. Ces bits indicateurs peuvent tre tests
pour dterminer la suite du droulement du programme.
CF : il sera mis 1 sil y a eu retenue lors de la dernire instruction arithmtique.
PF : lindicateur mis 1 si le rsultat dune opration contient un nombre pair de bits
1.
AF : cest la retenue de poids 24 utilise lors doprations arithmtiques dcimales.
ZF : il sera mis 1 si le rsultat dune instruction arithmtique donn zro.
SF : il sera mis 1 si le rsultat dune instruction donn un nombre ngatif.
OF : il sera mis 1 si le rsultat dune addition de 2 nombres positifs donne un
nombre ngatif est inversement.
DF : est un indicateur utilis lors de la manipulation de chanes de caractre.
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
OF
DF
IF
TF
SF
ZF
AF
PF
CF
Addition
Addition avec retenue
Incrmentation de 1
Ajustement ASCII pour l'addition
Ajustement BCD pour l'addition
SUB
SBB
DEC
NEG
CMP
AAS
DAS
Soustraction
Soustraction avec retenue
Dcrmentation de 1
Complment 2
Comparaison
Ajustement ASCII pour la soustraction
Ajustement BCD pour la soustraction
MUL
IMUL
AAM
DIV
IDIV
AAD
CBW
CWD
Comparaison
Inversion logique
ET logique
OU inclusif
OU exclusif
ET logique sans rsultat (positionne les indicateurs)
SHL
SAL
SHR
SAR
ROL
ROR
RCL
RCR
Rotation gauche
Rotation droite
Rotation gauche, via le bit de carry
Rotation droite, via le bit de carry
Dcalages :
Rotations :
Si gal / si zro
Si pas gal / si pas zro
Si carry (retenue)
Si pas carry (retenue)
Si overflow (dbordement)
Si pas overflow (dbordement)
Si signe (ngatif)
Si pas de signe (positif)
Si parit / si parit paire
Si pas de parit / si parit impaire
Arithmtique signe
JG/JNLE
JGE/JNL
JL/JNGE
JLE/JNG
Branchements inconditionnels :
JMP
CALL
RET
Saut inconditionnel
Appel de sous-programme
Retour vers le programme principal
Boucles :
LOOP
LOOPE/LOOPZ
LOOPNE/LOOPNZ
JCXZ
Boucle
Boucle si gal / si zro
Boucle si pas gal / si pas zro
Branchement si CX = 0
Interruptions :
INT
INTO
IRET
Interruption
Interruption si overflow
Retour d'interruption
Transfert
Chargement de la pile
Dchargement de la pile
Echange
Translation d'octet
Adresses :
LEA
LDS
LES
Indicateurs :
LAHF
SAHF
PUSHF
POPF
Entres sorties :
IN
OUT
Dplacement de chane
Rptition
Rangement de chane
Chargement de chane
Comparaison de chane
Rptition tant qu'gal zro
Rptition tant que diffrent de zro
Balayage d'une chane
Hexa
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
Hexa
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
Binaire
0000000
0000001
0000010
0000011
0000100
0000101
0000110
0000111
0001000
0001001
0001010
0001011
0001100
0001101
0001110
0001111
0010000
0010001
0010010
0010011
0010100
0010101
0010110
0010111
0011000
0011001
0011010
0011011
0011100
0011101
0011110
0011111
Binaire
1000000
1000001
1000010
1000011
1000100
1000101
1000110
1000111
1001000
1001001
1001010
1001011
1001100
1001101
1001110
1001111
1010000
1010001
1010010
1010011
1010100
1010101
1010110
1010111
1011000
1011001
1011010
1011011
1011100
1011101
1011110
1011111
Caractre
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US
Caractre
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_
Dcimal
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
Dcimal
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
Hexa
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
Hexa
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F
Binaire
0100000
0100001
0100010
0100011
0100100
0100101
0100110
0100111
0101000
0101001
0101010
0101011
0101100
0101101
0101110
0101111
0110000
0110001
0110010
0110011
0110100
0110101
0110110
0110111
0111000
0111001
0111010
0111011
0111100
0111101
0111110
0111111
Binaire
1100000
1100001
1100010
1100011
1100100
1100101
1100110
1100111
1101000
1101001
1101010
1101011
1101100
1101101
1101110
1101111
1110000
1110001
1110010
1110011
1110100
1110101
1110110
1110111
1111000
1111001
1111010
1111011
1111100
1111101
1111110
1111111
Caractre
ESPACE
!
"
#
$
%
&
'
(
)
*
+
,
.
/
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?
Caractre
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL