|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Étudiant Inscription : décembre 2012 Messages : 37 ![]() |
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 ! |
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Eric GaridacciInscription : septembre 2005 Messages : 1 094 ![]() |
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. |
|
|
20
|
|
|
#3 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
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. |
|
|
30
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Étudiant Inscription : décembre 2012 Messages : 37 ![]() |
Un grand merci pour votre aide oh combien précieuse !
|
|
|
00
|
|
|
#5 |
|
Membre éprouvé
![]() ![]() Abdallah IssamIngénieur Informatique Inscription : novembre 2012 Messages : 36 ![]() |
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 ! |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com