IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 16-bits Assembleur Discussion :

Les interruptions [Débutant(e)]


Sujet :

x86 16-bits Assembleur

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 83
    Points : 87
    Points
    87
    Par défaut Les interruptions
    Bonjour tout le monde !

    Je sollicite votre aide afin d'y voir un peu plus clair dans les interruptions.

    Si j'ai bien compris: il y a 256 interruptions pointés par la table des vecteurs d'interruptions se trouvant en début de RAM. Et chaque interruption contient un nombre de fonction.

    Mes questions sont les suivantes:

    Lorsque l'on écrit:
    mov ah, 09h
    mov dx, offset message
    int 21h


    Le 09h correspond à la 9ème fonction de l'interruption 21h , soit la 9ème fonction de l'interruption situé en 0000:0021?
    Combien y a-t-il de fonctions par interruption et où sont-elles stockées ? Aussi je croyais que le début de la RAM était destiné au PSP ?

    Un grand merci aux âmes charitables qui accepteront de m'aider !

  2. #2
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    La table des vecteurs d'interruption contient uniquement les adresses (codées sur 32 bits soit 4 octets) de chaque interruption.

    Le mot de poids faible étant l'offset et le mot de poids fort étant le segment.

    Pour obtenir l'adresse du code de l'interruption 21H, on passe par son vecteur se situant à l'adresse 0000:0084 (car 21H * 4 = 84H).

    Le code placé à cette adresse effectuera un traitement en fonction des paramètres d'entrées. En l'occurence :
    AH = 09H (fonction permettant la sortie d'une chaine de caractère située à l'adresse pointée par le couple de registres DS : DX)


    Le PSP (Program Segment Prefix) qui a une longueur de 256 octets se trouve au début de chaque programme EXE ou COM chargé en mémoire.

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Bonjour,

    Pour compléter ce que dit Eric2A, sache qu'une interruption n'est pas en soi, à la base, un appel système. Néanmoins, les interruptions logicielles ont souvent été utilisées à cette fin sur différentes architectures car c'est une technique d'appel qui apporte beaucoup d'avantages. Cependant, elles sont en nombre limité. Sur Intel x86, il y en a 256 différentes mais bon nombre d'entre elles sont réservées à l'avance, parfois par le micro-processeur lui-même. Sur d'autres micro-processeurs plus modestes, il n'y a souvent qu'une seule interruption logicielle disponible (et jusqu'à 3 sur le 6809, par exemple). Il convient donc de les économiser.

    D.O.S. a donc réservé l'interruption 21h pour lui permettre d'être appelé par un programme, tout simplement. Et ce faisant, le programme indique aux routines du D.O.S. quel genre de service il souhaite recevoir en passant son numéro en paramètre dans un registre.

    Le fait de passer un numéro de fonction n'est qu'une caractéristique propre à D.O.S. (et à certains services immitant le même principe) et est donc en soi complètement indépendant des interruptions logicielles elles-mêmes.

  4. #4
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 83
    Points : 87
    Points
    87
    Par défaut
    Un grand merci pour votre aide oh combien précieuse !

  5. #5
    Invité
    Invité(e)
    Par défaut
    Juste une petite remarque : Dès le 80386 (IA-32), on a un tableau d'interruption qu'au démarrage de l'ordinateur (real mode) !
    Mais en mode normal du 80386 (protected mode) les adresses des routines interruptions sont situés dans l'IDT (Interrupt Descriptor Table). Le registre IDTR pointe vers la première entrée dans ce tableau. Ce tableau peut être alors situé
    n'importe où dans la mémoire !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur dans BosoKernel pour les interruptions ?
    Par Edouard Kaiser dans le forum Autres architectures
    Réponses: 8
    Dernier message: 05/11/2017, 09h27
  2. Comment le SE Windows Gère les interruptions ?
    Par elmessoussi dans le forum Windows
    Réponses: 2
    Dernier message: 16/10/2005, 23h29
  3. Les interruptions + ring 0 ?
    Par MonsieurAk dans le forum x86 32-bits / 64-bits
    Réponses: 12
    Dernier message: 29/09/2003, 08h51
  4. Les interruptions sous Windows et Linux
    Par Descartes dans le forum x86 32-bits / 64-bits
    Réponses: 7
    Dernier message: 07/06/2003, 22h42
  5. Tracer une ligne droite sans les interruptions
    Par Stef784ever dans le forum x86 16-bits
    Réponses: 4
    Dernier message: 25/11/2002, 01h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo