Foub12
Messages postés44Date d'inscriptionmardi 9 juillet 2002StatutMembreDernière intervention 1 avril 2007
-
24 août 2004 à 03:34
Foub12
Messages postés44Date d'inscriptionmardi 9 juillet 2002StatutMembreDernière intervention 1 avril 2007
-
24 août 2004 à 21:11
Bonjour,
j'ai récupéré sur Internet les lignes suivantes, codés en assembleur qui permet de déterminer si le BIOS et les disques durs supportent des tailles supérieures à 8GO :
«
push bx cx dx;
mov ah,41h; //Fonction 41h
mov bx,55AAh; //obligatoire.
int 13h; //interruption disques BIOS
cmp bx,55AAh; //Si retourne 55AAh, BIOS et disque supporte fonctions étendues.
pop dx cx bx;
ret
»
J'ai voulu créé une fonction C, qui renverrait le résultat. Mais je ne sais pas comment récupérer la valeur que renvoie le ret ???
int LBA() {
//Fonction qui permet de tester si le BIOS supporte des
//disques supérieur à 8Go !
int res;
asm {
push bx cx dx;
mov ah, 41h;
mov bx, 55AAh;
int 13h;
cmp bx,55AAh;
pop dx cx bx;
ret
}
return res;
}
Comment récupérer dans ma variable C res, le résultat des lignes assembleur...
Merci de votre aide.
cs_EBArtSoft
Messages postés4525Date d'inscriptiondimanche 29 septembre 2002StatutModérateurDernière intervention22 avril 20199 24 août 2004 à 08:25
As tu une connaissance du language assembleur ?
a premiere vue non mais c'est pas grave le principe est que tu doit recuperer ta valeur soit en passant par la memoire soit en passant par les registres (ax,bx etc...)
ajoute ceci :
cmp bx,55AAh;
jne L0;
mov word ptr res,1;
L0:
pop dx;
pop cx;
pop bx;
ret;
Foub12
Messages postés44Date d'inscriptionmardi 9 juillet 2002StatutMembreDernière intervention 1 avril 2007 24 août 2004 à 15:21
re,
pour commencer, je voulais vous remercier de m'avoir répondu...
Alors, oui je programme avec un compiltateur DOS 16 bits donc je peux utiliser les interruptions du BIOS...
Et non, je ne sais pas programmer en ASM même si je suis BAC+4 en info et que je rentre en DESS...
EbArtSoft, ton code à l'air pas mal :
«
cmp bx,55AAh;
jne L0;
mov word ptr res,1;
L0:
pop dx;
pop cx;
pop bx;
ret;
»
mais il ne compile pas... TC++ ne reconnait pas les étiquettes...
Je sais pas comment on fait pour que le compilateur les comprenne ???
Quand à la ligne : « mov res, bx », j'ai essayé de la casé un peu partout (après le ret, avant le ret, après le cmp bc, 55AAh) mais sans réussite.... Où dois-je l'écrire ???