9 réponses
pascal.barbier
Messages postés
33
Date d'inscription
samedi 8 décembre 2007
Statut
Membre
Dernière intervention
7 décembre 2008
6
30 déc. 2007 à 14:33
30 déc. 2007 à 14:33
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
pascal.barbier
Messages postés
33
Date d'inscription
samedi 8 décembre 2007
Statut
Membre
Dernière intervention
7 décembre 2008
6
30 déc. 2007 à 14:42
30 déc. 2007 à 14:42
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
pascal.barbier
Messages postés
33
Date d'inscription
samedi 8 décembre 2007
Statut
Membre
Dernière intervention
7 décembre 2008
6
14 mars 2008 à 13:35
14 mars 2008 à 13:35
par exemple int 16 :
http://heim.ifi.uio.no/~stanisls/helppc/int_16.html
ou encore
http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/Chapter_20/CH20-3.html
http://heim.ifi.uio.no/~stanisls/helppc/int_16.html
ou encore
http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/Chapter_20/CH20-3.html