USTHB ARCHI 2
FEI / Dépt Informatique L2A / 2020-2021
Série d’exercices n° 2
(Interruptions et Entrées/Sorties)
Exercice 1 :
Dans l'environnement Debug, soit l'appel à la routine d’interruption suivante :
-a 0C9B:0100
0C9B:0100 int 1C
0C9B:0102 nop
0C9B:0103
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS=0C9B IP=0100 NV UP EI PL NZ NA PO NC
0C9B:0100 CD1C INT 1C
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP= BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS= IP=
020C:06AD EB9D JMP 064C
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP= BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS=020C IP=064C NV UP DI PL NZ NA PO NC
PUSH DS
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP= BP=0000 SI=0000 DI=0000
DS= ES=0C9B SS=0C9B CS=020C IP=064D NV UP DI PL NZ NA PO NC
020C:064D 50 PUSH AX
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP= BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS=020C IP=064E NV UP DI PL NZ NA PO NC
020C:064E B84000 MOV AX,0040
-t
AX= BX=0000 CX=0000 DX=0000 SP= BP=0000 SI=0000 DI=0000
DS= ES=0C9B SS=0C9B CS=020C IP=0651 NV UP DI PL NZ NA PO NC
020C:0651 8ED8 MOV DS,AX
-t
AX= BX=0000 CX=0000 DX=0000 SP= BP=0000 SI=0000 DI=0000
DS= ES=0C9B SS=0C9B CS=020C IP=0653 NV UP DI PL NZ NA PO NC
020C:0653 F70614030024 TEST WORD PTR [0314],2400 DS:0314=3000
-t
AX=0040 BX=0000 CX=0000 DX=0000 SP= BP=0000 SI=0000 DI=0000
DS=0040 ES=0C9B SS=0C9B CS=020C IP=0659 NV UP DI PL NZ NA PE NC
020C:0659 754F JNZ 06AA
-t
AX=0040 BX=0000 CX=0000 DX=0000 SP= BP=0000 SI=0000 DI=0000
DS=0040 ES=0C9B SS=0C9B CS=020C IP=
POP AX
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP= BP=0000 SI=0000 DI=0000
DS=0040 ES=0C9B SS=0C9B CS=020C IP=06AB NV UP DI PL NZ NA PE NC
1F POP DS
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP= BP=0000 SI=0000 DI=0000
M.S AYACHE Page 1
DS= ES=0C9B SS=0C9B CS=020C IP=06AC NV UP DI PL NZ NA PE NC
020C:06AC CF IRET
-q
a) Déduire la représentation exacte du vecteur d’interruption (adresses et contenu) de
l’interruption traitée dans cet exercice.
Solution de la question (a)
Table des vecteurs d'interruptions
0000:0000 .
. .
. .
0000:0070 06AD vecteur 1CH
0000:0072 020C
. .
. .
. .
b) Compléter tous les espaces vides dans la routine (cs, ip, ss, sp, bits d’état, …)
Solution de la question (b)
-a 0C9B:0100
0C9B:0100 int 1C
0C9B:0102 nop
0C9B:0103
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS=0C9B IP=0100 NV UP EI PL NZ NA PO NC
0C9B:0100 CD1C INT 1C
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS=020C IP= 06A NV UP DI PL NZ NA PO NC
020C:06AD EB9D JMP 064C D
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS=020C IP=064C NV UP DI PL NZ NA PO NC
020C:064C 1E PUSH DS
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFE6 BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS=020C IP=064D NV UP DI PL NZ NA PO NC
020C:064D 50 PUSH AX
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFE4 BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS=020C IP=064E NV UP DI PL NZ NA PO NC
020C:064E B84000 MOV AX,0040
-t
AX=0040 BX=0000 CX=0000 DX=0000 SP=FFE4 BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS=020C IP=0651 NV UP DI PL NZ NA PO NC
020C:0651 8ED8 MOV DS,AX
M.S AYACHE Page 2
-t
AX=004 BX=0000 CX=0000 DX=0000 SP=FFE4 BP=0000 SI=0000 DI=0000
0
DS=004 ES=0C9B SS=0C9B CS=020C IP=0653 NV UP DI PL NZ NA PO NC
0
020C:0653 F70614030024 TEST WORD PTR [0314],2400 DS:0314=3000
-t
AX=0040 BX=0000 CX=0000 DX=0000 SP=FFE4 BP=0000 SI=0000 DI=0000
DS=0040 ES=0C9B SS=0C9B CS=020C IP=0659 NV UP DI PL NZ NA PE NC
020C:0659 754F JNZ 06AA
-t
AX=0040 BX=0000 CX=0000 DX=0000 SP=FFE4 BP=0000 SI=0000 DI=0000
DS=0040 ES=0C9B SS=0C9B CS=020C IP= 06AA NV UP DI PL NZ NA PE NC
020C:06AA 58 POP AX
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFE6 BP=0000 SI=0000 DI=0000
DS=0040 ES=0C9B SS=0C9B CS=020C IP=06AB NV UP DI PL NZ NA PE NC
020C:06AB 1F POP DS
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFE8 BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS=020C IP=06AC NV UP DI PL NZ NA PE NC
020C:06AC CF IRET
-q
c) Si à la place de la commande q, on lance la commande t, donner alors le contexte que l’on est
sensé obtenir.
Solution de la question (c)
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP FFE8 BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS=020C IP=06AC NV UP DI PL NZ NA PE NC
020C:06AC CF IRET
-t
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C9B ES=0C9B SS=0C9B CS=0C9B IP=0102 NV UP EI PL NZ NA PO NC
0C9B:0102 90 NOP
Exercice 2 :
Montrer à l'aide de l'interruption 21H comment installer le vecteur d’interruption numéro 93H
correspondant à la routine d’interruption qui est chargée en mémoire centrale à l’adresse
789A :0102
Solution de l'exercice 2
mov ax , 789Ah
mov ds , ax
mov dx , 0102h
mov al , 93h
mov ah , 25h
int 21h
M.S AYACHE Page 3
Exercice 3 :
Ecrire en assembleur le code de la procédure FAR appelée MON_INSTALL qui reçoit en entrée les
mêmes paramètres que la fonction de l'interruption 21H utilisée dans l'exercice précédent. Votre
procédure optimisée dans son écriture doit réaliser l'installation d'un vecteur d'interruption sans
toutefois utiliser l'interruption 21H.
Solution de l'exercice 3
mov ax , 789ah MON_INSTALL PROC FAR
mov ds , ax push ax
mov dx , 0102h push bx
mov al , 93h push si
call far ptr MON_INSTALL mov si , ds
mov bx , 0
mov bl , al
mov cl , 2
shl bx , cl
mov ax , 0
mov ds , ax
mov [bx] , dx
mov [bx+2] , si
mov ds , si
pop si
pop bx
pop ax
ret
MON_INSTALL ENDP
Exercice 4 :
Ecrire une séquence d’instructions qui permet de dérouter l’interruption 1CH sur une routine
d’interruption vide.
Solution de l'exercice 4
Prog principal
. ; code routine d'IT 1CH
. new: IRET
; déroutement de la routine d'IT 1CH
mov ax, seg new
mov ds , ax
mov dx , offset new
mov ax , 251CH
int 21H
.
.
M.S AYACHE Page 4
Exercice 5:
Ecrire un programme modulaire permettant d'afficher sur écran chaque minute le message "Ce
module s'intitule ARCHI 2". Le quantum de temps d'une minute permettant la périodicité de
l'affichage doit être réalisé par matériel ( par requête).
Solution de l'exercice 5
data SEGMENT
msg db "Ce module s'intitule ARCHI 2", 0ah, 0dh, "$"
compt dw 90
data ENDS
ma_pile SEGMENT STACK
dw 256 dup(?)
tos label word
ma_pile ENDS
code SEGMENT
assume CS:code, DS: data
derout_1CH PROC NEAR
derout: mov ax , seg new
mov ds , ax
mov dx , offset new
mov ax , 251CH
int 21H
ret
derout_1CH ENDP
affiche PROC NEAR
mov ax, seg data
mov ds , ax
mov dx , offset msg
mov ah , 09h
int 21h
ret
affiche endp
; routine d'IT 1CH
new: mov ax, seg compt
mov ds , ax
dec compt
jnz fin
call NEARPTR affiche
mov compt , 90
fin: iret
start: mov ax , ma_pile
mov ss , ax
call NEAR PTR derout_1CH
boucle: jmp boucle
code ENDS
END start
M.S AYACHE Page 5
Exercice 6 :
Avec l’introduction d’une pièce de monnaie (5 ou 10 DA), le bit B2 du port 0006H est mis à 1. Le
programme lit alors dans le port 0005H le code de la pièce (B7 du port 0005H =0 si pièce de 5DA, =1
si pièce de 10 DA) et après l’attente de mise à 1 du bit d’état B3 du port 0006H, le programme envoie
les pièces de 1 dinars sur le port 0007H.
Donner le code assembleur de la séquence qui réalise une telle gestion en utilisant la technique
d’entrée/sortie programmée (par scrutation).
0005H Data_in
CPU mémoire
0006H Status
0007H Data_out
Solution de l'exercice 6
debut: mov cx , 5
attendre: in al , 06H
test al , 4
jz attendre
in al , 05H
test al , 80H
jz cinq
mov cx , 10
cinq: in al , 06H
test al , 08H
jz cinq
mov al , 1
out 07H , al
loop cinq
jmp debut
M.S AYACHE Page 6
Exercice 7 :
Refaire l’exercice précédent en utilisant la technique d’E/S par interruption. L’introduction d’une
pièce de monnaie provoque l’interruption N° 150.
Solution de l'exercice 7
; cette routine est exécutée à chaque introduction
; d'une pièce de monnaie
debut: mov cx , 5 ; installation du vecteur 150
; cette séquence est exécutée une seule fois
in al , 05H
;avant l'introduction de la 1ère pièce de monnaie
test al , 80H
jz cinq mov ax , seg debut
mov cx , 10 mov ds , ax
cinq: in al , 06H lea dx , debut
test al , 08H mov al , 150
jz cinq mov ah , 25H
mov al , 1 int 21H
out 07H , al
loop cinq
IRET
Exercice 8 :
Il s’agit de gérer les E/S pour trois unités externes par la méthode Round Robbin (gestion circulaire
des E/S). A cet effet, on suppose que :
Unité 1 : unité d’entrée
@port d’état : 52H
Bit B3 = 1 si donnée prête, 0 sinon
@ port d’entrée : 53H
200 données envoyées par l'unité 1
Unité 2 : unité d’entrée
@port d’état : B648H
Bit B5 = 0 si donnée prête, 1 sinon
@ port d’entrée : B649H
100 données envoyées par l'unité 2
Unité 3 : unité de sortie
@port d’état : 55H
Bit B3 = 1 si port de sortie vide, 0 sinon
@ port de sortie : 56H
75 données à envoyer à l'unité 3
L'ordre du polling étant unité2, unité3, unité1 et les procédures de traitement pour ces unités sont
respectivement service2, service3, service1. Les trois procédures sont intrasegment.
Solution de l'exercice 8
data SEGMENT
Flag db 3
buffer1 db 200 DUP(?)
buffer2 db 100 DUP(?)
buffer3 db 75 DUP(?)
compt1 dw ?
compt2 dw ?
compt3 dw ?
data ENDS
M.S AYACHE Page 7
code SEGMENT
assume cs: code, ds: data
service1 PROC NEAR
in al , 53H
mov [bx] , al
inc bx
dec compt1
jnz suite1
dec flag
suite1: ret
service1 ENDP
service2 PROC NEAR
inc dx
in al , dx
mov [si] , al
inc si
dec compt2
jnz suite2
dec flag
suite2: ret
service2 ENDP
service3 PROC NEAR
mov al , [di]
out 56H , al
inc di
dec compt3
jnz suite3
dec flag
suite3: ret
service3 ENDP
start: mov ax, data
mov ds , ax
mov bx , offset buffer1
mov si , offset buffer2
mov di , offset buffer3
mov compt1, length buffer1
mov compt2, length buffer2
mov compt3, length buffer3
retour: cmp compt2 , 0
jz unite3
mov dx , 0B648H
in al , dx
test al , 00100000B
jnz unite3
call NEAR PTR service2
unite3: cmp compt3 , 0
M.S AYACHE Page 8
jz unite1
in al, 55H
test al , 00001000B
jz unite1
call NEAR PTR service3
unite1: cmp compt1 , 0
jz fin
in al , 52H
test al , 0001000B
jz unite3
call NEAR PTR service1
fin: cmp flag , 0
jnz retour
mov ax , 4c00H
int 21H
code ENDS
END start
Exercice 9 :
Le circuit d’interface prévue pour la commande d’un moteur pas à pas présente une entrée direction
permettant de spécifier dans quel sens doit se faire la rotation et d’une entrée d’horloge ; le moteur
effectue un pas à chaque impulsion d’horloge.
Le circuit d’interface dispose de deux ports :
Le port d’adresse 2250H sert à indiquer le sens de la rotation (gauche si B0=1, droit si B0=0)
Le port d’adresse 2251H sert à indiquer le nombre de pas à effectuer (1 pas = 0,5 degré).
Ecrire une séquence d’instructions en assembleur qui permet de faire une rotation de 36° à gauche
suivi d’une rotation à droite de 50° à droite.
Solution de l'exercice 9
mov dx , 2250H
in al , dx
or al , 1
out dx , al
inc dx
mov al , 72
out dx , al
dec dx
in al , dx
and al , 0FEH
out dx , al
inc dx
mov al , 100
out dx , al
Exercice 10 :
Le port d’entrée 11CH du circuit d’interface ARCHI2012 reçoit ses données à partir d’un système à
deux relais. A chaque demande d’IT provoquée par ce circuit d’interface, le microprocesseur lit le
port d’entrée dans AL et transmet à l’imprimante le message :
« FONCTIONNEMENT NORMAL » si les deux relais sont ouverts
« CHANGER POMPE A » si le relais A est fermé et le relais B est ouvert
M.S AYACHE Page 9
« CHANGER POMPE B » si le relais A est ouvert et le relais B est fermé
« ARRET IMMEDIAT » si les deux relais sont fermés.
Les états des relais A et B sont indiqués respectivement par les bits 3 et 6 du port d’entrée 11CH. Si le
bit 3 ou 6 est à zéro, le relais correspondant est alors ouvert, sinon il est fermé.
Le circuit ARCHI2012 n’envoie des demandes d’IT en cas de changement de l’état des relais que s’il a
été initialisé au préalable en programmant son bit B2 du port de contrôle 11BH à 1.
L’état prêt de l’imprimante est signalé au microprocesseur par le bit B7 du port 70H (B7=1 indique
imprimante libre, 0 imprimante occupée) et son port de sortie a l’adresse 74H.
a) Ecrire une routine d’IT qui lit le port 11CH puis utilise la technique d’E/S programmée pour
l’impression des différents messages de l’intérieur de la routine d’IT appelée par ARCHI2012.
b) Modifier le code de la question (a) de telle sorte que l’impression des messages se fasse dans
une autre routine d’IT ayant le numéro 80H appelée à partir de la première routine.
NOTE:
Le nombre d'exercices qui seront discutés et solutionnés en TD dépendra du temps alloué, l'étudiant
est invité à traiter le reste des exercices en dehors des séances de TD.
Mr AYACHE
M.S AYACHE Page 10