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

cs_marcotte Messages postés 22 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 18 janvier 2011 - 2 juil. 2003 à 03:50
vaytess Messages postés 14 Date d'inscription samedi 18 octobre 2008 Statut Membre Dernière intervention 16 juillet 2009 - 27 déc. 2010 à 18:23
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

vaytess Messages postés 14 Date d'inscription samedi 18 octobre 2008 Statut Membre Dernière intervention 16 juillet 2009
27 déc. 2010 à 18:23
joli travail..c'est très impressionnant
aboulkhir Messages postés 11 Date d'inscription lundi 26 novembre 2007 Statut Membre Dernière intervention 18 mai 2008
14 mai 2008 à 13:26
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
aparan Messages postés 3 Date d'inscription jeudi 8 février 2001 Statut Membre Dernière intervention 10 juin 2006
20 févr. 2006 à 13:27
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.
RM50Man Messages postés 314 Date d'inscription mercredi 1 novembre 2000 Statut Membre Dernière intervention 20 août 2006
28 déc. 2005 à 01:22
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!!!!!!
Utilisateur anonyme
31 août 2004 à 15:47
Très bien, très utile !! Surtout quand on développe un OS :D !!
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
2 janv. 2004 à 16:40
pour les débutants, tu peux preciser que ton code concerne le mode réel du processeur.

le 16 bits est utile pour programmer des loaders d'OS mais depuis le 286, les processeurs sont capables d'utiliser le mode protégé.

a l'heure actuelle, programmer un OS en 16 bits serait un phénoménal retour en arrière. ( environ 20 ans non? )
NBhack Messages postés 23 Date d'inscription dimanche 18 août 2002 Statut Membre Dernière intervention 19 septembre 2006
1 août 2003 à 02:54
cool
cs_marcotte Messages postés 22 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 18 janvier 2011
2 juil. 2003 à 03:50
Bravo, tu as l'air d'etre un pro en asm !
Moi je programme depuis 1988 mais avec DEBUG.COM qui est un petit programme inclu dans le vrai dos, et permettant de créer des programmes en point com (.com) inférieurs à 64Ko.
Ya meme un désassembleur inclu, et on peut faire du pas a pas et voir les registres a chaque fois.
Mais bon c'est dépassé je sais, alors je passe à masm32, bye !
Rejoignez-nous