Section courante

A propos

Section administrative du site

00h à 07h 08h à 0Fh 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 1Ah 1Bh 1Ch 1Dh 1Eh 1Fh 20h 21h 22h 23h 24h 25h 26h 27h 28h 29h 2Ah 2Bh 2Eh 2Fh 33h 41h 4Bh 59h 5Ch 67h 7Ah 80h à F0h Rechercher

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

Remarque

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