Question

Inspiré par cette question

Comment puis-je forcer GDB à démonter?

Je me suis demandé sur le INT 21 h en tant que concept. Maintenant, j'ai une connaissance très rouillée des internes, mais pas tant de détails. Je me souviens que vous aviez C64 Interruptions réguliers et non masquable Interruptions, mais ma connaissance arrête ici. Pourriez-vous s'il vous plaît me donner quelques indices? Est-ce une stratégie liée DOS?

Était-ce utile?

La solution

De ici: Un DOS polyvalent d'interruption utilisé pour diverses fonctions, y compris la lecture du clavier et de l'écriture à la console et l'imprimante. Il a également été utilisé pour lire et écrire des disques à l'aide de la méthode des blocs de commande Fichier précédent (FCB).

Autres conseils

DOS peut être considéré comme une bibliothèque utilisée pour fournir un fichiers / répertoires abstraction pour le PC (-et un peu plus). int 21h est un matériel simple « truc » qui le rend facile à appeler du code de cette bibliothèque sans le savoir à l'avance où il sera situé dans la mémoire. Vous pouvez penser à cela comme la façon d'utiliser l'API DOS.

, le sujet des interruptions logicielles est complexe, en partie parce que les concepts ont évolué au fil du temps que Intel a ajouté des fonctionnalités à la famille x86, tout en essayant de rester compatible avec les anciens logiciels. Une bonne explication prendrait quelques pages, mais je vais essayer d'être bref.

La principale question est de savoir si vous êtes en mode réel ou protégé .

Mode réel est simple, le mode "original" de fonctionnement du processeur x86. Ce mode DOS qui fonctionne en (lorsque vous exécutez des programmes DOS sous Windows, un processeur en mode réel est virtualisé, donc en elle les mêmes règles sont applicables). Le programme en cours d'exécution a un contrôle total sur le processeur.

En mode réel, il y a une table de vecteur qui indique au processeur qui adresse pour passer à pour chaque interruption de 0 à 255. Ce tableau est rempli par le BIOS et DOS, ainsi que les pilotes de périphériques, et parfois des programmes avec spéciaux Besoins. Certaines de ces interruptions peuvent être générées par le matériel (par exemple par une pression de touche). D'autres sont générés par certaines conditions de logiciels (par exemple, de diviser par 0). Tous d'entre eux peuvent être générés en exécutant la int n instruction.

Les programmes peuvent définir / effacer l'indicateur « activer les interruptions »; ce drapeau affecte le matériel interrompt et n'affecte pas int instructions.

