PB avec de l'ASM dans VC++ 6 ....

Foub12 Messages postés 44 Date d'inscription mardi 9 juillet 2002 Statut Membre Dernière intervention 1 avril 2007 - 20 août 2004 à 18:16
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 20 août 2004 à 22:28
Bonjour...

Je programme sous VC++ 6 et j'ai trouvé sur Internet, la fonction suivante mais elle ne marche pas... Il compile parfaitement mais lors de l'exécution, le code ASM fait tout planter...

Voici la fonction qui doit permettre de un secteur d'une disquette (ce que je veux faire) ou d'un disque et de mettre et de mettre les 512 octets dans mon tableau Buffer : «

int ReadSector(int _Disque, int Tete, int Piste, int Secteur, int Nombre, unsigned char *Buffer)
{
int re = 0;

__asm {

MOV AH,2h


MOV AL, Nombre //Nombre de secteur à lire...
MOV DL, _Disque //Lecteur à lire...
MOV DH, Tete //Tete
MOV CH, Piste //Piste
MOV CL, Secteur //Secteur


MOV BX,DS
MOV ES,BX
MOV BX, word ptr [Buffer]
int 0x13
jc fin
xor AX,AX

fin:
MOV word ptr re,AX
}

return re;
}

»

Voici mon main :

int main()
{
int res; // résultat de la lecture de la disquette
res = ReadSector(0, 0, 0, 1, 1, Buffer);

printf("Resultat : %d\n", res);

return 0;
}

Le programme n'essaye même pas de lire la disquette et il plante en me mettant une erreur mémoire...
HELP ME !!!

Merci d'avance pour votre aide.
Foub
A voir également:

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
20 août 2004 à 19:02
http://www.cppfrance.com/forum.v2.aspx?ID=280594
Tout y est dit et repete au moins 1 fois par semaine.

CreateFile
ReadFile
CloseHandle

ciao...
BruNews, Admin CS, MVP Visual C++
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
20 août 2004 à 22:28
Salut,
Ton programme ne peut fonctionner qu'en mode DOS pur. Si tu l'essaies sur Windows, c'est le plantage assuré car il appelle l'interruption "int 0x13". Les interruptions sont interdites sous Windows. Tu peux le tester en démarrant avec une disquette en mode DOS pur. En plus , je ne suis pas sûr que visual c++ puisse compiler des programmes destinés au mode DOS pur. J'ai déja essayé avec des projets "console" mais je recois toujours le message: "This program can'it be run in dos mode". Y'a t-il un moyen de créer des projets pour le mode DOS pur en VC++?. Si tu as le même problème, tu peux utiliser un autre compilateur DOS comme Turbo C++ (2.7 Mo), téléchargeable gratuitement sur le site de Borland. Il faudra juste modifier légérement ton code source et tout marchera très bien. Remplacer "__asm" par "asm" et ajouter ";" à la fin de chaque ligne comme: "mov AH,2h ; ". Tu devra aussi télécharger "Tasm.exe" (132 ko).
A+
0
Rejoignez-nous