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

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

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)