Les concepteurs ont choisi d'utiliser DOS 21 h numéro d'interruption pour traiter les demandes DOS - le nombre est sans signification réelle: il était juste une entrée non utilisée à l'époque. Il y a beaucoup d'autres (nombre est une routine 10h d'interruption du BIOS installé qui traite des graphiques, par exemple). A noter également que tout cela est pour IBM PC Compatibles uniquement. processeurs x86 en dire les systèmes embarqués peuvent avoir leur logiciel et d'interruption des tables disposées tout à fait différemment!

Mode protégé est le mode complexe, « conscient de la sécurité » qui a été introduit dans le processeur 286 et bien étendu sur la 386. Il fournit des niveaux de privilèges multiples. Le système d'exploitation doit configurer tout cela (et si le système d'exploitation se trompe, vous avez exploiter un potentiel pour la sécurité). Les programmes utilisateur sont généralement confinés à un mode « privilège minimal » de l'opération, où essayant d'accéder aux ports matériels, ou de changer le drapeau d'interruption, ou l'accès à certaines zones de mémoire, arrête le programme et permet à l'OS de décider ce qu'il faut faire (que ce soit mettre fin à le programme ou donner au programme ce qu'il semble vouloir).

traitement d'alarme se fait plus complexe. Qu'il suffise de dire qu'en général, si un programme utilisateur effectue une interruption logicielle, le numéro d'interruption est pas utilisé comme vecteur dans la table d'interruption. Plutôt une exception de protection générale est générée et le gestionnaire du système d'exploitation pour ladite exception peut (si le système d'exploitation est la conception de cette façon) travailler à ce que le processus et veut servir la demande. Je suis sûr que Linux et Windows ont dans le passé (si pas) utilisé ce genre de mécanisme pour leurs appels système. Mais il y a d'autres moyens d'y parvenir, comme l'instruction SYSENTER.

Liste d'interruption de Ralph Brown contient beaucoup d'informations sur qui interrompent fait quoi. int 21, comme tous les autres, supporte une large gamme de fonctionnalités en fonction des valeurs de registre .

non HTML de la liste de Ralph Brown est également disponible.

L'instruction INT est une interruption logicielle. Il provoque un saut vers une routine pointée par un vecteur d'interruption, ce qui est un emplacement fixe dans la mémoire. L'avantage de l'instruction INT est qu'il est seulement deux octets de long, comme oposed à 6 peut-être pour une JMP, et qu'il peut facilement être redirigé en modifiant le contenu du vecteur d'interruption.

Int 0x21 est une interruption logicielle x86 - essentiellement cela signifie qu'il ya une table d'interruption à un point fixe dans la mémoire répertoriant les adresses des fonctions d'interruption du logiciel. Lorsqu'un processeur x86 reçoit l'opcode d'interruption (ou autrement décide qu'une interruption logicielle particulière doit être exécuté), il fait référence à cette table pour exécuter un appel à ce point (la fonction à ce moment doit utiliser iret au lieu de ret retourner).

Il est possible de remapper Int 0x21 et d'autres interruptions logicielles (même à l'intérieur DOS si cela peut avoir des effets secondaires négatifs). Une interruption de logiciel intéressant à la carte ou la chaîne est Int 0x1C (ou 0x08 si vous faites attention), qui est le système d'interruption tique, appelée 18,2 fois par seconde. Ceci peut être utilisé pour créer des processus « de fond », même en mode réel seul thread (le processus en mode réel sera interrompu 18,2 fois par seconde pour appeler votre fonction d'interruption).

Sur le système d'exploitation DOS (ou un système qui fournit une émulation DOS, comme la console Windows) Int 0x21 est mis en correspondance à ce qui est effectivement les systèmes d'exploitation DOS principale « API ». En fournissant des valeurs différentes dans le registre d'AH, différentes fonctions peuvent être exécutées DOS comme l'ouverture d'un fichier (AH = 0x3D) ou l'impression à l'écran (AH = 0x09).

Ceci est de la grande L'art de l'Assemblée sur les langage de programmation interruptions:

  

Sur le 80x86, il existe trois types d'événements communément appelés   interruptions: les pièges, les exceptions et les interruptions (Interruptions hardware).   Ce chapitre décrit chacune de ces formes et discuter de leur   support sur les machines compatibles CPU 80x86 et PC.

     

Bien que les termes piège et exception sont souvent utilisés comme synonymes, nous   va utiliser le piège à terme pour désigner un programmeur initié et devrait   transfert de contrôle à une routine de gestionnaire spécial. À bien des égards, une   piège est rien de plus qu'un appel de sous-programme spécialisé. De nombreux textes   reportez-vous aux pièges comme les interruptions logicielles. L'instruction 80x86 int est   le principal véhicule pour l'exécution d'un piège. Notez que les pièges sont généralement   inconditionnel; qui est, lorsque vous exécutez une instruction int, contrôle   toujours transfère à la procédure associée au piège. Puisque   pièges exécuter via une instruction explicite, il est facile de déterminer   exactement quelles instructions dans un programme invoqueront une manipulation piège   routine.

Chapitre 17 - Structure et Interrompre Interrompre Routines

(presque) l'ensemble de l'interface DOS a été rendu disponible en tant que commandes de INT21h, avec des paramètres dans les différents registres. Il est un petit truc, en utilisant une table en matériel construit pour sauter au bon code. Aussi INT 33h était pour la souris.

Il est une « interruption logicielle »; donc pas un matériel d'interruption du tout.

Lorsqu'une application invoque une interruption logicielle, qui est essentiellement le même que le fait un appel de sous-programme, sauf que (contrairement à un appel de sous-programme) le n'a pas besoin de connaître l'adresse de mémoire exacte du code, il est l'invocation.

Le logiciel système (par exemple DOS et le BIOS) exposent leurs API à l'application comme les interruptions logicielles.

L'interruption du logiciel est donc une sorte de liaison dynamique.

Pour être précis, voici le lien direct vers INT Liste de commande 21H de R. Brown: http : //www.ctyme.com/intr/int-21.htm

En fait, il y a beaucoup de concepts ici. Commençons par les bases.

Une interruption est un moyen de demander l'attention de la CPU, interruption le déroulement du programme en cours, passez directement à un gestionnaire d'interruption (ISR - routine de service d'interruption), faire un peu de travail (généralement par le système d'exploitation noyau ou un pilote de périphérique), puis revenir.

Quelles sont les utilisations typiques pour les interruptions?

  • Matériel interrompt: Dispositif demande l'attention de la CPU en émettant une demande d'interruption
  • .
  • Exceptions CPU: Si une condition de CPU anormal se produit, comme une division par zéro, une erreur de page, ... la CPU passe au gestionnaire d'interruption correspondant de sorte que le système d'exploitation peut faire ce qu'il doit faire (envoyer un signal un processus, charger une page d'échange et de mise à jour de la table TLB / page, ...).
  • interrompt Software: Depuis une interruption finit par appeler le noyau du système d'exploitation, d'une manière simple à mettre en œuvre des appels système est d'utiliser les interruptions. Mais vous n'avez pas besoin, en x86, vous pouvez utiliser une instruction d'appel à une structure (une sorte de TSS IIRC), et il y a plus récent x86 intructions SYSCALL / sysenter.

unités centrales à décider où aller à la recherche d'une table (vecteurs d'exception, vecteurs d'interruption, IVT en mode réel x86, IDT en mode protégé x86, ...). Certains processeurs ont un vecteur unique pour les interruptions matérielles, un autre pour les exceptions et ainsi de suite, et l'ISR doit faire un travail pour identifier l'origine de l'interruption. D'autres ont beaucoup de vecteurs, et d'aller directement à ISRs très spécifiques.

X 86 a 256 vecteurs d'interruption. Sur les PC d'origine, ceux-ci ont été divisés en plusieurs groupes:

  • exceptions CPU 00-04, y compris INM. Avec plus tard processeurs (80186, 286, ...), cette gamme étendue, qui se chevauchent avec les plages suivantes.
  • 08-0F Ce sont des interruptions matérielles, généralement appelés comme IRQ0-7. Le PC-AT ajouté IRQ8-15
  • les appels BIOS 10-1F. Conceptuellement, ceux-ci peuvent être considérés comme des appels du système, étant donné que le BIOS est la partie du DOS qui dépend de la machine en béton (qui est la façon dont il a été défini dans le CP / M).
  • 20-2F appelle DOS. Certains d'entre eux sont multiplexés et offrent multitude de fonctions. Le principal est 21H, qui offre la plupart des services DOS.
  • 30-FF Le reste, pour une utilisation par des facteurs externes et les programmes utilisateur.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top