Tp assembleur
abf
-
Alfa -
Alfa -
Bonjour,
bonjour tous le monde, c'est ma premiere participation à ce forum, je salut tous le monde et je vous souhaite une bonne nouvelle année 2008...
en effet je cherche de l'aide pour realiser mon tp en assembleur.
voici l'enoncé :
Sous le systeme d'exploitation DOS, il existe deux situation dans lesquelles un programme peut etre terminé pratiqment à n'importe quel moment du fait de l'intervention d'événements échappant totalement au contrôle du programme, Ces situation survienent lorsque l'utilisateur actionne la touche <Ctrl_Break> ou bien lorsqu'apparait , lors de l'acce a un peripherique externe (imprimante, disque dur, lecteur de dicquette , etc...), un défaut parteculierement grave. Un arrét brusque du programme ne va pas sans poser de problemes. Le programme se termine par le fait que le DOS reprend le contrôle de l'exucution, de sorte que les instruction normalement exécutéés lors de la fin réguliere du programme se trouvent tout simplement ignioreéés. Ilon resulte que les fichiers ouverte ne sont pas fermes comme il conviendrait, que les vecteurs d'interruption rediriges ne sont pas restaurs et que la memoire allouée n'est pas restaurée. Toutes ces concequences peuvent déboucher sur une perte de données ou meme sur le plantage du systeme
Si pendant l'accés à un disque, un probleme survient (Disquette protégée contre l'ecriture, Unite de disquette non prete, ...), l'interruption 24h est automatiqment déclenchée invoquant une routine qui sort sur l'ecran le message bien connu « (A)bort, (R)etry ,(I)gnore »et attend une entrée de l'utilisateur. Pour pouvoir localiser l'erreur. Le D.O.S transmet à cette routine dans les 8bits de faible poids de DI un code d'erreur:
00h Disquette protégeée contre l'ecteure
01h Acces à un peripherique inconnu
02h Unité de disquette n'est pas préte
03h Ereure inconue
04h Ereure CRC
05h Longueur de données erronnée
06h Erreure de recherche
07h Type de péripherique inconnu
08h Secteur non trouvé
09h Plus de papier dans l'imprimente
0Ah Ereure d'ecriture
0Bh Ereure de lecteure
0Ch Ereure générale
le D.O.S attend alors que lui soit transmis dans le registre AL un code indiquant comment il doit réagir à l'erreure:
00h Igniorer l'erreur
01h Répéter l'operation
02h Terminer le programme à travrs l'interruption 23h
03h Terminer la fonction appelée avec erreur (positionne le flag carry)
Lobjet de ce T.p consistera à écrire un programme redirigeant cette interruption sur routine à lui . De façon à garder le contrôle des évenement lorsq'une erreure critique survient.
La nouvelle rouytine de gestion de l'interuption 24h (Traite_Erreure_critique), ce doit de positionner un flag (flag_Erreure_ critique). D'afficher un message indique le type de d'erreure . Puis de redonner la main au D.O.S avec un code de retoure 03h(Terminer la fonction appéleée)
Apre la rentative ou d'arreter la programme . Dans le derniere cas , unez simulation d'une arrét propre du programme zsera engagée. Le programme pouyrra étre teste en rentant d'ouvrir un fichier
sur une unite disque nonpréte(Exp: disquette inexistant).
1.Commencer par edevelopper les routines et macros suivantes:
Traite_erreure_critiquePROC FAR
Cette vroutine prendra en charge la gestion de l'interruption Erreur_Critique(24).
(Voir description çi dissus)
Redirige_Int MACRO Num_Int , Adr Seg routine ,Adr_ofs_routine
Cette macro ce edoit de modifier léentrée 'Num_Int du vecteur D'intereptions par l'adresse de la routine (dans notre cas Traite_erreure _critique)spesifiée en parametre .
Ouvrire_fichier MACRO nom fichier
Ouvrire le fichier 'nom fichier 'en mode lecteure
cette routine simuler la fonction principale du programme sur le quel sera exprimenté la technique de detournement de l'interruption 24h
Remarque1:
pour le developpement del a macro redige_int, on pourra faire appel à la fonction suivante de l'inturruption 21h
du DOS:
interruption : 21H
num. fonction : 25H
definition cette fonction permet de modifier une adresse dans le vecteur d'interruption pour qu'elle pointe vers une routine particuliére de traitement d'interruption.
Parametres d'entrés:
AH :25H
AL : numéro de l'interruption dont l'adresse dans le vecteur d'interruption sera modifié.
DS DX : segment : offset de la nouvelle routine de traitement de l'interruption dont le num est identique dans AL.
Néant.
Remarque 2:
pour le developpement de la macro 'ouvrir_fichier », on pourra faire appel a la fontion suivante de l'interruption 21h du DOS:
interruption : 21H
num.fontion 3dH
definition :
cette fonction permet d'ouvrir sur un disque un fichier en lecture/ecriture.
Parametres d'entrée:
AH : 3dH
AL : mode d'ouverture du fichier (lecture 0)
DS : DX: segment offset la chaine contenant le nom ainsi que le chemin d'accès du fichier à ouvrir (exp: a:\test.txt)
parametre de sortie :
néant.
2- ecrire le programme final en integrant les rouitines et macros de la question
merci d'avan
bonjour tous le monde, c'est ma premiere participation à ce forum, je salut tous le monde et je vous souhaite une bonne nouvelle année 2008...
en effet je cherche de l'aide pour realiser mon tp en assembleur.
voici l'enoncé :
Sous le systeme d'exploitation DOS, il existe deux situation dans lesquelles un programme peut etre terminé pratiqment à n'importe quel moment du fait de l'intervention d'événements échappant totalement au contrôle du programme, Ces situation survienent lorsque l'utilisateur actionne la touche <Ctrl_Break> ou bien lorsqu'apparait , lors de l'acce a un peripherique externe (imprimante, disque dur, lecteur de dicquette , etc...), un défaut parteculierement grave. Un arrét brusque du programme ne va pas sans poser de problemes. Le programme se termine par le fait que le DOS reprend le contrôle de l'exucution, de sorte que les instruction normalement exécutéés lors de la fin réguliere du programme se trouvent tout simplement ignioreéés. Ilon resulte que les fichiers ouverte ne sont pas fermes comme il conviendrait, que les vecteurs d'interruption rediriges ne sont pas restaurs et que la memoire allouée n'est pas restaurée. Toutes ces concequences peuvent déboucher sur une perte de données ou meme sur le plantage du systeme
Si pendant l'accés à un disque, un probleme survient (Disquette protégée contre l'ecriture, Unite de disquette non prete, ...), l'interruption 24h est automatiqment déclenchée invoquant une routine qui sort sur l'ecran le message bien connu « (A)bort, (R)etry ,(I)gnore »et attend une entrée de l'utilisateur. Pour pouvoir localiser l'erreur. Le D.O.S transmet à cette routine dans les 8bits de faible poids de DI un code d'erreur:
00h Disquette protégeée contre l'ecteure
01h Acces à un peripherique inconnu
02h Unité de disquette n'est pas préte
03h Ereure inconue
04h Ereure CRC
05h Longueur de données erronnée
06h Erreure de recherche
07h Type de péripherique inconnu
08h Secteur non trouvé
09h Plus de papier dans l'imprimente
0Ah Ereure d'ecriture
0Bh Ereure de lecteure
0Ch Ereure générale
le D.O.S attend alors que lui soit transmis dans le registre AL un code indiquant comment il doit réagir à l'erreure:
00h Igniorer l'erreur
01h Répéter l'operation
02h Terminer le programme à travrs l'interruption 23h
03h Terminer la fonction appelée avec erreur (positionne le flag carry)
Lobjet de ce T.p consistera à écrire un programme redirigeant cette interruption sur routine à lui . De façon à garder le contrôle des évenement lorsq'une erreure critique survient.
La nouvelle rouytine de gestion de l'interuption 24h (Traite_Erreure_critique), ce doit de positionner un flag (flag_Erreure_ critique). D'afficher un message indique le type de d'erreure . Puis de redonner la main au D.O.S avec un code de retoure 03h(Terminer la fonction appéleée)
Apre la rentative ou d'arreter la programme . Dans le derniere cas , unez simulation d'une arrét propre du programme zsera engagée. Le programme pouyrra étre teste en rentant d'ouvrir un fichier
sur une unite disque nonpréte(Exp: disquette inexistant).
1.Commencer par edevelopper les routines et macros suivantes:
Traite_erreure_critiquePROC FAR
Cette vroutine prendra en charge la gestion de l'interruption Erreur_Critique(24).
(Voir description çi dissus)
Redirige_Int MACRO Num_Int , Adr Seg routine ,Adr_ofs_routine
Cette macro ce edoit de modifier léentrée 'Num_Int du vecteur D'intereptions par l'adresse de la routine (dans notre cas Traite_erreure _critique)spesifiée en parametre .
Ouvrire_fichier MACRO nom fichier
Ouvrire le fichier 'nom fichier 'en mode lecteure
cette routine simuler la fonction principale du programme sur le quel sera exprimenté la technique de detournement de l'interruption 24h
Remarque1:
pour le developpement del a macro redige_int, on pourra faire appel à la fonction suivante de l'inturruption 21h
du DOS:
interruption : 21H
num. fonction : 25H
definition cette fonction permet de modifier une adresse dans le vecteur d'interruption pour qu'elle pointe vers une routine particuliére de traitement d'interruption.
Parametres d'entrés:
AH :25H
AL : numéro de l'interruption dont l'adresse dans le vecteur d'interruption sera modifié.
DS DX : segment : offset de la nouvelle routine de traitement de l'interruption dont le num est identique dans AL.
Néant.
Remarque 2:
pour le developpement de la macro 'ouvrir_fichier », on pourra faire appel a la fontion suivante de l'interruption 21h du DOS:
interruption : 21H
num.fontion 3dH
definition :
cette fonction permet d'ouvrir sur un disque un fichier en lecture/ecriture.
Parametres d'entrée:
AH : 3dH
AL : mode d'ouverture du fichier (lecture 0)
DS : DX: segment offset la chaine contenant le nom ainsi que le chemin d'accès du fichier à ouvrir (exp: a:\test.txt)
parametre de sortie :
néant.
2- ecrire le programme final en integrant les rouitines et macros de la question
merci d'avan
A voir également:
- Tp assembleur
- Logiciel assembleur - Télécharger - Édition & Programmation
- Tp corrigé assembleur 8086 - Forum Programmation
- Http //192.168.l.0.254 tp link extender - Forum Réseau
- Répéteur tp-link connecté mais pas d'accès internet ✓ - Forum WiFi
- Tp-link perte de connexion - Forum Matériel & Système
9 réponses
Bonjour, bienvenue sur ce forum et bonnes fêtes à toi aussi.
Ton post ne contient aucune question (à part celles de ton prof).
Quel est ton problème ?
Le site est un site d'information et d'assistance, a priori il n'est pas destiné à faire les devoir des étudiants.
Commences par travailler sur le sujet et ensuite nous serons heureux de t'aider sur les problèmes que tu rencontres.
Si ton problème est un problème de compréhension générale de l'énoncé de l'exercice, fais nous le savoir et nous te dirigerons vers les tutoriels adaptés.
Cordialement
Ton post ne contient aucune question (à part celles de ton prof).
Quel est ton problème ?
Le site est un site d'information et d'assistance, a priori il n'est pas destiné à faire les devoir des étudiants.
Commences par travailler sur le sujet et ensuite nous serons heureux de t'aider sur les problèmes que tu rencontres.
Si ton problème est un problème de compréhension générale de l'énoncé de l'exercice, fais nous le savoir et nous te dirigerons vers les tutoriels adaptés.
Cordialement
Dans l'énoncé, le flag "flag_Erreure_ critique" désigne une variable que tu dois créer dans le programme et qui pourra contenir la valeur vrai ou faux. Un bit suffit, ici, puisqu'aucune autre variable de type bit n'est nécessaire, tu peux réserver un octet et y placer la valeur 1(pour vrai) ou 0 (pour faux).
merci beaucoup pascal. barbier
pour tout les if3, j'ai trouvé une solution (pas définitive) c cellle ci:
redirection vers la routine traite_erreur_critique
redirige_int macro num_int, adr_ofs_routine
mov ds, adr_ofs_routine
mov al,num_int
mov ah,25h
int 21
endm;
;*********************************
ouvrir_fichier macro chams
mov al,1 ;mode d'ouverture du fichier(ecriture)
mov dx, chams
mov al,3dh
int 21h
endm;
;*********************************************************************
title interruption24h
;*********************************************************************
pile segment stack
dw 256 dup(?)
pile ends
donnee segment
msg db "(A)bort, (R)etry, (I)gnore";
msg0 db "disquette protégée contre l'ecriture"
msg1 db "acces a un peripherique inconnu"
msg2 db "unité de disquette n'est pas prete"
msg3 db "erreur inconnu"
msg4 db "erreur crc"
msg5 db "longuer de donnée erronée"
msg6 db "erreur de recherche"
msg7 db "type de peripherique inconnu"
msg8 db "secteur no trouvé"
msg9 db "plus de papier dans l'imprimante"
msgAH db "erreur d'ecriture"
msgBH db "erreur de lecture"
msgCH db "erreur geneale"
mesg db " repeter la tentative d'acces ou arreter"
chams db "x:\chams.txt"
routine db "traite_erreur_acritique"
num_inter db "24h"
donnee ends
;*********************************************************************
code segment
assume cs:code, ss:pile, ds:donnee
mov dx, donnée
mov ds, dx
redirige_int macro num_int, adr_ofs_routine
ouvrir_fichier macro chams
call trite_erreur_critique
code ends
; *************************************
traite_erreur_acritique proc far
; affichage du message sur l'ecran
mov ah,9
lea dx,msg
int 21
; comparaion du contenu de DI avec les differents types d'interruptions
cmp di,00h
jne case1
mov ah,9
lea dx,msg0
int 21
jmp endswitch
case1: cmp di,01h
jne case2
mov ah,9
lea dx,msg1
int 21
jmp endswitch
case2: cmp di,02h
jne endswitch
mov ah,9
lea dx,msg2
int 21
jmp endswitch
case3: cmp di,03h
jne case3
mov ah,9
lea dx,msg3
int 21
jmp endswitch
case4: cmp di,04h
jne case3
mov ah,9
lea dx,msg4
int 21
jmp endswitch
case5: cmp di,05h
jne case5
mov ah,9
lea dx,msg5
int 21
jmp endswitch
case6: cmp di,06h
jne case7
mov ah,9
lea dx,msg6
int 21
jmp endswitch
case7: cmp di,07h
jne case8
mov ah,9
lea dx,msg7
int 21
jmp endswitch
case8: cmp di,08h
jne case9
mov ah,9
lea dx,msg8
int 21
jmp endswitch
case9: cmp di,09h
jne caseAH
mov ah,9
lea dx,msg9
int 21
jmp endswitch
caseAH: cmp di,0ah
jne caseBH
mov ah,9
lea dx,msgAH
int 21
jmp endswitch
caseBH: cmp di,0bh
jne caseCH
mov ah,9
lea dx,msgBH
int 21
jmp endswitch
caseCH:cmp di,0ch
jne endswitch
mov ah,9
lea dx,msg6
int 21
jmp endswitch
endswitch: ret; retour au dos
mov bh,03h
mov ah,9
lea dx,mesg
int 21
;assurer que l'utilisateur ne saisisse que a,r,i et faire le traitement
verif1: mov ah,1
int 21h
cmp al,'a'
jne verif2
int 02h
verif2: mov ah,1
int 21h
cmp al,'r'
jne verif3
int 01h
verif3: mov ah,1
int 21h
cmp al,'i'
jne vrif1
int 00h
ret
traite_erreur_critique endp
pour tout les if3, j'ai trouvé une solution (pas définitive) c cellle ci:
redirection vers la routine traite_erreur_critique
redirige_int macro num_int, adr_ofs_routine
mov ds, adr_ofs_routine
mov al,num_int
mov ah,25h
int 21
endm;
;*********************************
ouvrir_fichier macro chams
mov al,1 ;mode d'ouverture du fichier(ecriture)
mov dx, chams
mov al,3dh
int 21h
endm;
;*********************************************************************
title interruption24h
;*********************************************************************
pile segment stack
dw 256 dup(?)
pile ends
donnee segment
msg db "(A)bort, (R)etry, (I)gnore";
msg0 db "disquette protégée contre l'ecriture"
msg1 db "acces a un peripherique inconnu"
msg2 db "unité de disquette n'est pas prete"
msg3 db "erreur inconnu"
msg4 db "erreur crc"
msg5 db "longuer de donnée erronée"
msg6 db "erreur de recherche"
msg7 db "type de peripherique inconnu"
msg8 db "secteur no trouvé"
msg9 db "plus de papier dans l'imprimante"
msgAH db "erreur d'ecriture"
msgBH db "erreur de lecture"
msgCH db "erreur geneale"
mesg db " repeter la tentative d'acces ou arreter"
chams db "x:\chams.txt"
routine db "traite_erreur_acritique"
num_inter db "24h"
donnee ends
;*********************************************************************
code segment
assume cs:code, ss:pile, ds:donnee
mov dx, donnée
mov ds, dx
redirige_int macro num_int, adr_ofs_routine
ouvrir_fichier macro chams
call trite_erreur_critique
code ends
; *************************************
traite_erreur_acritique proc far
; affichage du message sur l'ecran
mov ah,9
lea dx,msg
int 21
; comparaion du contenu de DI avec les differents types d'interruptions
cmp di,00h
jne case1
mov ah,9
lea dx,msg0
int 21
jmp endswitch
case1: cmp di,01h
jne case2
mov ah,9
lea dx,msg1
int 21
jmp endswitch
case2: cmp di,02h
jne endswitch
mov ah,9
lea dx,msg2
int 21
jmp endswitch
case3: cmp di,03h
jne case3
mov ah,9
lea dx,msg3
int 21
jmp endswitch
case4: cmp di,04h
jne case3
mov ah,9
lea dx,msg4
int 21
jmp endswitch
case5: cmp di,05h
jne case5
mov ah,9
lea dx,msg5
int 21
jmp endswitch
case6: cmp di,06h
jne case7
mov ah,9
lea dx,msg6
int 21
jmp endswitch
case7: cmp di,07h
jne case8
mov ah,9
lea dx,msg7
int 21
jmp endswitch
case8: cmp di,08h
jne case9
mov ah,9
lea dx,msg8
int 21
jmp endswitch
case9: cmp di,09h
jne caseAH
mov ah,9
lea dx,msg9
int 21
jmp endswitch
caseAH: cmp di,0ah
jne caseBH
mov ah,9
lea dx,msgAH
int 21
jmp endswitch
caseBH: cmp di,0bh
jne caseCH
mov ah,9
lea dx,msgBH
int 21
jmp endswitch
caseCH:cmp di,0ch
jne endswitch
mov ah,9
lea dx,msg6
int 21
jmp endswitch
endswitch: ret; retour au dos
mov bh,03h
mov ah,9
lea dx,mesg
int 21
;assurer que l'utilisateur ne saisisse que a,r,i et faire le traitement
verif1: mov ah,1
int 21h
cmp al,'a'
jne verif2
int 02h
verif2: mov ah,1
int 21h
cmp al,'r'
jne verif3
int 01h
verif3: mov ah,1
int 21h
cmp al,'i'
jne vrif1
int 00h
ret
traite_erreur_critique endp
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
merci beaucoup pascal. barbier
pour tout les if3, j'ai trouvé une solution (pas définitive) c cellle ci:
redirection vers la routine traite_erreur_critique
redirige_int macro num_int, adr_ofs_routine
mov ds, adr_ofs_routine
mov al,num_int
mov ah,25h
int 21
endm;
;*********************************
ouvrir_fichier macro chams
mov al,1 ;mode d'ouverture du fichier(ecriture)
mov dx, chams
mov al,3dh
int 21h
endm;
;*********************************************************************
title interruption24h
;*********************************************************************
pile segment stack
dw 256 dup(?)
pile ends
donnee segment
msg db "(A)bort, (R)etry, (I)gnore";
msg0 db "disquette protégée contre l'ecriture"
msg1 db "acces a un peripherique inconnu"
msg2 db "unité de disquette n'est pas prete"
msg3 db "erreur inconnu"
msg4 db "erreur crc"
msg5 db "longuer de donnée erronée"
msg6 db "erreur de recherche"
msg7 db "type de peripherique inconnu"
msg8 db "secteur no trouvé"
msg9 db "plus de papier dans l'imprimante"
msgAH db "erreur d'ecriture"
msgBH db "erreur de lecture"
msgCH db "erreur geneale"
mesg db " repeter la tentative d'acces ou arreter"
chams db "x:\chams.txt"
routine db "traite_erreur_acritique"
num_inter db "24h"
donnee ends
;*********************************************************************
code segment
assume cs:code, ss:pile, ds:donnee
mov dx, donnée
mov ds, dx
redirige_int macro num_int, adr_ofs_routine
ouvrir_fichier macro chams
call trite_erreur_critique
code ends
; *************************************
traite_erreur_acritique proc far
; affichage du message sur l'ecran
mov ah,9
lea dx,msg
int 21
; comparaion du contenu de DI avec les differents types d'interruptions
cmp di,00h
jne case1
mov ah,9
lea dx,msg0
int 21
jmp endswitch
case1: cmp di,01h
jne case2
mov ah,9
lea dx,msg1
int 21
jmp endswitch
case2: cmp di,02h
jne endswitch
mov ah,9
lea dx,msg2
int 21
jmp endswitch
case3: cmp di,03h
jne case3
mov ah,9
lea dx,msg3
int 21
jmp endswitch
case4: cmp di,04h
jne case3
mov ah,9
lea dx,msg4
int 21
jmp endswitch
case5: cmp di,05h
jne case5
mov ah,9
lea dx,msg5
int 21
jmp endswitch
case6: cmp di,06h
jne case7
mov ah,9
lea dx,msg6
int 21
jmp endswitch
case7: cmp di,07h
jne case8
mov ah,9
lea dx,msg7
int 21
jmp endswitch
case8: cmp di,08h
jne case9
mov ah,9
lea dx,msg8
int 21
jmp endswitch
case9: cmp di,09h
jne caseAH
mov ah,9
lea dx,msg9
int 21
jmp endswitch
caseAH: cmp di,0ah
jne caseBH
mov ah,9
lea dx,msgAH
int 21
jmp endswitch
caseBH: cmp di,0bh
jne caseCH
mov ah,9
lea dx,msgBH
int 21
jmp endswitch
caseCH:cmp di,0ch
jne endswitch
mov ah,9
lea dx,msg6
int 21
jmp endswitch
endswitch: ret; retour au dos
mov bh,03h
mov ah,9
lea dx,mesg
int 21
;assurer que l'utilisateur ne saisisse que a,r,i et faire le traitement
verif1: mov ah,1
int 21h
cmp al,'a'
jne verif2
int 02h
verif2: mov ah,1
int 21h
cmp al,'r'
jne verif3
int 01h
verif3: mov ah,1
int 21h
cmp al,'i'
jne vrif1
int 00h
ret
traite_erreur_critique endp
pour tout les if3, j'ai trouvé une solution (pas définitive) c cellle ci:
redirection vers la routine traite_erreur_critique
redirige_int macro num_int, adr_ofs_routine
mov ds, adr_ofs_routine
mov al,num_int
mov ah,25h
int 21
endm;
;*********************************
ouvrir_fichier macro chams
mov al,1 ;mode d'ouverture du fichier(ecriture)
mov dx, chams
mov al,3dh
int 21h
endm;
;*********************************************************************
title interruption24h
;*********************************************************************
pile segment stack
dw 256 dup(?)
pile ends
donnee segment
msg db "(A)bort, (R)etry, (I)gnore";
msg0 db "disquette protégée contre l'ecriture"
msg1 db "acces a un peripherique inconnu"
msg2 db "unité de disquette n'est pas prete"
msg3 db "erreur inconnu"
msg4 db "erreur crc"
msg5 db "longuer de donnée erronée"
msg6 db "erreur de recherche"
msg7 db "type de peripherique inconnu"
msg8 db "secteur no trouvé"
msg9 db "plus de papier dans l'imprimante"
msgAH db "erreur d'ecriture"
msgBH db "erreur de lecture"
msgCH db "erreur geneale"
mesg db " repeter la tentative d'acces ou arreter"
chams db "x:\chams.txt"
routine db "traite_erreur_acritique"
num_inter db "24h"
donnee ends
;*********************************************************************
code segment
assume cs:code, ss:pile, ds:donnee
mov dx, donnée
mov ds, dx
redirige_int macro num_int, adr_ofs_routine
ouvrir_fichier macro chams
call trite_erreur_critique
code ends
; *************************************
traite_erreur_acritique proc far
; affichage du message sur l'ecran
mov ah,9
lea dx,msg
int 21
; comparaion du contenu de DI avec les differents types d'interruptions
cmp di,00h
jne case1
mov ah,9
lea dx,msg0
int 21
jmp endswitch
case1: cmp di,01h
jne case2
mov ah,9
lea dx,msg1
int 21
jmp endswitch
case2: cmp di,02h
jne endswitch
mov ah,9
lea dx,msg2
int 21
jmp endswitch
case3: cmp di,03h
jne case3
mov ah,9
lea dx,msg3
int 21
jmp endswitch
case4: cmp di,04h
jne case3
mov ah,9
lea dx,msg4
int 21
jmp endswitch
case5: cmp di,05h
jne case5
mov ah,9
lea dx,msg5
int 21
jmp endswitch
case6: cmp di,06h
jne case7
mov ah,9
lea dx,msg6
int 21
jmp endswitch
case7: cmp di,07h
jne case8
mov ah,9
lea dx,msg7
int 21
jmp endswitch
case8: cmp di,08h
jne case9
mov ah,9
lea dx,msg8
int 21
jmp endswitch
case9: cmp di,09h
jne caseAH
mov ah,9
lea dx,msg9
int 21
jmp endswitch
caseAH: cmp di,0ah
jne caseBH
mov ah,9
lea dx,msgAH
int 21
jmp endswitch
caseBH: cmp di,0bh
jne caseCH
mov ah,9
lea dx,msgBH
int 21
jmp endswitch
caseCH:cmp di,0ch
jne endswitch
mov ah,9
lea dx,msg6
int 21
jmp endswitch
endswitch: ret; retour au dos
mov bh,03h
mov ah,9
lea dx,mesg
int 21
;assurer que l'utilisateur ne saisisse que a,r,i et faire le traitement
verif1: mov ah,1
int 21h
cmp al,'a'
jne verif2
int 02h
verif2: mov ah,1
int 21h
cmp al,'r'
jne verif3
int 01h
verif3: mov ah,1
int 21h
cmp al,'i'
jne vrif1
int 00h
ret
traite_erreur_critique endp