Précédent   Forum du club des développeurs et IT Pro > Autres langages > Assembleur > x86 16-bits
x86 16-bits Architecture x86 16 bits et ses outils (assembleurs, debuggers, émulateurs...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 28/12/2012, 17h35   #1
stoner
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : décembre 2012
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2012
Messages : 37
Points : 30
Points : 30
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 !
stoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 18h14   #2
Eric2a
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 094
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 42

Informations forums :
Inscription : septembre 2005
Messages : 1 094
Points : 1 648
Points : 1 648
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.
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 29/12/2012, 00h24   #3
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 614
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 614
Points : 11 089
Points : 11 089
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.
Obsidian est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 29/12/2012, 01h04   #4
stoner
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : décembre 2012
Messages : 37
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Belgique

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : décembre 2012
Messages : 37
Points : 30
Points : 30
Un grand merci pour votre aide oh combien précieuse !
stoner est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/12/2012, 11h46   #5
issam.abdallah
Membre éprouvé
 
Homme Abdallah Issam
Ingénieur Informatique
Inscription : novembre 2012
Messages : 36
Détails du profil
Informations personnelles :
Nom : Homme Abdallah Issam
Localisation : Tunisie

Informations professionnelles :
Activité : Ingénieur Informatique
Secteur : Enseignement

Informations forums :
Inscription : novembre 2012
Messages : 36
Points : 493
Points : 493
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 !
issam.abdallah est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 06h14.


 
 
 
 
Partenaires

Hébergement Web