Page 1 sur 1

Assembleur et procedure.

Publié : sam. 23/sept./2006 15:49
par andrebernard
Bonjour

J'ai un code que m'a gentiment donné SPH et qui contiens de l'assembleur.

Code : Tout sélectionner

#src=0 
 #dst=1 
 Lecture.l 
 Byte.b 
 Hexa.l 
 Source$ = FichierSource$
 Destin$ = Destination$

 If ReadFile(#src, source$) 
  lg = Lof(#src) 
 Else 
  MessageRequester("Erreur", "Fichier impossible à lire...") 
  End 
 EndIf 

 If lg=0 
  MessageRequester("Inutilité", "Votre fichier est vide !") 
  End 
 EndIf 

 If CreateFile(#dst, destin$) = 0 
  MessageRequester("Erreur", "Fichier impossible à créer...") 
  End 
 EndIf 

 Temps = GetTickCount_() 
 Reste = lg%4 
 Paquet = lg/4 

 While paquet>0 
 
  Lecture.l = ReadLong(#src) 
  !MOV  eax,[v_Lecture] 
  !BSWAP  eax 
  !MOV [v_Hexa],eax 
  Hexa$ = RSet(Hex(Hexa.l), 8, "0") 
  WriteString(#dst, Hexa$) 
  Paquet - 1 
 
 Wend 

 While Reste > 0 
  
  Byte.b = ReadByte(#src) 
  Hexa$ = RSet(Hex(Byte.b), 2, "0") 
  WriteString(#dst, Hexa$) 
  Reste-1 
 
 Wend 

 CloseFile(#src) 
 CloseFile(#dst) 
 MessageRequester("Etat du programme", "Conversion finie " +Str( GetTickCount_()-temps )+" ms") 
Voila, il marche d'enfer, mais quand je le met dans une procedure, j'ai un message d'erreur.

J'y connait rien a l'ASM, il doit y avoir une astuce.
Je l'ai demandé à l'auteur, mais il ne doit pas etre devant son PC.

Si quelqu'un la connait
Merci.

Publié : sam. 23/sept./2006 16:00
par Anonyme2
Vite fait,

déclare tes variables en global car les procédures utilisent des variables locales (sur la pile)

Publié : sam. 23/sept./2006 16:24
par andrebernard
Je te remercie beaucoup de ta connaissance et de ta rapidité, c'etait bien ça.

Excelente journée
Merci MAITRE