Asm : fonction 6ch de l'interruption 21h
Résolu
Utilisateur anonyme
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je suis en train de créer un programme en assembleur. Mais j'ai un problème pour l'utilisation de la fonction 6ch.
Voici la page de ma documentation sur cette interruption :
Je ne comprend pas ce qui suit
Tout ceci. Je ne vois pas comment modifier les valeurs de plusieurs bits différents. Car le résultat doit être placé dans CX, hors si l'on veut spécifier plusieurs caleurs, je ne voit pas comment faire.
Merci d'avance à ceux qui trouveront la réponse à cette question délicate =)
Je suis en train de créer un programme en assembleur. Mais j'ai un problème pour l'utilisation de la fonction 6ch.
Voici la page de ma documentation sur cette interruption :
Entrée : AH = 6Ch AL = 0 BX = Mode d'accès CX = Attribut de fichier DX = Réaction DOS DS:SI = Pointeur FAR sur le buffer contenant le nom de fichier. Sortie : Flag Carry = 0 : Tout va bien, dans ce cas AX = Handle du fichier CX = Statut Flag Carry = 1 : Erreur, dans ce cas AX = Code d'erreur 1 : Logiciel de partage de fichier absent 2 : Fichier non trouvé 3 : Chemin non trouvé ou fichier inexistant 4 : Plus de handle disponible 5 : Accès refusé 12 : Mode d'accès interdit Remarques : · Le nom de fichier doit être une chaîne ASCII terminée par un caractère de fin (code ASCII 0). Outre la désignation du périphérique, il doit contenir la désignation complète du chemin et un nom de fichier, mais pas de jokers. Si la désignation de périphérique ou de chemin fait défaut, l'accès portera sur le périphérique ou le répertoire en cours. · Le mode d'accès se construit comme suit :
Je ne comprend pas ce qui suit
Bit 0-2 : Autorisation de lecture/écriture 000b = Le fichier est destiné uniquement à la lecture 001b = Le fichier est destiné uniquement à l'écriture 010b = Le fichier est destiné à la lecture et l'écriture Bit 3 : 0b Bit 4-6 : Mode de partage de fichier 000b = Seul le programme en cours peut accéder au fichier (mode de compatibilité) 001b = Seul le programme en cours peut accéder au fichier 010b = Un autre programme peut lire le fichier mais ne peut pas y écrire 011b = Un autre programme peut écrire dans le fichier mais ne peut pas le lire 100b = Un autre programme peut écrire dans le fichier et le lire Bit 7 : Flag Handle 0 = Le programme enfant du programme en cours peut également accéder au handle de ce fichier 1 = Seul le programme en cours peut accéder au handle de ce fichier Bit 8-12 : 0b Bit 13:0 = En cas d'erreur grave, appeler l'interruption 24h 1 = En cas d'erreur grave, retourner le code d'erreur correspondant dans AX mais ne pas appeler l'interruption 24h Bit 14:1 = Lors de tout accès en écriture sur le fichier, adapter immédiatement l'entrée du répertoire Bit 15 : 0b
Tout ceci. Je ne vois pas comment modifier les valeurs de plusieurs bits différents. Car le résultat doit être placé dans CX, hors si l'on veut spécifier plusieurs caleurs, je ne voit pas comment faire.
Merci d'avance à ceux qui trouveront la réponse à cette question délicate =)
3 réponses
Le registre CX est un registre 16 bits; il peut par exemple contenir 4092h; ce qui donne aussi 0100000010010010b. Décortiquons sa signification:
Bonne continuation.
- bit 15 = 0b - bit 14 = 1b : Lors de tout accès en écriture sur le fichier, ... - bit 13 = 0b : En cas d'erreur grave, appeler l'interruption 24h - bit 8-12 = 0b - bit 7 = 1b : Seul le programme en cours peut accéder au handle ... - bit 4-6 = 001b : Seul le programme en cours peut accéder au fichier - bit 3 = 0b - bit 0-2 = 010b : Le fichier est destiné à la lecture et l'écritureChaque bit a donc une signification, mais on donne au registre la valeur de l'ensemble des bits.
Bonne continuation.
Merci, donc en gros le bit tout à gauche dans le nombre 101100100101010 vaut bien 1 (il est bien à gauche) ?
Et le bit 0 est tout à droite ?
Et le bit 0 est tout à droite ?
Affirmatif, en gros comme en petit !
Comme il s'agit d'un mot de 16 bits, le bit de gauche est le bit 15 (représente 2 puissance 15) et celui de droite le bit 0 (représente 2 puissance 0). En fait c'est comme pour un nombre décimal (Le nombre 1837 est : 1 fois 10^3 + 8 fois 10^2 + 3 fois 10^1 + 7 fois 10^0) mais en base 2.
Comme il s'agit d'un mot de 16 bits, le bit de gauche est le bit 15 (représente 2 puissance 15) et celui de droite le bit 0 (représente 2 puissance 0). En fait c'est comme pour un nombre décimal (Le nombre 1837 est : 1 fois 10^3 + 8 fois 10^2 + 3 fois 10^1 + 7 fois 10^0) mais en base 2.