[SOS] Empiler les registres !!!!

Thomas Petazzoni thomas.petazzoni at enix.org
Mer 29 Déc 18:29:52 CET 2004


Bonjour,

LfvrChris at aol.com wrote:

>     Pourquoi empilez-vous les registres lors de l'appel des interruptions ?

Ton code est en éxécution, il utilise les registres eax, ebx, ecx, 
etc... pour réaliser diverses opérations.

Tac, une interruption arrive. Dans le cadre du traitement de cette 
interruption, on utilise eax, ebx, ecx, etc..

On retourne de l'interruption, et on revient au code qui était en 
éxécution. Et là, le code ne marche plus parce que les valeurs de eax, 
ebx et ecx ont été modifiées par le gestionnaire de l'interruption.

Donc, quand on rentre dans une interruption, il faut sauvegarder tous 
les registres qui vont être modifiés pendant le traitement de 
l'interruption. Et quand on sort de l'interruption, il faut de la même 
façon restaurer tous les registres précédemment sauvegardés.

Dans la partie "Fonctionnement d'une routine de traitement 
d'interruption" du second article de la série SOS (disponible sur le 
site sos.enix.org), tu peux lire :

*******************************************************************
Le traitement d'une interruption se réalise donc généralement en 3
temps :

  - Sauvegarde de tous les registres, à savoir les registres
    généraux et les registres de segment.

  - Traitement effectif de l'interruption.

  - Restauration de tous les registres sauvegardés sauf eflags.

  - Retour à l'instruction interrompue ou à celle qui suit:
    instruction iret, qui est similaire à l'instruction de retour de
    fonction ret, sauf que iret dépile également eflags.

En général, les opérations 1 et 3 sont réalisées par une petite
routine en langage assembleur, et la routine 2 est implémentée en
langage C. Elles garantissent que, quoi que puisse faire la routine
d'interruption, celle-ci ne va pas interférer avec le programme
interrompu : tous les registres sont restitués à l'identique avant de
revenir au programme interrompu.
*******************************************************************

Voilà !

Bonne soirée,

Thomas
-- 
PETAZZONI Thomas - thomas.petazzoni at enix.org
http://thomas.enix.org - Jabber: thomas.petazzoni at jabber.dk
KOS: http://kos.enix.org/ - Lolut: http://lolut.utbm.info
Fingerprint : 0BE1 4CF3 CEA4 AC9D CC6E  1624 F653 CB30 98D3 F7A7
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 256 bytes
Desc: OpenPGP digital signature
Url : http://the-doors.enix.org/pipermail/sos/attachments/20041229/68ccaaed/signature.pgp


Plus d'informations sur la liste de diffusion Sos