Exemple sur l'implentation d'un isr (interrupt service routines)

Soyez le premier à donner votre avis sur cette source.

Vue 6 074 fois - Téléchargée 282 fois

Description

Ce code demontre la facon d'implenter un ISR sans utiliser le dos.indispensable a savoir si vous voulez devellopper votre propre OS.

Source / Exemple :


;Ecrit par TotalIllusion (Eric Grand Maison)
;ISR veut dire Interrupt Service Routines et c'est indispensable 
;de savoir comment les utiliser si quelqu'un pense
;a concevoire son propre OS ou meme pour modifier un system 
;d'exploitation deja implenter (le dos par exemple)
;En fais c'est vraiment simple il suffit de mettre ladresse 
;de notre routine dans la table des vecteurs
;qui ce trouve a ladresse 0.
;sorry pour le manque de ponctuation mais j'utilise un clavier englais
;Cette exemple a ete compiler avec tasm 5

.model small
.code

LitCaractere     proc far         ;ici on declare notre routine
push ax                           ;Chose indispensable est de 
                                  ;sauvegarder les registre qui seront modifier par 
                                  ;notre ISR
mov ah,0h                         ;on met notre code
int 16h                            
pop ax                            ;On remet le system comme il etais
iret
LitCaractere     endp             ;Voila notre routine terminer

debut:
mov ax,0                          ;Comme je les dit plutot la table des v
                                  ;ecteurs ce trouve a ladresse 0 donc il faut que 
mov es,ax                         ;je set ES a 0 pour y acceder car cest notre seul 
                                  ;registre de libre et utilisable pour cela
pushf                            ;on savegarde le registre des flag
                        
cli                               ;Toujour desactiver les interruption 
                                  ;avance de changer la 
                                  ;table des vecteur

;Ici j'ai decider de mettre comme interruption 88h mais vous pouver 
;mettre celle que vous 
;voulez mais faites attention de 
;ne par modifier un vecteur deja existant du genre de 10h 13h 21h etc 
;car elle ne 
;seront plus accessible apres la ;modification

mov     word ptr es:[88h*4], offset LitCaractere 
                               ;on met notre adresse de routine
mov     word ptr es:[88h*4 + 2], seg LitCaractere 
                                  ;on met ladresse du segment de notre routine
sti                                               ;on remet les interruption a ON 
popf                                             ;on remet le registre des flag comme avant

;Maintenant il ne reste plus qua tester notre ISR pour voir si il fonctionne bien
int 88h             
;En fais notre routine ne fais qu'une seul choses, elle attent que 
;nous pression une touche du clavier
mov ax,4c00h        ;fermeture du programme avec code de fin 0
int 21h             ;appelle au dos
end debut           ;fini

Conclusion :


Ce programme implente un INT 88H qui ne fais pas grand choses mis a part attendre que tu entre un caractere au clavier mais explique bien la structure d'un ISR et son implentation dans la table des vecteurs

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_marcotte
Messages postés
30
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
18 janvier 2011
-
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 !
NBhack
Messages postés
23
Date d'inscription
dimanche 18 août 2002
Statut
Membre
Dernière intervention
19 septembre 2006
-
cool
cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1 -
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? )
crazyjoke
Messages postés
147
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
9 janvier 2005
-
Très bien, très utile !! Surtout quand on développe un OS :D !!
RM50Man
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!!!!!!

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (TotalIllusion)