bonjour tout le monde
pouvez vous m'aider par quelle fonction standard du langage C que je dois appeller et qui me permet d'acceder au extensions (services) d'une interruptions d'une machine INTEL X86 .
merci d'avance![]()
bonjour tout le monde
pouvez vous m'aider par quelle fonction standard du langage C que je dois appeller et qui me permet d'acceder au extensions (services) d'une interruptions d'une machine INTEL X86 .
merci d'avance![]()
Aucune fonction standard bien évidemment (comment être standard et spécifique à un processeur ? Un peu de bon sens...)
Contrairement à ce qui se faisait dans les années 90, ce n'est plus à la portée d'une application utilisateur sur PC tournant sous un système actuel (Windows, Linux, Mac).
Ca peut se faire en mode noyau[1], mais ce n'est pas pour les débutants.
Tu veux faire quoi exactement et dans quel cadre ?
------------
[1] ou en mode BOOT avant le basculement en mode protégé...
resalut
oui je sais que si la fonction standard existe,elle ne vas pas etre spécifique pour le processeur X86.
bref,moi j'ai envie de réaliser un programme C qui me permet d'avoir la capacité du disque dur en untilisant les interruptions ; sachant bien que les extentions de l'interruption 13 de la machine intel X86 donnent :le nombre de cylindre,le nombre de pistes,....
et a l'aide de toutes ces informations je pourrais calculer la capacité du disque dur
le probléme réside dans : comment je pourrais appeller une extension d'une interruption avec le langage C
et merci de me répondre .
C'est pas possible dans une application 32-bit. Si tu as un vieux complateur 16-bit comme Turbo C, il y a ce qu'il faut : int86x() déclarée dans <dos.h>. (mais ton application sera 16-bit. Ca marche encore sous Windows XP, mais pas sous Vista).
Reste plus qu'à analyser le tableau data...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include <dos.h> #include <stdio.h> int main(void) { unsigned char (*data)[512]=NULL; union REGS regs = {0}; struct SREGS xregs ={0}; regs.h.ah = 0x25; regs.h.dl=0x80; /* drive 0 */ int86x (0x13, ®s, ®s, &xregs); data = MK_FP (xregs.es, regs.x.bx); return 0; }
Sinon, en 32-bit, il faut utiliser une fonction système de l'API Win32.
MSDN est ton amie.
Partager