Chapitre – 6
Introduction aux bases de l'informatique
Introduction
Parfois, dans certains cas, lorsque vous essayez de récupérer les données ou que vous effectuez une tâche de dépannage de données et de disque (ou toute autre tâche liée au système), il est très pratique d'utiliser la commande DEBUG de DOC.
Il peut également être possible, dans certains cas particuliers, que vous vous sentiez facile d'effectuer cette tâche particulière avec l'aide de DEBUG puis avec la programmation. Prenons un exemple. Le codage suivant de debug sera suffisant pour faire la sauvegarde de DBR. Tapez simplement les lignes suivantes :
DEBUG BKDBR.BIN
L 100 2 0 1
R CX
200
W
Q
Ici, vous pouvez voir que ce n'est qu'en tapant les quelques lignes ci-dessus que vous pouvez éviter d'écrire un programme. Voyons un autre exemple de codage qui charge la copie de sauvegarde de DBR sur le disque
Rappelez-vous toujours ! N'essayez pas ceci sans la connaissance complète. Soyez sûr de ce que vous allez faire. Une utilisation négligente des instructions suivantes peut entraîner une perte de données importante car une mauvaise utilisation des instructions peut rendre toutes vos informations du disque inaccessibles.
DEBUG BKDBR.BIN
W 100 2 0 1
Q
En voyant le codage de cet exemple, vous pouvez facilement deviner à quel point il peut vous aider lorsque vous en avez le plus besoin. De plus, il n'est pas possible de programmer dans toutes les situations. Toutefois dans la limite des cas simples du problème, utiliser la notice de montage, vous devez simplement copier le debug.exe/debug.com sur votre disque de démarrage et commencer à écrire le code.
Le fonctionnement et les exemples décrits dans ce chapitre et dans ce livre sont uniquement compatibles avec l'architecture de la famille de processeurs Intel x86.
Tout d'abord, nous devons acquérir un peu de connaissances sur les bases de l'architecture informatique pour comprendre les termes utilisés dans les sections à venir tout en décrivant le fonctionnement et les exemples dans les différentes étapes. Faites-nous part de quelques notions de base sur l'architecture informatique :
Concepts de base
Processeur central
Cette partie est également connue sous le nom d'unité centrale de traitement ou CPU, qui à son tour est composée de l'unité de contrôle et de l'unité arithmétique et logique. Ses fonctions consistent à lire et écrire le contenu des cellules mémoire, à transmettre des données entre les cellules mémoire et les registres spéciaux, à décoder et exécuter les instructions d'un programme. Le processeur possède une série de cellules de mémoire qui sont très souvent utilisées et font donc partie du CPU.
Ces cellules sont connues sous le nom de registres. Un processeur peut avoir une ou deux douzaines de ces registres. L'unité arithmétique et logique du CPU réalise les opérations liées aux calculs numériques et symboliques.
En règle générale, ces unités n'ont la capacité d'effectuer que des opérations très élémentaires telles que l'addition et la soustraction de deux nombres entiers, la multiplication et la division de nombres entiers, la gestion des bits des registres et la comparaison du contenu de deux registres. Les ordinateurs personnels peuvent être classés selon ce qu'on appelle la taille des mots, c'est-à-dire la quantité de bits que le processeur peut gérer à la fois.
Mémoire centrale
C'est un groupe de cellules, fabriquées avec des semi-conducteurs, utilisées pour des processus généraux, tels que l'exécution de programmes et le stockage d'informations pour les opérations. Chacune de ces cellules peut contenir une valeur numérique et elles ont la propriété d'être orientables. C'est qu'ils peuvent se distinguer les uns des autres au moyen d'un numéro unique ou d'une adresse pour chaque cellule. Le nom générique de ces mémoires est Random Access Memory ou RAM.
Le principal inconvénient de ce type de mémoire est que les circuits intégrés perdent les informations qu'ils ont stockées lorsque le flux électrique est interrompu. C'était la raison de la création de mémoires dont les informations ne sont pas perdues lorsque le système est éteint. Ces mémoires reçoivent le nom de Read Only Memory ou ROM.
Pour que le PC puisse traiter les informations, il est nécessaire que ces informations se trouvent dans des cellules spéciales appelées registres. Les registres sont des groupes de 8 ou 16 bascules.
Une bascule est un dispositif capable de stocker deux niveaux de tension, un bas, régulièrement de 0,5 volt, et un autre, communément de 5 volts. Le faible niveau d'énergie dans la bascule est interprété comme désactivé ou 0, et le niveau élevé comme activé ou
- Ces états sont généralement connus sous le nom de bits, qui sont la plus petite unité d'information dans un ordinateur.
Un groupe de 16 bits est appelé mot ; un mot peut être divisé en groupes de 8 bits appelés octets, et les groupes de 4 bits sont appelés quartets.
Registres CPU
Le CPU dispose de 4 registres internes, chacun de 16 bits. Les quatre premiers, AX, BX, CX et DX sont des registres à usage général et peuvent également être utilisés comme registres 8 bits, si utilisés de cette manière, il est nécessaire de les désigner par exemple par : AH et AL, qui sont les octets de poids fort et de poids faible du registre AX. Cette nomenclature est également applicable aux registres BX, CX et DX.
Les registres connus sous leurs noms spécifiques :
Register |
Specific Name |
AX |
Accumulator |
BX |
Base register |
CX |
Counting register |
DX |
Data register |
DS |
Data segment register |
ES |
Extra segment register |
SS |
Battery segment register |
CS |
Code segment register |
BP |
Base pointers register |
SI |
Source index register |
DI |
Destination index register |
SP |
Battery pointer register |
IP |
Next Instruction pointer register |
F |
Flag register |
Cependant, nous utiliserons ces registres dans la programmation des interruptions via C dans les prochains chapitres en détail, mais apprendre les bases du langage d'assemblage ici sera un bon idéal et cela nous aidera tout au long de la programmation des opérations de disque, etc.
Il est possible de visualiser les valeurs des registres internes du CPU à l'aide du programme Debug. Pour commencer à utiliser Debug, saisissez l'invite suivante sur votre ordinateur :
C:/>Déboguer <Entrée>
Sur la ligne suivante, un tiret apparaîtra, c'est l'indicateur de débogage, à ce moment, les instructions de débogage peuvent être introduites à l'aide de la commande suivante :
- r <Entrée>
Tous les contenus des registres internes du CPU sont affichés. Une alternative pour les visualiser est d'utiliser le "r" commande utilisant en paramètre le nom du registre dont on veut voir la valeur. Par exemple :
-rbx <Entrée>
Cette instruction n'affichera que le contenu du registre BX et l'indicateur de débogage passe de "-" à ":"
Lorsque l'invite est comme celle-ci, il est possible de modifier la valeur du registre qui a été vu en tapant la nouvelle valeur et <Entrée>, ou l'ancienne valeur peut être laissée en appuyant sur Entrée sans taper aucune autre valeur.
Il est possible de changer la valeur du flag register, et de l'utiliser comme structure de contrôle dans nos programmes comme nous le verrons plus tard. Chaque bit du registre a un nom et une signification particuliers, la liste suivante décrit la valeur de chaque bit, on ou off et sa relation avec les opérations du processeur :
Overflow
NV = there is no overflow
OV = there is an overflow
Direction
UP = forward
DN = backward
Interrupts
DI = deactivated
EI = activated
Sign
PL = positive
NG = negative
Zero
NZ = it is not zero
ZR = it is zero
Auxiliary Carry
NA = there is no auxiliary carry
AC = there is auxiliary carry
Parity
PO = uneven parity
PE = even parity
Carry
NC = there is no carry
CY = there is carry
Structure assembleur
En langage assembleur, les lignes de code ont deux parties, la première est le nom de l'instruction qui doit être exécutée, et la seconde sont les paramètres de la commande. Par exemple :
AJOUTER ah, bh
Ici "AJOUTER" est la commande à exécuter ; dans ce cas un ajout, et "ah" ainsi que "bh" sont les paramètres.
Le nom des Instructions en langue est composé de deux, trois ou quatre lettres. Ces instructions sont également appelées noms mnémoniques ou codes d'opération, car elles représentent une fonction que le processeur exécutera. Certaines commandes ne nécessitent pas de paramètres pour leur fonctionnement, ainsi que d'autres qui ne nécessitent qu'un seul paramètre.
Parfois, les instructions sont utilisées comme suit :
AJOUTER tout,[170]
Les parenthèses dans le deuxième paramètre nous indiquent que nous allons travailler avec le contenu de la cellule mémoire numéro 170 et non avec la valeur 170 ; c'est ce qu'on appelle la direction directe.
Nous sommes maintenant prêts à coder pour notre premier programme à l'aide du débogage. Nous allons créer un programme qui fonctionne pour illustrer ce que nous avons vu, et ce que nous allons faire, c'est ajouter deux valeurs que nous allons introduire directement dans le programme.
La première étape consiste à lancer le débogage, cette étape consiste uniquement à taper debug <Entrée> à l'invite du système d'exploitation.
Pour assembler un programme sur le Debug, le "a" (assembler) est utilisée. Lorsque cette commande est utilisée, l'adresse où vous voulez que l'assemblage commence peut être donnée en paramètre, si le paramètre est omis, l'assemblage sera initié à la localité spécifiée par CS:IP, généralement 0100h, qui est la localité où les programmes avec l'extension .COM doit être lancée. Et ce sera l'endroit que nous utiliserons puisque seul Debug peut créer ce type spécifique de programmes.
Même si à ce moment il n'est pas nécessaire de donner le "a" command un paramètre, il est recommandé de le faire pour éviter les problèmes une fois que les registres CS:IP sont utilisés, nous tapons donc :
-a0100 <Entrée>
Lorsque cela est fait, quelque chose comme ceci apparaîtra à l'écran : 0C1B:0100 et le curseur est positionné à droite de ces chiffres, notez que les quatre premiers chiffres, en système hexadécimal, peuvent être différents, mais les quatre derniers doit être 0100, puisque c'est l'adresse que nous avons indiquée comme début. Nous pouvons maintenant présenter les instructions :
0C1B : 0100 axe mobile, 0002 ; place la valeur 0002 sur le registre de l'axe
0C1B:0103 mov bx,0004; met la valeur 0004 sur le registre bx
0C1B:0106 ajouter ax,bx ; le contenu de bx est ajouté au contenu de ax
0C1B:0108 int 20 ; provoque l'arrêt du programme.
0C1B:010A
Il n'est pas nécessaire d'écrire les commentaires qui suivent le ";". Une fois la dernière commande tapée, int 20, <Entrée> est pressé sans rien écrire de plus, pour voir à nouveau l'invite du débogueur.
La dernière ligne écrite n'est pas proprement une instruction assembleur, mais plutôt un appel à une interruption du système opérationnel, ces interruptions nous permettent d'économiser beaucoup de lignes et sont très utiles pour accéder aux fonctions du système opérationnel.
Pour exécuter le programme que nous avons écrit, le "g" est utilisée, et lorsqu'elle est utilisée, nous verrons un message qui dit :
"Le programme s'est terminé normalement". Naturellement, avec un message comme celui-ci, nous ne pouvons pas être sûrs que le programme a fait l'addition, mais il existe un moyen simple de le vérifier, en utilisant le "r" commande du Debug on peut voir le contenu de tous les registres du processeur, il suffit de taper :
-r <Entrée>
Chaque registre avec sa valeur réelle respective apparaîtra à l'écran comme ceci :
AX=0006 BX=0004 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0C1B ES=0C1B SS=0C1B CS=0C1B IP=010A NV UP EI PL NZ NA PO NC
0C1B:010A OF DB
La possibilité que les registres contiennent des valeurs différentes existe, mais AX et BX doivent être identiques, puisque ce sont ceux que nous venons de modifier.
Une autre façon de voir les valeurs, pendant que le programme est exécuté, est d'utiliser l'adresse où nous voulons que l'exécution se termine et d'afficher les valeurs des registres comme paramètre pour "g", dans ce cas ce serait : g108, cette Instruction exécute le programme, elle s'arrête sur l'adresse 108 et affiche le contenu des registres.
Un suivi de ce qui se passe dans les registres peut être fait en utilisant le "t" commande (trace), la fonction de cette commande est d'exécuter ligne par ligne ce qui a été assemblé, en affichant à chaque fois le contenu des registres.
Pour quitter le débogage, utilisez le "q" (quitter) la commande.
Avantages de l'assembleur
La première raison de travailler avec l'assembleur est qu'il offre la possibilité de mieux connaître le fonctionnement de votre PC, ce qui permet le développement de logiciels de manière plus cohérente.
La deuxième raison est le contrôle total de l'ordinateur, que vous pouvez avoir avec l'utilisation de l'assembleur. Une autre raison est que les programmes basés sur l'assemblage sont plus rapides et, dans certains cas, ils sont plus petits et ont de plus grandes capacités que ceux créés avec d'autres langages.
Laissez-moi tenir ma promesse !!
Dans la partie précédente de ce chapitre, nous avons utilisé des instructions comme exemple, pour faire la sauvegarde de DBR et pour charger la sauvegarde de DBR à son emplacement d'origine lorsque cela est nécessaire. Nous examinons d'abord l'Instruction pour effectuer la sauvegarde.
C:\>DEBUG A:\BKDBR.BIN <Entrée>
Fichier introuvable
- L 100 2 0 1 <Entrée>
- R CX <Entrée>
CX 0000
: 200 <Entrée>
- W <Entrée>
Écriture de 00 200 octets
- Q <Entrée>
Dans cet exemple, commençons à étudier à partir de la première ligne. La commande DEBUG A:\BKDBR.BIN Initialise la commande de débogage en créant un fichier dans le lecteur de disquette A: nommé BKDBR.BIN s'il n'y est pas déjà présent. C'est pourquoi nous avons reçu le message "Fichier introuvable" au début.
Dans notre deuxième instruction L 100 2 0 1, la commande L (load) consiste à charger le DBR du lecteur instruit. Apprenons comment ? Dans cette instruction, le numéro 100 est l'adresse du tampon, où le DBR sera stocké, le numéro suivant 2 est utilisé pour le lecteur C(C :). Les numéros de lecteur sont donnés comme suit :
Drive Letter |
Number Used |
A: |
0 |
B: |
1 |
C: |
2 |
D: |
3 |
. |
. |
. |
. |
and so on |
. |
Le chiffre 0 suivant est le numéro de secteur de départ du nombre de secteurs à lire. Ici, nous utilisons 0 pour lire le 1er secteur, c'est-à-dire le secteur DBR. Le nombre suivant qui est 1 est utilisé pour informer le nombre de secteurs à lire.
Ici, nous avons donné 1 car nous ne voulons lire qu'un seul secteur. Cependant, nous pouvons utiliser les numéros et les emplacements des secteurs de départ et d'arrivée en fonction de nos besoins dans différents types d'autres opérations. Par conséquent, il chargera un secteur en partant du 1er secteur du lecteur C : vers l'emplacement de mémoire 100.
Et l'instruction R CX est utilisée pour modifier ou définir la longueur des données que nous voulons écrire dans le fichier BKDBR.BIN. Cette instruction affichera la valeur actuelle du registre CX et vous permettra d'apporter des modifications. Nous avons tapé 200 ici car la commande DEBUG utilise le système hexadécimal et la taille de DBR en hexadécimal est de 200(h) octets soit 512 octets en système décimal.
La commande W indique au DEBUG d'écrire les 200(h) octets de l'emplacement 100 dans le fichier BKDBR.BIN. Et enfin, nous utilisons l'instruction Q pour quitter le DEBUG et revenir à l'invite DOS.
Attention !!! Avertissement!!! Attention !!!
Il est strictement recommandé que vous sachiez quoi et comment vous faites dans la procédure de restauration du DBR de n'importe quel disque. Si accidentellement vous stockez le DBR illégal ou d'un autre disque, il est possible dans la plupart des cas que les données complètes du disque deviennent inaccessibles.
lorsque vous tapez la première Instruction du codage qui est :
DEBUG A :\BKDBR.BIN <Entrée>
Le fichier doit se trouver à l'emplacement indiqué où vous démarrez le programme DEBUG. Maintenant, si vous obtenez le message d'erreur "Fichier introuvable" avant l'invite DEBUG, arrêtez immédiatement le processus en utilisant la commande Q (quitter). Parce que cela signifie que le fichier BKDBR.BIN n'a pas pu être trouvé ou ouvert par le programme DEBUG et si vous continuez ce processus, certaines informations indésirables seront écrites sur DBR et cela rendra la partition complète inaccessible. |
Voyons maintenant ce que nous avons fait dans le codage des instructions de restauration du DBR à partir du fichier de sauvegarde que nous avons créé nommé BKDBR.BIN. Les commandes de DEBUG pour restaurer la sauvegarde sont les suivantes :
C:\> DEBUG A:\BKDBR.BIN <Entrée>
- W 100 2 0 1 <Entrée>
- Q <Entrée>
|
Cette instruction écrira 1 secteur d'informations du fichier BKDBR.BIN dans le lecteur de disquette (a:) dans l'emplacement mémoire 100 dans le premier secteur qui est le secteur 0 du 2ème lecteur qui est le lecteur (C:).
Stockage et chargement des programmes
Il ne semblerait pas pratique de taper un programme entier à chaque fois que cela est nécessaire, et pour éviter cela il est possible de stocker un programme sur le disque, avec l'énorme avantage qu'en étant déjà assemblé il ne sera pas nécessaire de l'exécuter Déboguer à nouveau pour l'exécuter.
Les étapes pour enregistrer un programme déjà stocké en mémoire sont :
- Obtenir la longueur du programme en soustrayant l'adresse finale de l'adresse initiale, naturellement en système hexadécimal.
- Donnez un nom et une extension au programme.
- Mettez la durée du programme dans le registre CX.
- Commandez Debug pour écrire le programme sur le disque.
En utilisant le programme suivant comme exemple, nous aurons une idée plus claire de la façon de suivre ces étapes. Une fois le programme assemblé, il ressemblera à ceci :
0C1B:0100 mov ax,0002
0C1B:0103 mov bx,0004
0C1B:0106 add ax,bx
0C1B:0108 int 20
0C1B:010 A
-h 10a 100
020a 000a
-n test.com
-rcx
CX 0000
:000a
-w
Écriture de 000 A octets
Pour obtenir la durée d'un programme, le "h" La commande est utilisée, car elle nous montrera l'addition et la soustraction de deux nombres en hexadécimal. Pour obtenir la longueur du nôtre, nous lui donnons en paramètres la valeur de l'adresse finale de notre programme (10A), et l'adresse initiale du programme (100). Le premier résultat que la commande nous montre est l'addition des paramètres et le second est la soustraction.
Le "n" La commande nous permet de nommer le programme. Le "rcx" La commande nous permet de changer le contenu du registre CX à la valeur que nous avons obtenue à partir de la taille du fichier avec "h", dans ce cas 000a, puisque le résultat de la soustraction de l'adresse finale de l'adresse initiale.
Enfin, le "w" La commande écrit notre programme sur le disque, en indiquant combien d'octets il a écrit. De plus, pour enregistrer un fichier déjà chargé, deux étapes sont nécessaires :
- Donnez le nom du fichier à charger.
- Chargez-le en utilisant le "l" (charger) la commande.
Pour obtenir le résultat correct des étapes suivantes, il est nécessaire que le programme ci-dessus soit déjà créé.
Dans Debug, nous écrivons ce qui suit :
-n test.com
-l
-u 100 109
0C3D:0100 B80200 MOV AX,0002
0C3D:0103 BB0400 MOV BX,0004
0C3D:0106 01D8 ADD AX,BX
0C3D:0108 CD20 INT 20
Le dernier "u" La commande est utilisée pour vérifier que le programme a été chargé en mémoire. Ce qu'il fait, c'est qu'il désassemble le code et le montre désassemblé. Les paramètres indiquent à DEBUG d'où et jusqu'où désassembler. DEBUG charge toujours les programmes en mémoire à l'adresse 100H, autrement indiqué.
Segments
L'architecture des processeurs x86 oblige à l'utilisation de segments de mémoire pour gérer les informations, la taille de ces segments est de 64ko.
La raison d'être de ces segments est que, considérant que la taille maximale d'un nombre que le processeur peut gérer est donnée par un mot de 16 bits ou registre, il ne serait pas possible d'accéder à plus de 65536 localités de mémoire en utilisant un seul de ces registres, mais maintenant, si la mémoire est divisée en groupes ou segments, chacun de 65536 localités, et nous utilisons une adresse sur un registre exclusif pour trouver chaque segment, puis nous faisons chaque adresse d'un emplacement spécifique avec deux registres, et il nous est possible d'accéder à une quantité de 4294967296 octets de mémoire.
Pour que l'assembleur puisse gérer les données, il est nécessaire que chaque information ou Instruction se retrouve dans la zone qui correspond à ses segments respectifs. L'assembleur accède à ces informations en tenant compte de la localisation du segment, donnée par les registres DS, ES, SS et CS et à l'intérieur du registre l'adresse de l'information spécifiée. C'est pour cette raison que lorsque nous créons un programme en utilisant le Debug sur chaque ligne que nous assemblons, quelque chose comme ceci apparaît :
1CB0:0102 MOV AX,BX
Où le premier numéro, 1CB0, correspond au segment de mémoire utilisé, le second fait référence à l'adresse à l'intérieur de ce segment, et les instructions qui seront stockées à partir de cette adresse suivent.
L'assembleur ajuste la taille des segments en prenant comme base le nombre d'octets dont chaque instruction assemblée a besoin, car ce serait un gaspillage de mémoire d'utiliser les segments entiers. Par exemple, si un programme n'a besoin que de 10 Ko pour stocker des données, le segment de données ne sera que de 10 Ko et non des 64 Ko qu'il peut gérer.
Mouvement des données
Je liste ici quelques instructions en langage d'assemblage pour les opérations de données pour votre connaissance et votre commodité, lorsque nous ferons de la programmation à l'aide d'interruptions et d'autres opérations du BIOS, nous aurons besoin de ses bases.
Une introduction détaillée et une étude approfondie du langage d'assemblage dépassent les limites de ce livre. Bien que la connaissance des bases de l'assemblage soit nécessaire pour continuer dans les autres chapitres de programmation importants, si vous avez du mal à comprendre toutes les instructions, vous n'avez pas à vous inquiéter, mais il est recommandé que vous acquériez l'idée de base des instructions.
Dans tout programme, il est nécessaire de déplacer les données dans la mémoire et dans les registres du CPU et il existe plusieurs façons de le faire. il peut copier des données dans la mémoire vers un registre, d'un registre à l'autre, d'un registre à une pile, d'une pile à un registre, pour transmettre des données à des périphériques externes et vice versa.
Ce mouvement de données est soumis à des règles et des restrictions. Voici quelques-uns d'entre eux :
- Il n'est pas possible de déplacer directement des données d'un emplacement de mémoire à un autre. Il faut d'abord déplacer les données du lieu source vers un registre puis du registre vers la localité de destination.
- Il n'est pas possible de déplacer une constante directement vers un registre de segment ; il doit d'abord être déplacé vers un registre du CPU.
- Il est possible de déplacer des blocs de données au moyen des instructions MOVS, qui copient une chaîne d'octets ou de mots. MOCSB qui copie n octets d'un emplacement à un autre et MOVSW copie n mots d'un emplacement à un autre. Les deux dernières instructions prennent les valeurs des adresses définies par DS:SI comme groupe de données à déplacer et ES:DI comme nouvelle localisation des données.
Pour déplacer des données, il existe également des structures appelées batteries, où les données sont introduites avec l'instruction push et sont extraites avec l'instruction pop. Dans une pile, la première donnée à introduire est la dernière que nous pouvons prendre, c'est-à-dire si dans notre programme nous utilisons ces instructions :
PUSH AX
PUSH BX
PUSH CX
Pour renvoyer les valeurs correctes à chaque registre au moment de les retirer de la pile, il est nécessaire de le faire dans l'ordre suivant :
POP CX
POP BX
POP AX
Pour la communication avec des périphériques externes, la commande out est utilisée pour envoyer des informations à un port et la commande in pour lire les informations reçues d'un port.
La syntaxe de la commande OUT est :
SORTIE DX,AX
Où DX contient la valeur du port qui sera utilisé pour la communication et AX contient les informations qui seront envoyées.
La syntaxe de la commande IN est :
EN AX,DX
Où AX est le registre où les informations entrantes seront conservées et DX contient l'adresse du port par lequel les informations arriveront.
Instruction MOV
Utilisé pour le transfert de données entre les cellules de mémoire, les registres et l'accumulateur. La syntaxe est la suivante :
Mov destination, source
Les différents mouvements de données autorisés pour cette Instruction sont indiqués dans le tableau ci-après :
S. No. |
Destination |
Source |
1. |
memory |
accumulator |
2. |
accumulator |
memory |
3. |
segment register |
memory/register |
4 |
memory/register |
segment register |
5. |
Register |
register |
6. |
Register |
memory |
7. |
memory |
register |
8. |
Register |
immediate data |
9. |
memory |
immediate data |
Voyons un exemple :
MOV AX,0006
MOV BX,AX
MOV AX,4C00
INT 21
Ce programme déplace la valeur de 0006H vers le registre AX, puis il déplace le contenu de AX (0006h) vers le registre BX, et enfin il déplace la valeur 4C00h vers le registre AX pour terminer l'exécution avec l'option 4C de l'interruption de 21h. Nous ferons une brève introduction de l'interruption 13H et de l'interruption 21H plus tard.
Interruptions
Une interruption est une fonctionnalité matérielle qui amène le processeur à suspendre l'exécution, à enregistrer son état et à effectuer un transfert vers un emplacement spécifique. L'emplacement de transfert spécifie l'adresse d'un programme destiné à agir en réponse à l'interruption. Le programme exécuté à la suite de l'interruption est appelé programme de gestion des interruptions.
Par exemple : si DOS veut envoyer des informations au BIOS ou si le BIOS veut envoyer des informations au système informatique, DOS ou BIOS génèrent des interruptions. Chaque fois qu'une interruption est générée, l'ordinateur suspend ce qu'il est en train de faire et s'occupe d'abord de l'opération qui a généré l'interruption.
Chaque périphérique capable de générer une interruption reçoit un numéro d'interruption unique pour identifier quel périphérique génère ces interruptions. Nous discuterons de toutes les fonctions et sous-fonctions de l'interruption 13H, des extensions de l'interruption 13H et de l'interruption 21H dans ce livre.
Fondamentalement, les interruptions peuvent être des trois types suivants :
- Interruptions matérielles internes
- Interruptions matérielles externes
- Interruptions logicielles
Interruptions matérielles internes
Les interruptions internes sont générées par certains événements qui surviennent lors de l'exécution d'un programme. Ce type d'interruptions est géré dans leur totalité par le matériel et il n'est pas possible de les modifier.
Un exemple clair de ce type d'interruptions est celle qui actualise le compteur de l'horloge interne de l'ordinateur, le matériel fait appel à cette interruption plusieurs fois pendant une seconde afin de maintenir l'heure à jour.
Bien que nous ne puissions pas gérer directement cette interruption, puisque nous ne pouvons pas contrôler la mise à jour du temps au moyen d'un logiciel, il est cependant possible d'utiliser ses effets sur l'ordinateur à notre avantage.
Par exemple : pour créer une horloge virtuelle mise à jour en permanence, il suffit d'écrire un programme qui lit la valeur réelle du compteur et de la traduire dans un format compréhensible pour l'utilisateur.
Interruptions matérielles externes
Les interruptions externes sont générées par des périphériques, tels que des claviers, des imprimantes, des cartes de communication, etc. Elles sont également générées par des coprocesseurs. Il n'est pas possible de désactiver les interruptions externes.
Ces interruptions ne sont pas envoyées directement au CPU mais elles sont envoyées à un circuit intégré dont la fonction est de gérer exclusivement ce type d'interruptions
Interruptions logicielles
Les interruptions logicielles peuvent être directement activées par l'assembleur en invoquant le numéro de l'interruption souhaitée avec l'instruction INT.
L'utilisation d'interruptions nous aide dans la création de programmes et en les utilisant nos programmes deviennent plus courts. Il est plus facile de les comprendre et ils ont généralement de meilleures performances, principalement en raison de leur petite taille. Ce type d'interruptions peut être séparé en deux catégories : les interruptions DOS du système d'exploitation et les interruptions du BIOS.
La différence entre les deux est que les interruptions du système opérationnel sont plus faciles à utiliser mais elles sont également plus lentes car ces interruptions utilisent le BIOS pour atteindre leur objectif, d'autre part les interruptions du BIOS sont beaucoup plus rapides mais elles ont le inconvénient que puisqu'ils font partie du matériel, ils sont très spécifiques et peuvent varier même en fonction de la marque du fabricant du circuit.
Le choix du type d'interruption à utiliser dépendra uniquement des caractéristiques que vous souhaitez donner à votre programme.
Puisque nous utiliserons des interruptions pour la programmation de récupération de données à l'aide du langage C via la gestion des interruptions avec C, nous ne discuterons que des Interrupt 13H, Interrupt 13H Extensions et routines Interrupt 21H spécialement. Il n'est pas si important de discuter de toutes les autres interruptions et de leurs fonctions car en langage C, des fonctions plus simples sont disponibles pour effectuer la plupart de ces tâches. Cependant, la connaissance de Interrupt 13H et de ses extensions est indispensable pour la programmation de récupération de données. |
Prenons une brève introduction de l'Interrupt 20H et de l'Interrupt 21H. La valeur écrite entre parenthèses (comme 0x20) indique comment utiliser
INT 20H ( 0x20) --> Terminer le processus
Appeler avec : CS = adresse de segment du préfixe de segment de programme
Renvoi : rien
Commentaires :
Il termine le processus en cours. C'est l'une des nombreuses méthodes qu'un programme peut utiliser pour effectuer une sortie finale. Vous pouvez également utiliser les fonctions (00H ou 31H ou 4CH) de INT 21H ou simplement INT 27H pour effectuer une sortie finale là où les fonctions 31H et 4CH de INT 21H sont généralement préférées car elles permettent de passer un code retour au processus parent.
Il est recommandé que si vous avez utilisé des blocs de contrôle de fichiers (FCB) pour écrire un fichier, vous devez d'abord fermer le fichier sinon vous risquez de perdre les données car dans l'action de sortie finale toute la mémoire qui a été prise par le processus est libéré, les tampons de fichiers sont vidés et tous les descripteurs ouverts pour les fichiers ou périphériques appartenant au processus sont fermés.
Par conséquent, si vous avez des descripteurs ouverts pour le fichier, vous risquez de perdre les données.
INT 21H (0x21)
Fonction 00H (0x00) --> Terminer le processus
Appeler avec : AH = 00H
CS = adresse de segment du préfixe de segment de programme
Renvoi : rien
Commentaires :
Cette interruption termine le processus en cours. C'est l'une des nombreuses méthodes qu'un programme peut utiliser pour effectuer une sortie finale. Pour plus d'informations, voir INT 20H
INT 21H (0x21)
Fonction 01H (0x01) --> Saisie de caractères avec écho
Appeler avec : AH = 01H
Renvoi : AL = données d'entrée 8 bits
Commentaires :
Cette interruption lit un caractère à partir du périphérique d'entrée standard tel qu'un clavier et le renvoie au périphérique de sortie standard. Si aucun personnage n'est prêt, attend jusqu'à ce qu'un soit disponible.
INT 21H (0x21)
Fonction 02H (0x02) --> Sortie de caractères
Appeler avec : AH = 02H
DL = données 8 bits pour la sortie
Renvoi : rien
Commentaires :
Il sort un caractère sur le périphérique de sortie standard. La sortie peut être redirigée. Si la sortie est redirigée, il n'y a aucun moyen de détecter que le disque est plein.
Les chaînes peuvent également être envoyées à l'écran en effectuant une écriture (INT 21H, Fonction 40H) à l'aide du descripteur prédéfini pour la sortie standard (0001H), si la sortie n'a pas été redirigée, ou si un descripteur a obtenu le périphérique logique CON .
INT 21H (0x21)
Fonction 03H (0x03) --> Entrée auxiliaire
Appeler avec : AH = 03H
Renvoie : AL = données d'entrée 8 bits
Commentaires :
Il lit un caractère du périphérique auxiliaire standard. La valeur par défaut est le premier port série (COM1).
Si le périphérique auxiliaire envoie des données plus rapidement que votre programme ne peut les traiter, des caractères peuvent être perdus. Il n'y a aucun moyen pour un programme utilisateur de lire l'état du périphérique auxiliaire ou de détecter des erreurs d'E/S telles que des caractères perdus, via cet appel de fonction.
INT 21H (0x21)
Fonction 04H (0x04) --> Sortie auxiliaire
Appeler avec : AH = 04H
DL = données 8 bits pour la sortie
Renvoi : rien
Commentaires :
Cette fonction de INT 21H envoie un caractère au dispositif auxiliaire standard. La valeur par défaut est le premier port série (COM1). Des chaînes peuvent également être envoyées à l'équipement auxiliaire en effectuant une écriture (INT 21H Fonction 40H) à l'aide du handle prédéfini pour l'équipement auxiliaire standard (00034) ou à l'aide d'un handle obtenu en ouvrant l'équipement logique AUX.
INT 21H (0x21)
Fonction 05H (0x05) --> Sortie imprimante
Appeler avec : AH = 05H
DL = données 8 bits pour la sortie
Renvoie : Rien
Commentaires :
Cette fonction envoie un caractère au périphérique de liste standard. Le périphérique par défaut est l'imprimante sur le premier port parallèle (LPT1). Des chaînes peuvent également être envoyées à l'imprimante en effectuant une écriture (INT 21H Fonction 40H) à l'aide du handle prédéfini pour le périphérique d'impression standard (0004H) ou à l'aide d'un handle obtenu en ouvrant le périphérique logique PRN ou LPT1.
INT 21H (0x21)
Fonction 06H (0x06) --> E/S console directe
Call with: AH = 06H
DL = function requested such that,
If output request, 00H-FEH
If input request, 0FFH
Returns: Nothing, If called with DL = 00H-0FEH
If called with DL = FFH and a character is ready
Zero flag = clear
AL = 8-bit input data
If called with DL = FFH and no character is ready
Zero flag = set
Commentaires :
Il lit un caractère à partir du périphérique d'entrée standard ou écrit un caractère sur le périphérique de sortie standard. Les E/S peuvent être redirigées mais si les E/S ont été redirigées, il n'y a aucun moyen de détecter EOF ou disque plein. Cette fonction de l'INT 21H est utilisée par les programmes qui ont besoin de lire et d'écrire tous les caractères et codes de contrôle possibles sans aucune interférence du système d'exploitation.
INT 21H (0x21)
Fonction 07H (0x07) --> Saisie de caractères non filtrée
sans écho
Call with: AH = 07H
Returns: AL = 8-bit input data
Commentaires :
Cette fonction lit un caractère du périphérique d'entrée standard sans le renvoyer au périphérique de sortie standard.
INT 21H (0x21)
Fonction 08H (0x08) --> Saisie de caractères sans
écho
Call with: AH = 08H
Returns: AL = 8-bit input data
Commentaires :
Cette fonction lit un caractère du périphérique d'entrée standard sans le renvoyer au périphérique de sortie standard.
INT 21H (0x21)
Fonction 09H (0x09) --> Chaîne d'affichage
Call with: AH = 09H
DS:DX = segment: offset of string
Returns: Nothing
Commentaires :
Il envoie une chaîne de caractères au périphérique de sortie standard. La sortie peut être redirigée. Si la sortie a été redirigée, il n'y a aucun moyen de détecter que le disque est plein. La chaîne peut également être envoyée à l'afficheur en effectuant une écriture (INT 21H Fonction 40H) à l'aide du handle prédéfini pour la sortie standard (0001H), s'il n'a pas été redirigé, ou un handle obtenu en ouvrant le dispositif logique CON.
INT 21H (0x21)
Fonction 0AH (0x0A ou 10) --> Clavier tamponné
saisie
Call with: AH = 0AH
DS:DX = segment: offset of buffer
Returns: Data placed in buffer, Returns Nothing
Commentaires :
Il lit une chaîne d'octets à partir du périphérique d'entrée standard, jusqu'à et y compris un retour chariot ASCII (0DH), et les place dans un tampon désigné par l'utilisateur. Les caractères sont renvoyés vers le périphérique de sortie standard. Le tampon utilisé par la fonction a le format suivant :
Byte |
Contents |
0 |
Maximum number of characters to read, set by program |
1 |
Number of characters actually read (excluding carriage return), set by MS-DOS |
2+ |
String read from keyboard or standard input, terminated by a carriage return (0DH) |
INT 21H (0x21)
Fonction 0BH (0x0B ou 11) --> Vérifier l'état de l'entrée
Call with: AH = 0BH
Returns: AL = 00H (if no character is available)
FFH (if at least one character is available)
Commentaires :
Vérifie si un caractère est disponible à partir du périphérique d'entrée standard tel qu'un clavier. Cette fonction est équivalente à IOCTL INT 21H Fonction 44H Sous-fonction 06H.
INT 21H (0x21)
Fonction 0CH (0x0C ou 12) --> Vider le tampon d'entrée
puis Entrée
Call with: AH = 0CH
AL = number of input to be invoked after resetting
buffer (must be 01H, 06H, 07H, 08H or 0AH)
If AL = 0AH
DS: DX = segment: offset of input buffer
Returns: If called with AL = 01H, 06H, 07H, or 08H,
AL = 8-bit input data
If called with AL= 0AH,
Nothing (data placed in buffer)
Commentaires :
Efface le tampon d'entrée standard puis appelle l'une des fonctions de saisie de caractères. L'entrée peut être redirigée. Un numéro de fonction dans AL autre que 01H, 06H, 07H, 08H ou 0AH vide le tampon d'entrée et rend le contrôle au programme appelant.
INT 21H (0x21)
Fonction 0DH (0x0D ou 13) -> Réinitialisation du disque
Appeler avec : AH = 0DH
Renvoie : Rien
Commentaires :
Cette fonction vide tous les tampons de fichiers. La fonction ne met pas à jour le répertoire du disque pour les fichiers encore ouverts.
INT 21H (0x21)
Fonction 0EH (0x0E ou 14) -> Sélectionnez le disque
Appeler avec : AH = 0EH
DL = code de conduite (0 = A, 1= B, etc.)
Renvoie : AL = nombre de lecteurs logiques dans le système
Commentaires :
Sélectionne le lecteur spécifié comme lecteur de disque actuel ou par défaut et renvoie le nombre total de lecteurs logiques dans le système.
Les applications doivent se limiter aux lettres de lecteur A-Z (0 = A, 1 = B, etc.). Les lecteurs logiques signifient le nombre total de périphériques de bloc tels que les lecteurs de disquette et de disque dur, etc. Généralement, un seul lecteur de disque dur physique est partitionné en deux lecteurs logiques ou plus.
INT 21H (0x21)
Fonction 0FH (0x0F ou 15) -> Ouvrir le fichier
Call with: AH = 0FH
S: DX = segment: offset of file control block
Returns: If function successful and file found
AL = 00H
And FCB filled in by MS-DOS is as follows:
Drive field (offset 00H) =1 for drive A, 2 for drive B, etc. Current block field (offset 0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Data field (offset 14H) = date stamp from directory
Time field (offset 16H) = time stamp from directory
Si la fonction échoue et que le fichier est introuvable
AL = 0FFH
Commentaires :
Ouvre un fichier et le rend disponible pour une opération de lecture/écriture ultérieure. Si le programme va utiliser une taille d'enregistrement autre que 128 octets, il doit définir le champ de taille d'enregistrement sur le décalage FCB 0EH après l'ouverture réussie du fichier et avant toute autre opération sur le disque.
INT 21H (0x21)
Fonction 10H (0x10 ou 16) -> Fermer le fichier
Call with: AH = 10H
DS: DX = segment: offset of file control block
Returns: If function successful (directory update successful)
AL = 00H
If function unsuccessful (file not found in directory)
AL = FFH
Commentaires :
Il est utilisé pour fermer un fichier. Il ferme un fichier, vide tous les tampons de disque interne MS-DOS associés au fichier sur le disque et met à jour le répertoire du disque si le fichier a été modifié ou étendu.
INT 21H (0x21)
Fonction 11H (0x11 ou 17) -> Trouver le premier fichier
Call with: AH = 11H
DS: DX = segment: offset of file control block
Returns: If function successful and matching file found
AL = 00H
Et le tampon à l'adresse actuelle de la zone de transfert de disque (DTA) rempli en tant que FCB normal non ouvert ou FCB étendu, selon le type de FCB entré pour fonctionner.
Si la fonction échoue (aucun nom de fichier correspondant n'a été trouvé)
AL = FFH
Commentaires :
Il recherche dans le répertoire courant sur le lecteur désigné un nom de fichier correspondant. Vous pouvez utiliser des caractères génériques (? et *). Cette fonction renvoie le premier nom de fichier correspondant.
INT 21H (0x21)
Fonction 12H (0x12 ou 18) -> Rechercher le fichier suivant
Call with: AH = 12H
DS: DX = segment: offset of file control block
Returns: If function successful and matching filename found
AL = 00H
And buffer at current disk transfer area (DTA) address set up as an unopened normal FCB or extended FCB, depending on which type of FCB was originally input to INT21H function 11H
If function unsuccessful and matching filenames not found
AL = FFH
Commentaires :
C'est le compagnon de la fonction précédente. Si la fonction INT 21H 11H a réussi, elle renvoie le nom de fichier correspondant suivant, le cas échéant. Cette fonction suppose que le FCB utilisé comme entrée a été correctement initialisé par un appel précédent à INT 21H Fonction 11H et d'éventuels appels ultérieurs à INT 21H Fonction 12H et que le nom de fichier ou l'extension recherché contient au moins un caractère générique.
INT 21H (0x21)
Fonction 13H (0x13 ou 19) -> Supprimer le fichier
Call with: AH = 13H
DS: DX = segment: offset of file control block
Returns: If function is successful and file or files deleted
AL = 00H
If function is unsuccessful and no matching files were found or at least one matching file was read-only,
AL = FFH
Commentaires :
Il supprime tous les fichiers correspondants du répertoire en cours sur le lecteur de disque par défaut ou spécifié. Vous pouvez également utiliser des caractères génériques (? et *).
INT 21H (0x21)
Fonction 14H (0x14 ou 20) -> Lecture séquentielle
Call with: AH = 14H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
Commentaires :
Cette fonction lit le prochain bloc séquentiel de données d'un fichier, puis incrémente le pointeur de fichier de manière appropriée. Le nombre d'octets de données à lire est spécifié par le champ de taille d'enregistrement (décalage 0EH) du bloc de contrôle de fichier (FCB).
L'enregistrement est lu dans la mémoire à l'adresse actuelle de la zone de transfert de disque (DTA), spécifiée par l'appel le plus récent à la fonction INT 21H 1AH. Si la taille de l'enregistrement et l'emplacement de la mémoire tampon sont tels qu'un débordement ou un bouclage de segment se produirait, la fonction échoue avec un code de retour de 02H.
INT 21H (0x21)
Fonction 15H (0x15 ou 21) --> Écriture séquentielle
Call with: AH = 15H
DS: DX = segment: offset of previously opened file control block
Returns: AL = 00H, if write successful
01H, if disk is file
02H, if segment wrap
Commentaires :
Cette fonction écrit le prochain bloc séquentiel de données dans un fichier, puis incrémente le pointeur de fichier de manière appropriée. Le nombre d'octets de données à écrire est spécifié par le champ de taille d'enregistrement (décalage 0EH) du bloc de contrôle de fichier (FCB).
INT 21H (0x21)
Fonction 16H (0x16 ou 22) --> Créer un fichier
Call with: AH = 16H
DS: DX = segment: offset of unopened file control block
Returns: If function is successful and file was created or truncated
AL = 00H
And FCB filled in by MS-DOS as follows:
Drive field (offset 00H) = 1 for drive A, 2 for drive B, etc.
Current block field (offset0CH) = 00H
Record size field (offset 0EH) = 0080H
Size field (offset 10H) = file size from directory
Date field (offset 14H) = date stamp from directory
Time field (offset 16H = time stamp from directory
If function unsuccessful (directory full)
AL = FFH
Commentaires :
Cette fonction crée une nouvelle entrée de répertoire dans le répertoire courant ou tronque tout fichier existant portant le même nom à une longueur nulle. Ouvre également le fichier pour les opérations de lecture/écriture ultérieures. Cette fonction doit être utilisée avec prudence car un fichier existant portant le nom spécifié est tronqué à zéro et toutes les données de ce fichier sont irrémédiablement perdues.
INT 21H (0x21)
Fonction 17H (0x17 ou 23) --> Renommer le fichier
Call with: AH = 17H
DS: DX = segment: offset of special file control block
Returns: If function is successful and one or more files renamed
AL = 00H
If function is unsuccessful and no matching files, or new filename matched an existing file
AL = FFH
Commentaires :
Cette fonction change le nom de tous les fichiers correspondants dans le répertoire courant sur le disque dans le lecteur spécifié.
Vous pouvez également utiliser des jokers avec cela. Le bloc de contrôle de fichier spécial a un code de lecteur, un nom de fichier et une extension dans la position habituelle (octets 0 à 0BH) et un second nom de fichier commençant 6 octets après le premier (décalage 11H).
INT 21H
Fonction 18H (0x18 ou 24) --> Réservé
INT 21H (0x21)
Fonction 19H (0x19 ou 25) --> Obtenir le disque actuel
Call with: AH = 19H
Returns: AL = drive code (0 for A drive, 1 for B drive etc.)
Commentaires :
Cette fonction renvoie le code de lecteur du lecteur de disque actuel ou par défaut.
INT 21H (0x21)
Fonction 1AH (0x1A ou 26) --> Définir l'adresse DTA
Call with: AH = 1AH
DS: DX = segment: offset of disk transfer area.
Returns: Nothing
Commentaires :
Cette fonction spécifie l'adresse de la zone de transfert de disque (DTA) à utiliser pour les appels de fonction liés à FCB suivants.
INT 21H (0x21)
Fonction 1BH (0x1B ou 27) --> Obtenir le lecteur par défaut
données
Call with: AH = 1BH
Returns: If function successful
AL = sectors per cluster
DS: DX = segment offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default drive
If function unsuccessful (invalid drive or critical error)
AL = FFH
Commentaires :
Cette fonction obtient des informations sélectionnées sur le lecteur de disque par défaut et un pointeur vers l'octet d'identification du support à partir de sa table d'allocation de fichiers.
L'octet d'ID de média a les significations suivantes :
Media Descriptor ID |
Medium |
0F0H |
3.5-inch Floppy Disk, double-sided, 18 sectors (or other) |
0F8H |
fixed disk |
0F9H |
5.25-inch Floppy Disk, double-sided, 15 sectors |
0F9H |
3.5-inch Floppy Disk, double-sided, 9 sectors |
0FCH |
5.25-inch Floppy Disk, single-sided, 9 sectors |
0FDH |
5.25-inch Floppy Disk, double-sided, 9 sectors |
0FDH |
8-inch Floppy Disk, single sided, single density |
0FEH |
5.25-inch Floppy Disk, single-sided, 8 sectors |
0FEH |
8-inch Floppy Disk, Single Sided, Single Density |
0FEH |
8-inch Floppy Disk, Double Sided, Double Density |
0FFH |
5.25-inch Floppy Disk, double-sided, 8 sectors |
INT 21H (0x21)
Fonction 1CH (0x1C ou 28) --> Obtenir les données du lecteur
Call with: AH = 1CH
DL = Drive Code
Returns: If function is successful
AL = sectors per cluster
DS: BX = segment: offset of media ID byte
CX = size of physical sector in bytes
DX = number of clusters for default or specified drive
If function is unsuccessful and invalid drive or critical error
AL = FFH
Commentaires :
Cette fonction obtient des informations d'allocation sur le lecteur de disque spécifié et un pointeur vers l'octet d'identification du support à partir de sa table d'allocation de fichiers. Reportez-vous au tableau des octets d'ID de descripteur de média, donné dans INT 21H, Fonction 1BH, pour les informations d'ID de média.
INT 21H (0x21)
Fonction 1DH (0x1D ou 29) --> Réservé
INT 21H (0x21)
Fonction 1EH (0x1E ou 30) --> Réservé
INT 21H (0x21)
Fonction 1FH (0x1F ou 31) --> Réservé
INT 21H (0x21)
Fonction 20H (0x20 ou 32) --> Réservé
INT 21H (0x21)
Fonction 21H (0x21 ou 33) --> Lecture aléatoire
Call with: AH = 21H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if read successful
01H if end of file
02H if segment wrap, read canceled
03H if partial record read at end of
file
Commentaires :
Cette fonction lit un enregistrement sélectionné d'un fichier dans la mémoire. L'enregistrement est lu en mémoire à l'adresse actuelle de la zone de transfert du disque, spécifiée par l'appel le plus récent à la fonction INT 21H 1AH.
INT 21H (0x21)
Fonction 22H (0x22 ou 34) --> Écriture aléatoire
Call with: AH = 22H
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if write successful
01H if disk full
02H if segment wrap, write canceled
Commentaires :
Cette fonction écrit les données de la mémoire dans un enregistrement sélectionné dans un fichier.
INT 21H (0x21)
Fonction 23H (0x23 ou 35) --> Obtenir la taille du fichier
Call with: AH = 23H
DS: DX = segment: offset of unopened file
control block
Returns: If function is successful and matching filename found
AL = 00H
And FCB relative-record field (offset 21H) set to the number of records in the file, rounded up if necessary to the next complete record
If function is unsuccessful and no matching file found
AL = FFH
Commentaires :
Cette fonction recherche un fichier correspondant dans le répertoire courant ; s'il en trouve un, met à jour le FCB avec la taille du fichier en termes de nombre d'enregistrements. Il n'y a pas de taille d'enregistrement par défaut pour cette fonction. Par conséquent, une valeur appropriée doit être placée dans le champ de taille d'enregistrement FCB (décalage 0EH) avant d'appeler cette fonction.
INT 21H (0x21)
Fonction 24H (0x24 ou 36) --> Définir un enregistrement relatif
numéro
Call with: AH = 24H
DS: DX = segment: offset of previously opened
file control block
Returns: AL is destroyed (other register not affected)
FCB relative-record field (offset 21H) updated
Commentaires :
Cette fonction définit le champ de numéro d'enregistrement relatif d'un bloc de contrôle de fichier (FCB) pour qu'il corresponde à la position actuelle du fichier telle qu'elle est enregistrée dans le FCB ouvert.
INT 21H (0x21)
Fonction 25H (0x25 ou 37) --> Définir le vecteur d'interruption
Call with: AH = 25H
AL = interrupt number
DS: DX = segment: offset of interrupt handling
routine
Returns: Nothing
Commentaires :
Cette fonction Initialise un vecteur d'interruption CPU pour pointer vers une routine de gestion des interruptions. Il doit être utilisé de préférence à l'édition directe de la table des vecteurs d'interruption par des applications bien comportées.
INT 21H (0x21)
Fonction 26H (0x26 ou 38) --> Créer un nouveau programme
Préfixe de segment (PSP)
Call with: AH = 26H
DX = segment: of new program segment
prefix (PSP)
Returns: Nothing
Commentaires :
Cette fonction copie le préfixe de segment de programme (PSP) du programme en cours d'exécution vers une adresse de segment spécifiée dans la mémoire libre, puis met à jour la nouvelle PSP pour la rendre utilisable par un autre programme.
INT 21H (0x21)
Fonction 27H (0x27 ou 39) --> Lecture de bloc aléatoire
Call with: AH = 27H
CX = number of records to read
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records read
01H if end of file
02H if segment wrap
03H if partial record read at end of
file
CX = actual number of records read
Commentaires :
Cette fonction lit un ou plusieurs enregistrements séquentiels d'un fichier dans la mémoire, en commençant à un emplacement de fichier désigné. Si la taille et l'emplacement de la mémoire tampon sont tels qu'un débordement ou un bouclage de segment se produirait, la fonction échoue avec un code de retour de 02H et si un enregistrement partiel est lu à la fin du fichier, le reste de l'enregistrement est rempli de zéros .
INT 21H (0x21)
Fonction 28H (0x28 ou 40) --> Écriture de bloc aléatoire
Call with: AH = 28H
CX = number of records to write
DS: DX = segment: offset of previously opened
file control block
Returns: AL = 00H if all requested records written
01H if disk full
02H if segment wrap
CX = actual number of records written
Commentaires :
Cette fonction écrit un ou plusieurs enregistrements séquentiels de la mémoire dans un fichier, en commençant à un emplacement de fichier désigné. Si la taille et l'emplacement du tampon sont tels qu'un débordement ou un bouclage de segment se produirait, la fonction échoue avec un code de retour 02H.
INT 21H (0x21)
Fonction 29H (0x29 ou 41) --> Analyser le nom du fichier
Call with: AH = 29H
AL = flags to control parsing
Bit 0 = 1, if leading separators will be
scanned off (ignored).
= 0, if leading separators will not be
scanned off
Bit 1 = 1, if drive ID byte in FCB will be
modified only if a drive was
specified in the string being parsed.
= 0, if the drive ID byte in FCB will be
modified regardless, if no drive
specifier is present in the parsed string, FCB drive code field is set to 0 (default)
Bit 2 = 1, if filename field in FCB will be
modified only if a filename is
specified in the string being parsed.
= 0, if filename field in FCB will be modified regardless, if no filename is presenting the parsed string, FCB filename is set to ASCIIZ blanks.
Bit 3 = 1, if extension field in FCB will be
modified, only if an Extension is
specified in the string being parsed.
= 0, if extension field in FCB will be
modified regardless, if no extension
is present in the parsed string, FCB
extension is set to ASCIIZ blanks
DS: SI = segment: offset of string
ES: DI = segment: offset of file control block
Returns: AL = 00H, if no wildcard characters
Encountered 01H, if parsed string
contained wildcard characters FFH,
if drive specifier invalid
DS: SI = segment: offset of first character
after parsed filename
ES: DI = segment: offset of formatted
unopened file control block
Commentaires :
Cette fonction analyse une chaîne de texte dans les différents champs d'un bloc de contrôle de fichier (FCB).
Cette fonction considère les caractères ( : . ; , = + espace de tabulation) comme des caractères de séparation et considère tous les caractères de contrôle et les caractères (: . ; , = + espace de tabulation < > | / " [ ]) comme des caractères de fin .
INT 21H (0x21)
Fonction 2AH (0x2A ou 42) --> Obtenir le jour et la date
Call with: AH = 2AH
Returns: CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
AL = day of the week (0 = Sunday,
1= Monday, etc.)
Commentaires :
Cette fonction obtient le système jour du mois, jour de la semaine, mois et année.
INT 21H (0x21)
Fonction 2BH (0x2B ou 43) --> Définir la date
Call with: AH = 2BH
CX = year (1980 through 2099)
DH = month (1 through 12)
DL = day (1 through 31)
Returns: AL = 00H if date set successfully
FFH if date not valid (ignored)
Commentaires :
Cette fonction initialise le pilote d'horloge système à une date spécifique mais l'heure système reste inchangée.
INT 21H (0x21)
Fonction 2CH (0x2C ou 44) --> Gagner du temps
Call with: AH = 2CH
Returns: CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Commentaires :
Ceci est utilisé pour obtenir l'heure du jour à partir du pilote d'horloge en temps réel du système, convertie en heures, minutes, secondes et centièmes de secondes.
INT 21H (0x21)
Fonction 2DH (0x2D ou 45) --> Régler l'heure
Call with: AH = 2DH
CH = hours (0 through 23)
CL = minutes (0 through 59)
DH = seconds (0 through 59)
DL = hundredths of seconds (0 through 99)
Returns: AL = 00H, if time set successfully
FFH, if time not valid (ignored)
Commentaires :
Cette fonction initialise l'horloge en temps réel du système à une heure, une minute, une seconde et un centième de seconde spécifiés. La date système n'est pas affectée.
INT 21H (0x21)
Fonction 2EH (0x2E ou 46) --> Définir l'indicateur de vérification
Call with: AH = 2EH
AL = 00H, if turning off verify flag
01H, if turning on verify flag
DL = 00H
Renvoi : rien
Commentaires :
Cette fonction désactive ou active l'indicateur du système d'exploitation pour la vérification automatique en lecture après écriture des données. Le paramètre par défaut de l'indicateur de vérification est DÉSACTIVÉ car la vérification en lecture après écriture ralentit les opérations sur le disque.
INT 21H (0x21)
Fonction 2FH (0x2F ou 47) --> Obtenir l'adresse DTA
Call with: AH = 2FH
Returns:ES: BX = segment: offset of disk transfer area
Commentaires :
Cette fonction obtient l'adresse actuelle de la zone de transfert de disque (DTA) pour les opérations de lecture/écriture du fichier FCB.
INT 21H (0x21)
Fonction 30H (0x30 ou 48) --> Obtenir MS-DOS
numéro de version
Call with: AH = 30H
AL = 00H
Returns: AL = major version number (MS-DOS 3.10=3, etc.)
AH = minor version number (MS-DOS 3.10= 0AH, etc.)
BH = Original Equipment Manufacturer’s
(OEM’s) serial number (OEM-dependent-usually 00H for IBM’s
PC-DOS, 0FFH or other values for MS-DOS)
BL: CX = 24-bit user serial number (optional, OEM-dependent)
Commentaires :
Il renvoie le numéro de version du système d'exploitation MS-DOS hôte.
INT 21H (0x21)
Fonction 31H (0x31 ou 49) --> Résilier et rester
Résident (TSR)
Call with: AH = 31H
AL = return code
DX = amount of memory in paragraphs, to reserve
Returns Nothing
Commentaires :
Cette fonction termine l'exécution du programme en cours d'exécution en transmettant un code de retour au processus parent mais réserve une partie ou la totalité de la mémoire du programme afin qu'elle soit recouverte par le prochain programme transitoire à charger. Cette fonction doit être utilisée de préférence à INT 27H car elle prend en charge CS pour contenir le segment du préfixe de segment de programme.
INT 21H (0x21)
Fonction 32H (0x32 ou 50) --> Réservé
INT 21H (0x21)
Fonction 33H (0x33 ou 51) --> Obtenez ou définissez l'indicateur de pause, obtenez le lecteur de démarrage
Call with: If getting break flag
AH = 33H
AL = 00H
If setting break flag
AH = 33H
AL = 01H
DL = 00H if turning break flag OFF
01H if turning break flag ON
If getting boot drive
AH = 33H
AL = 05H
Returns: If called with AL = 00H or 01H
DL = 00H break flag is OFF
01H break flag is ON
If called with AL = 05H
DL = boot drive (1 = A, 2 = B, etc.)
Commentaires :
Cette fonction obtient ou modifie l'état de l'indicateur d'arrêt du système d'exploitation, qui influence la vérification Ctrl-C lors des appels de fonction.
INT 21H (0x21)
Fonction 34H (0x34 ou 52) --> Réservé
INT 21H (0x21)
Fonction 35H (0x35 ou 53) --> Obtenir le vecteur d'interruption
Call with: AH = 35H
AL = interrupt number
Returns: ES: BX = segment: offset of interrupt handler
Commentaires :
Cette fonction obtient l'adresse de la routine actuelle de gestion des interruptions pour l'interruption machine spécifiée.
INT 21H (0x21)
Fonction 36H (0x36 ou 54) --> Obtenir l'allocation de lecteur
Informations
Call with: AH = 36H
DL = drive code (0 default, 1 = A, etc.)
Returns: If function successful
AX = sector per cluster
BX = number of available cluster
CX = bytes per sector
DX = cluster per drive
If function unsuccessful (drive invalid)
AX = FFFFH
Commentaires :
Cette fonction obtient des informations sélectionnées sur un lecteur de disque.
Cette fonction est très importante dans la programmation de récupération de données et de dépannage de disque à partir de laquelle la capacité du lecteur et l'espace libre restant et bien d'autres choses importantes peuvent être calculées.
INT 21H (0x21)
Fonction 37H (0x37 ou 55) --> Réservé
INT 21H (0x21)
Fonction 38H (0x38 ou 56) --> Obtenir ou définir le pays
information
Call with: If getting country information
AH = 38H
AL = 0, to get current country information
1-FEH, to get information for
countries with code <255
FFH, to get information for countries
with code >=255
BX = country code, if AL = FFH
DS:DX = segment: offset of buffer for returned information
If setting current country code
AH = 38H
AL = 1-FEH, country code for countries with code <255
FFH, for countries with code >=255
BX = country code, if AL = 0FFH
DX = FFFFH
Returns:
If function is successful
Carry flag = clear
And, if getting internationalization information
BX = country code
DS: DX = segment: offset of buffer holding internationalization Information.
If function is unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction obtient des informations internationales pour le pays actuel ou spécifié ou définit le code de pays actuel.
INT 21H (0x21)
Fonction 39H (0x39 ou 57) --> Créer un répertoire
Call with: AH = 39H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction crée un répertoire en utilisant le lecteur et le chemin spécifiés.
ASCIIZ est connu comme la séquence de caractères ASCII terminée par, Null ou Zero, Byte. |
INT 21H (0x21)
Fonction 3AH (0x3A ou 58) --> Supprimer le répertoire
Call with: AH = 3AH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction supprime un répertoire en utilisant le lecteur et le chemin spécifiés. Si un élément du chemin d'accès n'existe pas ou si le répertoire n'est pas vide ou si l'accès est refusé ou si le répertoire spécifié est également le répertoire courant, la fonction de suppression du répertoire échoue.
INT 21H (0x21)
Fonction 3BH (0x3B ou 59) --> Ensemble actuel
répertoire
Call with: AH = 3BH
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction définit le répertoire actuel ou par défaut en utilisant le lecteur et le chemin spécifiés. Si le chemin spécifié ou tout élément du chemin n'existe pas, la fonction échoue.
INT 21H (0x21)
Fonction 3CH (0x3C ou 60) --> Créer un fichier
Call with: AH = 3CH
CX = file attribute, where attribute
significance bits may be Combined.
La signification des bits est donnée dans le tableau suivant :
Bit(s) |
Significance (if set) |
0 |
Read-only |
1 |
Hidden |
2 |
System |
3 |
Volume label |
4 |
Reserved (0) |
5 |
Archive |
6 – 15 |
Reserved (0) |
DS: DX = segment: offset of ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Si un nom de chemin ASCIIZ est donné, cette fonction crée un nouveau fichier dans le répertoire désigné ou par défaut sur le lecteur de disque désigné ou par défaut. Si le fichier spécifié existe déjà, il est tronqué à zéro. Dans les deux cas, le fichier est ouvert et un descripteur est renvoyé qui peut être utilisé par le programme pour un accès ultérieur au fichier.
Si un élément du nom de chemin n'existe pas ou si un fichier est en cours de création dans le répertoire racine et que le répertoire racine est plein ou que l'accès est refusé ou qu'un fichier avec l'attribut lecture seule se trouve déjà dans le répertoire spécifié, la fonction de création de fichier échoue .
INT 21H (0x21)
Fonction 3DH (0x3D ou 61) --> Ouvrir le fichier
Call with: AH = 3DH
AL = access mode
La signification des bits de mode d'accès est donnée dans le tableau suivant :
Bits |
Significance |
0 – 2 |
Access Mode
000 = read access
001 = write access
010 = read/write access |
3 |
Reserved (0) |
4 – 6 |
Sharing Mode
000 = compatibility mode
001 = deny all
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance flag
0 = child process inherits handle
1 = child does not inherit handle |
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
AX = handle
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Si un nom de chemin ASCIIZ est donné, cette fonction ouvre le fichier spécifié dans le répertoire désigné ou par défaut sur le lecteur de disque désigné ou par défaut. Un descripteur est retourné qui peut être utilisé par le programme pour un accès ultérieur au fichier.
INT 21H (0x21)
Fonction 3EH (0x3E ou 62) --> Fermer le fichier
Call with: AH = 3EH
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction vide tous les tampons internes associés au fichier sur le disque, ferme le fichier et libère le descripteur pour réutilisation, précédemment ouvert ou créé avec succès d'un descripteur donné. Si le fichier a été modifié, l'horodatage et la taille du fichier sont mis à jour dans l'entrée de répertoire du fichier.
INT 21H (0x21)
Fonction 3FH (0x3F ou 63) --> Lire le fichier ou l'appareil
Call with: AH = 3FH
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction transfère les données à la position actuelle du pointeur de fichier du fichier vers le tampon, puis met à jour la position du pointeur de fichier pour un descripteur de fichier valide donné à partir d'une opération d'ouverture ou de création précédente, une adresse de tampon et une longueur en octets .
INT 21H (0x21)
Fonction 40H (0x40 ou 64) --> Écrire un fichier ou un appareil
Call with: AH = 40H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = byte transferred
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction transfère les données du tampon dans le fichier, puis met à jour la position du pointeur de fichier pour un descripteur de fichier valide donné à partir d'une opération d'ouverture ou de création précédente, une adresse de tampon et une longueur en octets. Si la fonction est appelée avec CX = 0, le fichier est tronqué ou étendu à la position actuelle du pointeur de fichier.
INT 21H (0x21)
Fonction 41H (0x41 ou 65) --> Supprimer le fichier
Call with: AH = 41H
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction supprime un fichier du disque et du répertoire par défaut ou spécifiés. La fonction supprime un fichier en remplaçant le premier caractère de son nom de fichier dans le répertoire racine par le caractère E5H (0xE5) et en rendant les clusters du fichier disponibles pour les nouvelles données dans la table d'allocation de fichiers. Jusque-là, les données réelles stockées dans ces clusters ne sont pas écrasées.
INT 21H (0x21)
Fonction 42H (0x42 ou 66) --> Définir le pointeur de fichier
Call with: AH = 42H
AL = method code
00H absolute offset from start of file
01H signed offset from current file
pointer
02H signed offset from end of file
BX = handle
CX = most significant half of offset
DX = least significant half of offset
Returns: if function is successful
Carry flag = clear
DX = most significant half of resulting file
pointer
AX = least significant half of resulting file
pointer
If function is unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction définit l'emplacement du pointeur de fichier par rapport au début du fichier, à la fin du fichier ou à la position actuelle du fichier.
INT 21H (0x21)
Fonction 43H (0x43 ou 67) --> Obtenir ou définir un fichier
attributs
Call with: AH = 43H
AL = 00H to get attributes
01H to set attributes
CX = file attribute, if AL=01H. Bits can be combined
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful
Carry flag = clear
CX = file attribute
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction obtient ou modifie les attributs du fichier (en lecture seule, caché, système ou archive) ou du répertoire. Pour la signification des bits pour différents attributs, reportez-vous au tableau de signification des bits donné précédemment.
INT 21H (0x21)
Fonction 44H (0x44 ou 68) --> Entrée sortie
Contrôle (Ctrl E/S)
Cette fonction fournit un chemin de communication direct entre un programme d'application et un pilote de périphérique. Il permet à un programme d'obtenir des informations dépendant du matériel et de demander des opérations qui ne sont pas prises en charge par d'autres appels de fonction MS-DOS.
Les sous-fonctions du contrôle d'entrée et de sortie ont été données dans le tableau suivant :
Sub function |
Operation Name |
00H |
Get Device Information |
01H |
Set Device Information |
02H |
Receive Control Data from Character Device Driver |
03H |
Send Control Data to Character Device Driver |
04H |
Receive Control Data from Block Device Driver |
05H |
Send Control Data to Block Device Driver |
06H |
Check Input Status |
07H |
Check Output Status |
08H |
Check If Block Device Is Removable |
09H |
Check If Block Device Is Remote |
0AH (10) |
Check If Handle Is Remote |
0BH (11) |
Change Sharing Retry Count |
0CH (12)
|
Generic I/O Control for Character Devices
Value |
Description |
CL = 45H |
Set Iteration Count |
CL = 4AH |
Select Code Page |
CL = 4CH |
Start Code Page Preparation |
CL = 4DH |
End Code Page Preparation |
CL = 5FH |
Set Display Information |
CL = 65H |
Get Iteration Count |
CL = 6AH |
Query Selected Code Page |
CL = 6BH |
Query Prepare List |
CL = 7FH |
Get Display Information |
|
0DH (13)
|
Generic I/O Control for Block Devices
Value |
Description |
CL = 40H |
Set Device Parameters |
CL = 41H |
Write Track |
CL = 42H |
Format and Verify Track |
CL = 47H |
Set Access Flag |
CL = 60H |
Get Device Parameters |
CL = 61H |
Read Track |
CL = 62H |
Verify Track |
CL = 67H |
Get Access Flag |
|
0EH (14) |
Get Logical Drive Map |
0FH (15) |
Set Logical Drive Map |
INT 21H (0x21)
Fonction 44H (0x44 ou 68), sous-fonction 00H (0x00)
Ctrl E/S --> obtenir des informations sur l'appareil
Call with: AH = 44H
AL = 00H
BX = handle
Returns: If function successful
Carry flag = clear
DX = device information word
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction renvoie un mot d'information de périphérique pour le fichier ou le périphérique associé au descripteur spécifié.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), sous-fonction 01H (0x01)
Ctrl E/S --> définir les informations sur l'appareil
Call with: AH = 44H
AL = 01H
BX = handle
DX = device information word
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction de la fonction 44H de INT 21H, définit certains drapeaux pour une poignée associée à un périphérique de caractères. Cette sous-fonction ne peut pas être utilisée pour un descripteur associé à un fichier.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 02H (0x02)
Ctrl E/S --> dispositif de caractère de données de contrôle de lecture
chauffeur
Call with: AH = 44H
AL = 02H
BX = handle
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function is successful
Carry flag = clear
AX = bytes read
And buffer contains control data from driver
If function is unsuccessful
Carry flag = set
AX = error code
Commentaires :
Il lit les données de contrôle à partir d'un pilote de périphérique de caractères. La longueur et le contenu des données sont spécifiés pour chaque pilote de périphérique et ne suivent aucun format standard. Cette fonction n'entraîne pas nécessairement une entrée de l'appareil physique.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 03H (0x03)
Ctrl E/S --> écrire un périphérique de caractère de données de contrôle
chauffeur
Call with: AH = 44H
AL = 03H
BX = handle
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction transfère les données de contrôle d'une application vers un pilote de périphérique de caractères. La longueur et le contenu des données sont spécifiques à chaque pilote de périphérique et ne suivent aucun format standard. Cette fonction n'entraîne pas nécessairement une sortie vers le périphérique physique.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 04H (0x04)
Ctrl E/S --> Lire le pilote de périphérique de bloc de données de contrôle
Call with: AH = 44H
AL = 04H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to read
DS: DX = segment: offset of buffer
Returns: If function successful
Carry flag = clear
AX = bytes transferred
And buffer contains control data from device driver
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction transfère les données de contrôle d'un pilote de périphérique bloc directement dans la mémoire tampon d'un programme d'application. La longueur et le contenu des données sont spécifiques à chaque pilote de périphérique et ne suivent aucun format standard. Cette fonction n'entraîne pas nécessairement une entrée de l'appareil physique.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 05H (0x05)
Ctrl E/S --> écrire un pilote de périphérique de bloc de données de contrôle
Call with: AH = 44H
AL = 05H
BL = device code (0= default, 1=A, 2=B, etc.)
CX = number of bytes to write
DS: DX = segment: offset of data
Returns: If function successful
Carry flag = clear
AX = bytes transferred
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction transfère les données de contrôle d'un programme d'application directement vers un pilote de périphérique bloc. La longueur et le contenu des données de contrôle sont spécifiques à chaque pilote de périphérique et ne suivent aucun format standard. Cette fonction n'entraîne pas nécessairement de sortie vers l'appareil physique.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 06H (0x06)
Ctrl E/S --> vérifier l'état de l'entrée
Call with: AH = 44H
AL = 06H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = 00H, if file pointer at EOF
FFH, if file pointer not at EOF
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Il renvoie un code indiquant si le périphérique ou les fichiers associés à une poignée sont prêts à être saisis.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 07H (0x07)
Ctrl E/S --> vérifier l'état de la sortie
Call with: AH = 44H
AL = 07H
BX = handle
Returns: If function successful
Carry flag = clear
And for a device:
AL = 00H, if device not ready
FFH, if device ready
For a file:
AL = FFH
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Il renvoie un code indiquant si le périphérique associé à une poignée est prêt pour la sortie.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 08H (0x08)
Ctrl E/S --> vérifier si le périphérique de blocage est amovible
Call with: AH = 44H
AL = 08H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = 00H, if medium is removable
01H, if medium is not removable
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction vérifie si le périphérique bloc spécifié contient un support de stockage amovible, tel qu'une disquette. Si un fichier n'est pas trouvé comme prévu sur un lecteur particulier, un programme peut utiliser cette sous-fonction pour déterminer si l'utilisateur doit être invité à insérer un autre disque.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 09H (0x09)
Ctrl E/S --> vérifier si le périphérique de blocage est distant
Call with: AH = 44H
AL = 09H
BL = drive number (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
DX = device attribute word
bit 12 = 0, if drive is local
= 1, if drive is remote
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction vérifie si le périphérique de bloc spécifié est local (attaché à l'ordinateur exécutant le programme) ou distant (redirigé vers un serveur réseau).
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 0AH (0x0A ou 10) I/O Ctrl --> vérifier si la poignée est à distance
Call with: AH = 44H
AL = 0AH
BX = handle
Returns: If function successful
Carry flag = clear
DX = attribute word for file or device
bit 15 = 0 if local
1 if remote
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Il vérifie si le descripteur spécifié fait référence à un fichier ou un périphérique local (situé sur le PC qui exécute le programme) ou distant (situé sur un serveur réseau).
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 0BH (0x0B ou 11) I/O Ctrl --> modifier le nombre de tentatives de partage
Call with: AH = 44H
AL = 0BH
CX = delays per retry (default = 1)
DX = number of retries (default = 3)
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction définit le nombre de fois que MS-DOS tente à nouveau une opération de disque après un échec causé par une violation de partage de fichiers avant de renvoyer une erreur au processus demandeur. Cette sous-fonction n'est disponible que si le module de partage de fichiers est chargé.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 0CH (0x0C ou 12) I/O Ctrl contrôle I/O générique pour
appareils de caractères
Call with: AH = 44H
AL = 0CH
BX = handle
CH =code de catégorie (majeure) :
00H = unknown
01H = COM1, COM2, COM3,OR COM4
03H = CON (keyboard and display)
05H = LPT1, LPT2, OR LPT3
CL = code de fonction (mineur) :
45H = Set Iteration Count
4AH = Select Code Page
4CH = Start Code Page Preparation
4DH = End Code Page Preparation
5FH = Set Display Information
65H = Get Iteration Count
6AH = Query Selected Code Page
6BH = Query Prepare List
7FH = Get Display Information
DS : DX = segment : décalage du bloc de paramètres
Returns: If function successful
Carry flag = clear
And if called with CL = 65H, 6AH, 6BH or 7FH
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Il fournit un mécanisme à usage général pour la communication entre les programmes d'application et les pilotes de périphériques de caractères.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 0DH (0x0D ou 13) I/O Ctrl --> contrôle d'E/S générique pour le bloc
appareils
Call with: AH = 44H
AL = 0DH
BL = drive code (0 =default, 1=A, 2=B, etc.)
CH = category (major) code:
08H = disk drive
CL = function (minor) code:
40H = Set Drive Parameters
41H = Write Track
42H = Format and Verify Track
47H = Set Access Flag
60H = Get Device Parameters
61H = Read Track
62H = Verify track
67H = Get Access Flag
DS: DX = segment: offset of parameter block
Returns: If function successful
Carry flag = clear
And if called with CL = 60H or 61H
DS: DX = segment: offset of parameter block
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction fournit un mécanisme à usage général pour la communication entre les programmes d'application et les pilotes de périphériques en mode bloc. Permet à un programme d'inspecter ou de modifier les paramètres de périphérique d'un lecteur logique et de lire, écrire, formater et vérifier les pistes du disque de manière indépendante du matériel.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 0EH (0x0E ou 14) I/O Ctrl -->> obtenir une carte de lecteur logique
Call with: AH = 44H
AL = 0EH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH logical drive code (1=A,
2=B, etc.) mapped to the block device
If function unsuccessful
Carry flag = set
AX =error code
Commentaires :
Il renvoie le code de lecteur logique qui a été utilisé le plus récemment pour accéder au lecteur de bloc spécifié.
INT 21H (0x21)
Fonction 44H (0x44 ou 68), Sous-fonction 0FH (0x0F ou 15) I/O Ctrl --> définir le mappage du lecteur logique
Call with: AH = 44H
AL = 0FH
BL = drive code (0 = default, 1=A, 2=B, etc.)
Returns: If function successful
Carry flag = clear
AL = mapping code
00H, if only one logical drive code
assigned to the block device
01H-1AH, logical drive code (1=A,
2=B, etc.) mapped to the
block device
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction définit le prochain code de lecteur logique qui sera utilisé pour référencer un périphérique de bloc.
INT 21H (0x21)
Fonction 45H (0x45 ou 69) --> Descripteur en double
Call with: AH = 45H
BX = handle to be duplicated
Returns: If function successful
Carry flag = clear
AX = new handle
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction renvoie une nouvelle poignée qui fait référence au même périphérique ou fichier à la même position pour une poignée donnée pour un périphérique ou un fichier actuellement ouvert.
INT 21H (0x21)
Fonction 46H (0x46 ou 70) --> Descripteur de redirection
Call with: AH = 46H
BX = handle for file or device
CX = handle to be redirected
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
S'il y a deux descripteurs donnés, cette fonction fait en sorte que le deuxième descripteur se réfère au même périphérique ou fichier au même emplacement que le premier descripteur. Le second handle est alors dit redirigé.
INT 21H (0x21)
Fonction 47H (0x47 ou 71) --> Être à jour
répertoire
Call with: AH = 47H
DL = drive code (0 =default, 1=A,
2=B, etc.)
DS: SI = segment: offset of 64-byte buffer
Returns: If function is successful
Carry flag = clear
And buffer is filled in with full pathname from root of current directory.
If function is unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction obtient une chaîne ASCIIZ qui décrit le chemin de la racine au répertoire courant, et le nom de ce répertoire.
INT 21H (0x21)
Fonction 48H (0x48 ou 72) --> Allouer de la mémoire
bloquer
Call with: AH = 48H
BX = number of paragraphs of memory
needed
Returns: If function successful
Carry flag = clear
Ax = base segment address of allocated
block
If function unsuccessful
Carry flag = set
AX = error code
BX = size of largest available block
(paragraphs)
Commentaires :
Il alloue un bloc de mémoire et renvoie un pointeur vers le début de la zone allouée.
INT 21H (0x21)
Fonction 49H (0x49 ou 73) --> Libérer de la mémoire
bloquer
Call with: AH = 49H
ES = segment of block to be released
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction est utilisée pour libérer un bloc de mémoire et le rendre disponible pour une utilisation par d'autres programmes. La fonction échouera ou peut provoquer des erreurs système imprévisibles si le programme libère un bloc mémoire qui ne lui appartient pas ou si l'adresse de segment passée dans le registre ES n'est pas une adresse de base valide pour un bloc mémoire existant.
INT 21H (0x21)
Fonction 4AH (0x4A ou 74) --> Redimensionner la mémoire
bloquer
Call with: AH = 4AH
BX = desired new block size in paragraphs
ES = segment of block to be modified
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
BX = maximum block size available
(paragraphs)
Commentaires :
Cette fonction réduit ou étend dynamiquement un bloc de mémoire, selon les besoins d'un programme d'application.
INT 21H (0x21)
Fonction 4BH (0x4B ou 75) --> Exécuter le programme (EXEC)
Call with: AH = 4BH
AL = sub function
00H = Load and Execute Program
03H = Load Overlay
ES: BX = segment: offset of parameter block
DS: DX = segment: offset of ASCIIZ program
pathname
Returns: If function successful
Carry flag = clear
Registers are preserved in the usual fashion.
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction permet à un programme d'application d'exécuter un autre programme, reprenant le contrôle lorsqu'il est terminé. Peut également être utilisé pour charger des superpositions, bien que cette utilisation soit peu courante.
INT 21H (0x21)
Fonction 4CH (0x4C ou 76) --> Terminer le processus
avec code de retour
Call with: AH = 4CH
AL = return code
Returns: Nothing
Commentaires :
Cette fonction termine le processus en cours en transmettant un code de retour au processus parent. C'est l'une des nombreuses méthodes qu'un programme peut utiliser pour effectuer une sortie finale.
INT 21H (0x21)
Fonction 4DH (0x4D ou 77) --> Obtenir le code de retour
Appeler avec : AH = 4DH
Renvoie : AH = type de sortie
00H, si terminaison normale par INT 20H, INT 21H
Fonction 00H, ou INT 21H Fonctions 4CH
01H si résiliation par l'entrée de l'utilisateur de Ctrl-C
02H si résiliation par le gestionnaire d'erreurs critiques
03H si terminaison par INT21H Fonction 31H ou
INT 27H |
AL = return code passed by child process
(0 if child terminated by INT 20H,
INT 21H Function 00H, or INT 27H)
Commentaires :
Cette fonction est utilisée par un processus parent, après l'exécution réussie d'un appel EXEC (INT 21H Function 4BH), pour obtenir le code de retour et le type de terminaison d'un processus enfant.
INT 21H (0x21)
Fonction 4EH (0x4E ou 78) --> Trouver le premier fichier
Call with: AH = 4EH
CX = search attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function successful and matching file found
Carry flag = clear
Et les résultats de recherche renvoyés dans la zone de transfert de disque actuelle comme suit :
Byte(s) |
Description |
00H-14H |
Reserved (0) |
15H |
Attribute of matched file or directory |
16H-17H |
File time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23) |
18H-19H
|
File date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980) |
1AH-1DH |
File size |
1EH-2AH |
ASCIIZ filename and extension |
Si la fonction échoue
Carry flag = set
AX = error code
Commentaires :
Cette fonction recherche dans le répertoire par défaut ou spécifié sur le lecteur par défaut ou spécifié le premier fichier correspondant pour une spécification de fichier donnée sous la forme d'une chaîne ASCIIZ. Pour la signification des bits des attributs, reportez-vous au tableau de signification des bits donné précédemment.
INT 21H (0x21)
Fonction 4FH (0x4F ou 79) --> Rechercher le fichier suivant
Call with: AH = 4FH
Returns: If function is successful and matching file found
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
Commentaires :
S'il y a un appel précédent réussi à INT 21H Function 4EH, cette fonction trouve le fichier suivant dans le répertoire par défaut ou spécifié sur le lecteur par défaut ou spécifié qui correspond à la spécification de fichier d'origine.
INT 21H (0x21)
Fonction 50H (0x50 ou 80) --> Réservé
INT 21H (0x21)
Fonction 51H (0x51 ou 81) --> Réservé
INT 21H (0x21)
Fonction 52H (0x52 ou 82) --> Réservé
INT 21H (0x21)
Fonction 53H (0x53 ou 83) --> Réservé
INT 21H (0x21)
Fonction 54H (0x54 ou 84) --> Obtenir l'indicateur de vérification
Call with: AH = 54H
Returns: AL = current verify flag value
00H if verify off
01H if verify on
Commentaires :
Cette fonction obtient la valeur actuelle de l'indicateur de vérification du système (lecture après écriture).
INT 21H (0x21)
Fonction 55H (0x55 ou 85) --> Réservé
INT 21H (0x21)
Fonction 56H (0x56 ou 86) --> Renommer le fichier
Call with: AH = 56H
DS: DX = segment: offset of current ASCIIZ
pathname
ES: DI = segment: offset of new ASCIIZ
pathname
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction renomme un fichier et/ou déplace son entrée de répertoire vers un autre sur le même disque. Dans les versions MS-DOS 3.0 et ultérieures, cette fonction peut également être utilisée pour renommer des répertoires
Si un élément du nom de chemin n'existe pas ou si un fichier avec le nouveau nom de chemin existe déjà ou si la spécification du nom de chemin actuel contient un lecteur de disque différent de celui du nouveau nom de chemin ou si le fichier est déplacé vers le répertoire racine, et la racine répertoire est plein ou l'utilisateur n'a pas les droits suffisants, la fonction pour renommer les fichiers échoue.
INT 21H (0x21)
Fonction 57H (0x57 ou 87) --> Obtenir ou définir la date et l'heure du fichier
Call with: If getting date and time
AH = 57H
AL = 00H
BX = handle
If setting date and time
AH = 57H
AL = 01H
BX = handle
CX = time
bits 00H-04H = 2-second increments (0-29)
bits 05H-0AH = minutes (0-59)
bits 0BH-0FH = hours (0-23)
DX = date
bits 00H-04H = day (1-31)
bits 05H-08H = month (1-12)
bits 09H-0FH = year (relative to 1980)
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
CX = time
DX = date
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction obtient ou modifie l'horodatage dans l'entrée du répertoire racine du fichier.
INT 21H (0x21)
Fonction 58H (0x58 ou 88) --> Obtenir ou définir une stratégie d'allocation
Call with: If getting strategy code
AH = 58H
AL = 00H
If setting strategy code
AH = 58H
AL = 01H
BX = desired strategy code
00H = first fit
01H = best fit
02H = last fit
Returns: If function successful
Carry flag = clear
and, if called with AL = 00H
AX = current strategy code
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Obtient ou modifie le code indiquant la stratégie MS-DOS actuelle d'allocation des blocs de mémoire. La stratégie d'allocation de mémoire MS-DOS par défaut est First Fit (code 0).
Dans l'allocation de mémoire First fit, MS-DOS recherche les blocs de mémoire disponibles de l'adresse basse à l'adresse haute, en affectant le premier suffisamment grand pour satisfaire la demande d'allocation de bloc.
En cas de stratégie d'allocation Best fit, MS-DOS recherche tous les blocs de mémoire disponibles et attribue le plus petit bloc disponible qui satisfera la demande, quelle que soit sa position.
Dans la stratégie d'allocation de mémoire Last fit, MS-DOS recherche les blocs de mémoire disponibles des adresses hautes aux adresses basses, en affectant la plus élevée suffisamment grande pour satisfaire la demande d'allocation de bloc.
INT 21H (0x21)
Fonction 59H (0x59 ou 89) --> Obtenir une erreur étendue
Informations
Call with: AH = 59H
BX = 00H
Returns: AX = extended error code
Le tableau des codes d'erreur est donné ci-dessous :
Error Code |
Error |
01H |
function number invalid |
02H |
file not found |
03H |
path not found |
04H |
too many open files |
05H |
access denied |
06H |
handle invalid |
07H |
memory control blocks destroyed |
08H |
insufficient memory |
09H |
memory block address invalid |
0AH (10) |
environment Invalid |
0BH (11) |
format invalid |
0CH (12) |
access code invalid |
0DH (13) |
data invalid |
0EH (14) |
unknown unit |
0FH (15) |
disk drive invalid |
10H (16) |
attempted to remove current directory |
11H (17) |
not same device |
12H (18) |
no more files |
13H (19) |
disk write-protected |
14H (20) |
unknown unit |
15H (21) |
drive not ready |
16H (22) |
unknown command |
17H (23) |
data error (CRC) |
18H (24) |
bad request structure length |
19H (25) |
seek error |
1AH (26) |
unknown media type |
1BH (27) |
sector not found |
1CH (28) |
printer out of paper |
1DH (29) |
write fault |
1EH (30) |
read fault |
1FH (31) |
general failure |
20H (32) |
sharing violation |
21H (33) |
lock violation |
22H (34) |
disk change invalid |
23H (35) |
FCB unavailable |
24H (36) |
sharing buffer exceeded |
25H-31H |
reserved |
32H (50) |
unsupported network request |
33H (51) |
remote machine not listening |
34H (52) |
duplicate name on network |
35H (53) |
network name not found |
36H (54) |
network busy |
37H (55) |
device no longer exists on network |
38H (56) |
net BIOS command limit exceeded |
39H (57) |
error in network adapter hardware |
3AH (58) |
incorrect response from network |
3BH (59) |
unexpected network error |
3CH (60) |
remote adapter incompatible |
3DH (61) |
print queue full |
3EH (62) |
not enough space for print file |
3FH (63) |
print file canceled |
40H (64) |
network name deleted |
41H (65) |
network access denied |
42H (66) |
incorrect network device type |
43H (67) |
network name not found |
44H (68) |
network name limit exceeded |
45H (69) |
net BIOS session limit exceeded |
46H (70) |
file sharing temporarily paused |
47H (71) |
network request not accepted |
48H (72) |
print or disk redirection paused |
49H-4FH |
reserved |
50H (80) |
file already exists |
51H (81) |
reserved |
52H (82) |
cannot make directory |
53H (83) |
fail on INT 24H (critical error) |
54H (84) |
too many redirections |
55H (85) |
duplicate redirection |
56H (86) |
invalid password |
57H (87) |
invalid parameter |
58H (88) |
network device fault |
59H (89) |
function not supported by network |
5AH (90) |
required system component not installed |
BH = classe d'erreur
01H |
if out of resource (such as storage or handles) |
02H |
if not error, but temporary situation (such as locked region in file) that can be expected to end |
03H |
if authorization problem |
04H |
if internal error in system software |
05H |
if hardware failure |
06H |
if system software failure not the fault of the active process (such as missing configuration files) |
07H |
if application program error |
08H |
if file or item not found |
09H |
if file or item of invalid type or format |
0AH (10) |
if file or item locked |
0BH (11) |
if wrong disk in drive, bad spot on disk, or storage medium problem |
0CH (12) |
if item already exists |
0DH (13) |
unknown error |
BL = action recommandée
01H |
Retry reasonable number of times, then prompt user to select abort or ignore |
02H |
retry reasonable number of times with delay between retries, then prompt user to select abort or ignore |
03H |
get correct information from user (typically caused by incorrect file name or device specification) |
04H |
abort application with cleanup (i.e., terminate the program in as orderly a manner as possible: releasing locks, closing files, etc.) |
05H |
perform immediate exit without cleanup |
06H |
ignore error |
07H |
retry after user intervention to remove cause of error |
CH = error locus
01H unknown
02H block device (disk or disk emulator)
03H network
04H serial device
05H memory
ES: DI = ASCIIZ volume label of disk to
insert, if AX = 0022H (invalid disk change)
Commentaires :
Cette fonction obtient des informations d'erreur détaillées après un précédent appel de fonction INT 21H infructueux, y compris l'action corrective recommandée.
INT 21H (0x21)
Fonction 5AH (0x5A ou 90) --> Créer temporaire
fichier
Call with: AH = 5AH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ path
Returns: If function is successful
Carry flag = clear
AX = handle
DS: DX = segment: offset of complete ASCIIZ
pathname
If function is unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction crée un fichier avec un nom unique, dans le répertoire courant ou spécifié sur le lecteur de disque par défaut ou spécifié, et renvoie un descripteur qui peut être utilisé par le programme par le programme pour un accès ultérieur au fichier. Le nom généré pour le fichier est également renvoyé dans un tampon spécifié par le programme.
Si un élément du nom de chemin n'existe pas ou si le fichier est en cours de création dans le répertoire racine et que le répertoire racine est plein, la fonction échoue.
INT 21H (0x21)
Fonction 5BH (0x5B ou 91) --> Créer un nouveau fichier
Call with: AH = 5BH
CX = attribute (bits may be combined)
DS: DX = segment: offset of ASCIIZ pathname
Returns: If function is successful
Carry flag = clear
AX = handle
If function is unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction crée un fichier dans le répertoire désigné ou par défaut sur le lecteur désigné ou par défaut, et renvoie un descripteur qui peut être utilisé par le programme pour un accès ultérieur au fichier pour un nom de chemin ASCIIZ donné.
Si un fichier avec le même nom et le même chemin existe déjà ou si un élément du chemin spécifié n'existe pas ou si le fichier est en cours de création dans le répertoire racine, et que le répertoire racine est plein ou que l'utilisateur ne dispose pas de droits d'accès suffisants, le la fonction échoue.
INT 21H (0x21)
Fonction 5CH (0x5C ou 92) --> Verrouiller ou déverrouiller la région du fichier
Call with: AH = 5CH
AL = 00H if locking region
01H if unlocking region
BX = handle
CX = high part of region offset
DX = low part of region offset
SI = high part of region length
DI = low part of region length
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction verrouille ou déverrouille la région spécifiée d'un fichier. Cette fonction n'est disponible que si le module de partage de fichiers (tel que SHARE.EXE) est chargé.
INT 21H (0x21)
Fonction 5DH (0x5D ou 93) --> Réservé
INT 21H (0x21)
Fonction 5EH (0x5E ou 94), sous-fonction 00H (0x00)
--> Obtenir le nom de la machine
Call with: AH = 5EH
AL = 00H
DS: DX = segment: offset of buffer to receive
string
Returns: If function is successful
Carry flag = clear
CH = 00H if name not defined
<> 00H if name defined
CL = netBIOS name number (if CH <> 0)
DX: DX = segment: offset of identifier (if CH <> 0)
If function is unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction renvoie l'adresse d'une chaîne ASCIIZ identifiant l'ordinateur local. Cet appel de fonction n'est disponible que lorsque le réseau Microsoft est en cours d'exécution.
INT 21H (0x21)
Fonction 5EH (0x5E ou 94), sous-fonction 02H (0x02)
--> Définir la chaîne de configuration de l'imprimante
Call with: AH = 5EH
AL = 02H
BX = redirection list index
CX = length of setup string
DS: SI = segment: offset of setup string
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction spécifie une chaîne à envoyer devant tous les fichiers dirigés vers une imprimante réseau particulière, permettant aux utilisateurs de différents nœuds de réseau de spécifier des modes de fonctionnement individualisés sur la même imprimante.
INT 21H (0x21)
Fonction 5EH (0x5E ou 94), sous-fonction 03H (0x03)
--> Obtenir la chaîne de configuration de l'imprimante
Call with: AH = 5EH
AL = 03H
BX = redirection list index
ES: DI = segment: offset of buffer to receive
setup string
Returns: If function successful
Carry flag = clear
CX = length of printer setup string
ES: DI = segment: offset of buffer to receive
setup string
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction est utilisée pour obtenir la chaîne de configuration de l'imprimante pour une imprimante réseau particulière.
INT 21H (0x21)
Fonction 5FH (0x5F ou 95), sous-fonction 02H (0x02)
--> Obtenir l'entrée de la liste de redirection
Call with: AH = 5FH
AL = 02H
BX = redirection list index
DS: SI = segment: offset of 16-byte buffer to
receive local device name
ES: DI = segment: offset of 128-byte buffer to
receive network name
Returns: If function successful
Carry flag = clear
BH = device status flag
Bit 0 = 0 if device valid
= 1 if not valid
BL = device type
03H, if printer
04H, if drive
CX = stored parameter value
DX = destroyed
BP = destroyed
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction permet d'inspecter la liste de redirection du système, qui associe les noms logiques locaux aux fichiers, répertoires ou imprimantes du réseau. Cet appel de fonction n'est disponible que lorsque Microsoft Networks est en cours d'exécution et que le module de partage de fichiers a été chargé.
INT 21H (0x21)
Fonction 5FH (0x5F ou 95), sous-fonction 03H (0x03) --> Rediriger l'appareil
Call with: AH = 5FH
AL = 03H
BL = device type
03H, if printer
04H, if drive
DS: SI = segment: offset of ASCIIZ local
device name
ES: DI = segment: offset of ASCIIZ network
name, followed by ASCIIZ password
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Établit la redirection sur le réseau en associant un nom de périphérique local à un nom de réseau. Cet appel de fonction n'est disponible que lorsque Microsoft Networks est en cours d'exécution et que le module de partage de fichiers (SHARE.EXE) a été chargé.
INT 21H (0x21)
Fonction 5FH (0x5F ou 95), sous-fonction 04H (0x04)
--> Annuler la redirection de l'appareil
Call with: AH = 5FH
AL = 04H
DS: SI = segment: offset of ASCIIZ local
device name
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette sous-fonction annule une requête de redirection précédente en supprimant l'association d'un nom d'équipement local avec un nom de réseau. Cet appel de fonction n'est disponible que lorsque Microsoft Networks est en cours d'exécution et que le module de partage de fichiers tel que SHARE.EXE a été chargé.
INT 21H (0x21)
Fonction 60H (0x60 ou 96) --> Réservé
INT 21H (0x21)
Fonction 61H (0x61 ou 97) --> Réservé
INT 21H (0x21)
Fonction 62H (0x62 ou 98) --> Obtenir le segment de programme
Adresse de préfixe (PSP)
Call with: AH = 62H
Returns: BX = segment address of program segment
prefix
Commentaires :
Cette fonction obtient l'adresse de segment (paragraphe) du préfixe de segment de programme (PSP) pour le programme en cours d'exécution.
INT 21H (0x21)
Fonction 64H (0x64 ou 100) --> Réservé
INT 21H
Fonction 65H (0x65 ou 101) --> Obtenez une prolongation
Informations sur le pays
Call with: AH = 65H
AL = sub function
00H = Get General
Internationalization Information
02H = Get Pointer to Uppercase
Table
04H = Get Pointer to Filename
Uppercase Table
06H = Get Pointer to Collating Table
07H = Get Pointer to Double-Byte
Character Set (DBCS) Vector
BX = code page of interest (-1 = active
CON device)
CX = length of buffer to receive
information (must be >=5)
DX = country ID (-1 = default)
ES: DI = address of buffer to receive
information
Returns: If function successful
Carry flag = clear
And requested data placed in calling program’s buffer
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cela permet d'obtenir des informations sur le pays et/ou la page de codes spécifiés. Reportez-vous au tableau d'internationalisation donné précédemment pour connaître les octets d'information.
INT 21H (0x21)
Fonction 66H (0x66 ou 102) --> Obtenir ou définir le code
page
Call with: AH = 66H
AL = sub function
01H = Get Code Page
02H = Select Code Page
BX = code page to select, if AL = 02H
Returns: If function is successful
Carry flag = clear
And, if called with AL = 01H
BX = active code page
DX = default code page
If function is unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction obtient ou sélectionne la page de code actuelle.
INT 21H (0x21)
Fonction 67H (0x67 ou 103) --> Définir le nombre de poignées
Call with: AH = 67H
BX = number of desired handles
Returns: If function is successful
Carry flag = clear
If function is unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction définit le nombre maximum de fichiers et de périphériques pouvant être ouverts simultanément à l'aide de poignées par le processus en cours.
INT 21H (0x21)
Fonction 68H (0x68 ou 104) --> Commettre le fichier
Call with: AH = 68H
BX = handle
Returns: If function successful
Carry flag = clear
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction force toutes les données des tampons internes de MS DOS associés à un descripteur spécifié à être écrites physiquement sur le périphérique. Si le descripteur fait référence à un fichier et que le fichier a été modifié, l'horodatage et la taille du fichier dans l'entrée du répertoire racine du fichier sont mis à jour.
INT 21H (0x21)
Fonction 69H (0x69 ou 105) --> Réservé
INT 21H (0x21)
Fonction 6AH (0x6A ou 106) --> Réservé
INT 21H (0x21)
Fonction 6BH (0x6B ou 107) --> Réservé
INT 21H (0x21)
Fonction 6CH (0x6C ou 108) --> Fichier ouvert étendu
Call with: AH = 6CH
AL = 00H
BX = open mode
Bit(s) |
Significance |
0-2 |
Access type
000 = read-only
001 = write-only
010 = read/write |
3 |
Reserved (0) |
4-6 |
Sharing mode
000 = compatibility
001 = deny read/write (deny all)
010 = deny write
011 = deny read
100 = deny none |
7 |
Inheritance
0 = child process inherits handle
1 = child does not inherit handle |
8-12 |
Reserved (0) |
13 |
Critical error handling
0 = execute INT 24H
1 = return error to process |
14 |
Write-through
0 = writes may be buffered and deferred
1 = physical write at request time |
15 |
Reserved (0) |
CX = attribut de fichier (les bits peuvent être combinés ;
si ignoré si ouvertconsultez Bitstableau de signification.
DX = drapeau ouvert
Bit(s) |
Significance |
0-3 |
Action if file exists
0000 = fail
0001 = open file
0010 = replace file |
4-7 |
Action if file does not exists
0000 = fail
0001 = create file |
8-15 |
Reserved (0) |
DS: SI = segment: offset of ASCIIZ pathname
Returns:mIf function successful
Carry flag = clear
AX = handle
CX = action taken
1 = file existed and was
opened
2 = file did not exists and
was created
3 = file existed and was
replaced
If function unsuccessful
Carry flag = set
AX = error code
Commentaires :
Cette fonction ouvre, crée ou remplace un fichier dans le répertoire désigné ou par défaut sur le lecteur de disque désigné ou par défaut pour un chemin d'accès ASCIIZ donné et renvoie un descripteur qui peut être utilisé par le programme pour un accès ultérieur au fichier.
Si un élément du nom de chemin n'existe pas ou si le fichier est en cours de création dans le répertoire racine et que le répertoire racine est plein ou si le fichier est en cours de création et qu'un fichier portant le même nom et l'attribut en lecture seule existe déjà dans le répertoire spécifié ou l'utilisateur a des droits d'accès insuffisants, la fonction échoue.
Page modifiée le: 09/03/2022