Espace disk disponible [Résolu]

Messages postés
22
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
25 juin 2008
- - Dernière réponse : BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
- 16 mars 2005 à 17:22
j'aurais une question a posée

J'arrive a recupere l'espace disque disponible sans aucun soucis pas ce petit prog

.data
Free_Disk_Low dd 0
Free_Disk_High dd 0
Int64_1 dq 0 ; Temp value
Int64_2 dq 0 ; Temp Value
message1 db "espace disponible en Mo",0
message2 db "espace disponible en Go",0


.code
push offset Free_Disk_Low
push offset Int64_1 ; necessaire pour win 98/me
push offset Int64_2 ; necessaire pour win 98/me
push NULL ; null = disk courrant
call GetDiskFreeSpaceEx
xor eax,eax
jz error:
mov eax,Free_Disk_Low
shr eax,16
mov ecx,Free_Disk_High
shl ecx,16
add eax,ecx
shr eax,4
invoke MessageBox,0, val(eax) ,offset message1,MB_OK
shr eax,10
invoke MessageBox,0, val(eax) ,offset message2,MB_OK

Ne serait-il pas plus judicieux d'utiliser les registres MMX 64bits pour cette fonction ?
quelqu'uns aurait-il une idée de la demarche a suivre ?

Thierry.
Afficher la suite 

8 réponses

Meilleure réponse
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
3
Merci
Manuels Intel:
http://brunews.free.fr/brunews/download/Intel.rar

ciao...
BruNews, MVP VC++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 199 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
0
Merci
L'API attend ici des adresses mémoire, tu es donc obligé d'en donner. C'est ensuite que je ne comprends plus ton procédé, tu es certain que le nbr d'octets retourné tiendra longtemps sur 32 bits ??? A la vitesse à laquelle les disques durs augmentent...

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
salut,

xor eax,eax
jz error:

te ramenera toujours vers error car xor eax,eax met le zero flag a 1

@++
Commenter la réponse de cs_patatalo
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16
0
Merci
test eax, eax

ciao...
BruNews, MVP VC++
Commenter la réponse de BruNews
Messages postés
22
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
25 juin 2008
0
Merci
Autant pour moi, pour le xor au lieu de test

en ce qui concerne la taille de variables je l'ai mise sur deux dword collé cote a cote pour qu'ils simulent un QWORD a moins que cela de doit pas etre fait comme cela.
je decale les 16 octets fort de Free_Disk_Low a droite
je decale les 16 octets faible de Free_Disk_High a gauche
J'aditionne les deux variables
et decale le tout le 4 a droite.
C'est comme si je decaler un Qword de 20

En fait ma question, je me suis mal exprimé, etait de savoir si je peux faire cette operation directement sur un des registre 64bits MMX et comment le faire ?
un code qui ressemblerait a cela:

Attention ce code ne fonctionne pas
.data
Free_Disk dq 0
Int64_1 dq 0 ; Temp value
Int64_2 dq 0 ; Temp Value
message1 db "espace disponible en o",0
message2 db "espace disponible en Ko",0
message3 db "espace disponible en Mo",0
message4 db "espace disponible en Go",0


.code
push offset Free_Disk_Low
push offset Int64_1 ; necessaire pour win 98/me
push offset Int64_2 ; necessaire pour win 98/me
push NULL ; null = disk courrant
call GetDiskFreeSpaceEx
test eax,eax
jz error:
mov mm0,Free_Disk
invoke MessageBox,0, val(mm0) ,offset message1,MB_OK
shr mm0,10
invoke MessageBox,0, val(mm0) ,offset message2,MB_OK
shr mm0,10
invoke MessageBox,0, val(mm0) ,offset message3,MB_OK
shr mm0,10
invoke MessageBox,0, val(mm0) ,offset message4,MB_OK

vb
Commenter la réponse de VBFRANCE
Messages postés
22
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
25 juin 2008
0
Merci
oups, un petite erreur juste au dessus
il faut lire

push offset Free_Disk
et non
push offset Free_Disk_Low

vb
Commenter la réponse de VBFRANCE
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
salut,

pour decaler un qword, utilise plutot shrd/shld.

@++
Commenter la réponse de cs_patatalo
Messages postés
22
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
25 juin 2008
0
Merci
ce que je voudrais savoir, c'est comment pouvoir utiliser les registres MMX ?

J'ai une erreur du type:

coprocessor register cannot be first operand quand j'utilise le registre mm0

Thierry
Commenter la réponse de VBFRANCE