Section courante

A propos

Section administrative du site

Interruption 21h

Fonction 25h

Fixer l'adresse d'un vecteur d'interruption
CP/M, DOS 1.0+, OS/2, Windows NT

Description

Cette fonction permet de fixer l'adresse d'un vecteur d'interruption.

Entrée

Registre Valeur ou description
AH 25h
AL Ce registre permet d'indiquer le numéro d'interruption
DS:DX Cette paire de registres permet d'indiquer l'adresse du pointeur sur la nouvelle interruption

Sortie

 Aucune

Remarques

Exemple

L'exemple suivant, écrit en Turbo Pascal 7, permet de créer une interruption 90h temporairement pendant l'exécution du programme effectuant un boucle afin de déterminer le nombre de caractère spécifié est présent combien de fois dans la chaine de caractères et libère l'interruption 90h lorsque le programme se termine :

  1. Program SetIntVectSamples3;
  2.  
  3. Const
  4.  MaChaine:String = 'Bonjour, Ceci est un test';
  5.  
  6. Var
  7.  OldInt90h:Pointer;
  8.  MyResult:Word;
  9.  
  10.  
  11. Procedure Int90h(_Flash,_CS,_IP,_AX,_BX,_CX,_DX,_SI,_DI,_DS,_ES,_BP:Word);Interrupt;Assembler;ASM
  12.   { Depile }
  13.  MOV AX,_ES
  14.  MOV ES,AX
  15.  MOV DI,_DI
  16.  MOV BX,_BX
  17.   { Traitement}
  18.  MOV CL,Byte Ptr ES:[DI]
  19.  XOR CH,CH
  20.  XOR DX,DX
  21. @1:
  22.  INC DI
  23.  CMP Byte Ptr ES:[DI],BL
  24.  JNE @2
  25.  INC DX
  26. @2:
  27.  LOOP @1
  28.  XCHG AX,DX
  29.   { Copie le r‚sultat dans la variable }
  30.  MOV _AX,AX
  31. END;
  32.  
  33. BEGIN
  34.  ASM
  35.   MOV  AX,3590h
  36.   INT  21h
  37.   MOV  Word Ptr OldInt90h[0],BX
  38.   MOV  Word Ptr OldInt90h[2],ES
  39.   PUSH DS
  40.    MOV  AX,2590h
  41.    MOV  DX,OFFSET Int90h
  42.    PUSH CS
  43.    POP  DS
  44.    INT  21h
  45.   POP DS
  46.   MOV BL,'e';
  47.   PUSH DS
  48.   POP ES
  49.   MOV DI,Offset MaChaine;
  50.   INT 90h
  51.   MOV MyResult,AX
  52.   PUSH DS
  53.    MOV  AX,2590h
  54.    MOV  DX,Word Ptr OldInt90h[0]
  55.    MOV  DS,Word Ptr OldInt90h[2]
  56.    INT  21h
  57.   POP DS
  58.  END;
  59.  WriteLn('Nombre de "e" dans la chaine "',MaChaine,'"=',MyResult);
  60. END.

on obtiendra le résultat suivant :

Nombre de "e" dans la chaine "Bonjour, Ceci est un test"=3

Voir également

Langage de programmation - Turbo Pascal - Référence de procédures et fonctions - SETINTVEC
Langage de programmation - Assembleur et Pascal - Affichage - Programme émulant le BIOS CGA pour les Graphic Solutions
Interruption 21h, Fonction 35h: Demande l'adresse d'un vecteur d'interruption

Références

La Bible du PC: Programmation système - Sixième Edition, Edition Micro-Application, Michael Tischer, 1996, ISBN: 2-7429-0544-8, page 1510.
Aide-mémoire des interruptions du MS-DOS, Edition Marabout, Philippe Mercier, 1990, ISBN: 2-501-01297-6, page 173 à 174.

Dernière mise à jour : Jeudi, le 3 mars 2016