EXEMPLE SUR L'IMPLENTATION D'UN ISR (INTERRUPT SERVICE ROUTINES)

Signaler
Messages postés
22
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
18 janvier 2011
-
Messages postés
14
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
16 juillet 2009
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/15310-exemple-sur-l-implentation-d-un-isr-interrupt-service-routines

Messages postés
14
Date d'inscription
samedi 18 octobre 2008
Statut
Membre
Dernière intervention
16 juillet 2009

joli travail..c'est très impressionnant
Messages postés
11
Date d'inscription
lundi 26 novembre 2007
Statut
Membre
Dernière intervention
18 mai 2008

salut
merci pour le code
seulement moi je compile en debug sous DOS et il me donne erreur à l instruction mov word ptr es:[88h*4] est ce ke vous pouvez m 'aider
Messages postés
3
Date d'inscription
jeudi 8 février 2001
Statut
Membre
Dernière intervention
10 juin 2006

pour RM50Man:
En mode réel, le processeur adresse sa mémoire en bloc de 64Ko. Quand on veut accéder à une zone mémoire (pour lecture, ecriture, execution de code ...etc), on doit donc toujours donner deux infos pour l'adresse: le segment (que l'on pourrait considérer comme le numero du bloc de 64K dans lequel se trouve notre adresse), et l'offset (~ le décallage dans ce segment).
L'adresse des différents codes qui gèrent les différents évènements systèmes (exemple appuie d'une touche clavier, arrivée d'une infos sur un port série, signal de l'imprimante pour indiquer une fin de papier etc etc) est stockée dans la zone de mémoire de démarrant au segment 0. In note généralement 0000:0000. Une adresse d'interruption est décrite donc sur 4 octets (2 pour le segment, 2 pour le décallage).
L'adresse d'une interruption peut être calculée donc en faisant N° IRQ * 4 pour l'adresse de l'offset, + 2 octets pour l'adresse de segment. D'où (88h*4) pour l'offset, et (88h*4) + 2 octets pour le segement.
Note: en général, les octets mémoires sont toujours pointés avec les registres DS:SI et ES:DI. D'ou la remise à zéro de ES avec les deux intruction mov ax,0 et mov es,ax.
IMPORTANT: L'auteur se base sur le principe que les interruptions sont rangées dans l'ordre croissant! Cela pourrait ne pas être le cas, et donc il existe une interruption permettant de renvoyer l'adresse d'une interruption directement dans les registres (soit dans ES:DI soit dans DS:SI, je n'ai en tête exactement).
Voilà, j'ai peut-être été long, il y a peut-être des chose que vous saviez déjà. Mais c'est mon défaut.
Messages postés
314
Date d'inscription
mercredi 1 novembre 2000
Statut
Membre
Dernière intervention
20 août 2006

mov word ptr es:[88h*4], offset LitCaractere
;on met notre adresse de routine
mov word ptr es:[88h*4 + 2], seg LitCaractere

Pkoi tu fais 88h * 4
et ensuite 88h * 4 + 2
tu peux m'expliquer!!!
Merci pour le code!!!!!!
Afficher les 8 commentaires