[RESOLU]Data et Fonction

Sujets variés concernant le développement en PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

enlève le point d'exclamation devant

MOV eax, AdresseDebutDatas

et laisse l'autre et là ca dvrait marcher

une ligne en assembleur va être copié dans le fichier asm final telle quelle si elle est précédée du !

dans notre cas, c'est du pseudo assembleur, le compilateur va remplacer dans le code asm final AdresseDebutDatas par sa position sur la pile avec le registre esp

si on met le !, FASM ne connait pas le terme AdresseDebutDatas

Voilà
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Non, dsl j'ai toujours mon "Error: Assembly error ! Please mail us this file. Le canal de communication a été fermé."
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

retire l'espace après la virgule, j'ai déjà ce coup la, peut-être que c'est ça.

C'est un souci de PBSyntax d'ailleurs, l'assembleur est mal gérer, ça colle des espaces après les ! devant les mots clé ASM
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Etat actuel des choses hors fonctionnement :

Code : Tout sélectionner

ProcedureDLL HL_Init_Keywords(AdresseDebutDatas, Nbdta)
  !extern PB_DataPointer
  MOV eax,AdresseDebutDatas 
  !MOV dword [PB_DataPointer],eax        ; initialise le pointeur des Data
  For i = 1 To Nbdta
    Read Struc.s
    TabKeys(HLA_NbKeywords)\MotCle=Struc.s
  Next i 
EndProcedure
@LSI: avec ou sans espace,ca ne marche pas !
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je vais télécharger la dernière version de tailbite aujourd'hui et regarder ça
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

J'ai télécharger la dernière version et ça compile sans problème

il y a une erreur dans le mot extern , il ne prend pas de e

Voici ce que je compile sans problème avec l'option activé de l'assembleur en ligne


Code : Tout sélectionner

ProcedureDLL Keywords(AdresseDebutDatas, Nombre_A_Lire)
        !extrn PB_DataPointer 
        ; Restore maliste; on se place au début des datas
         MOV  eax, AdresseDebutDatas
         ! MOV dword [PB_DataPointer], eax        ; initialise le pointeur des Data
         For i = 1 To Nombre_A_Lire
            Read Struc.s
;             ajouteamalistedekeyword(Struc.s)
         Next i
EndProcedure


SI un jour tu ajoute des DATA dans ta librairie, tu devras retirer cette ligne

Code : Tout sélectionner

 !extrn PB_DataPointer 
car tu auras l'erreur "symbol already defined"
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Avec l'assembleur en ligne, je vcheck for errors avec tailbite et il me dit à ectte ligne là :"MOV eax, AdresseDebutDatas" cette erreur " 'eax' is not a valid operator"
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Progi1984 a écrit :Avec l'assembleur en ligne, je vcheck for errors avec tailbite et il me dit à ectte ligne là :"MOV eax, AdresseDebutDatas" cette erreur " 'eax' is not a valid operator"
tu as du faire un copier/coller du code dan un nouveau document PB après avoir ouvert l'éditeur

Cette erreur ne vient que du fait que la case Activer l'assembleur n'est pas cochée

Chaque fois que l'on ouvre un nouveau document avec PB, cette case n'est pas coché, ni activer les thèmes XP (en fait aucune option n'est cochée)

Coche là et ca doit fonctionner (si si , on y arrivera ) :D

D'ailleurs, si tu compiles avec l'éditeur PB avant de lancer Tailbite, tu aurais eu cette même erreur. Donc avant de lancer tailbite, compile avec F5, si tout est bon, tu peux lancer Tailbite
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

Je vérifie que l'assembleur en ligne est coché : Oui c'est bon
J'appuie sur F5
Ca marche aprés avoir commenté "!extrn PB_DataPointer" (PS : j'utilise pas de data dans mes fonctions)

Je teste !
Oh Douleur ! Seul le dernier mot clé des data fonctionne !
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je suis opiniâtre Progi1984
On va y arriver, juste un petit problème que je viens de comprendre
J'ai compilé avec Tailbite et ça marche

Effectivement, la ligne !extrn PB_DataPointer devient la cause de l'erreur. Tailbite doit la créer alors que lorsque j'écris une lib en assembleur je dois la mettre.

Voici mon code d'essai qui fonctionne avec la dernière version de tailbite
J'ai utilisé un messagerequester pour afficher les data, j'ai fait varier de 1 à 3 et ca marche

On reprend

coche les options et ne compile que ce code sans les datas et bien sur sans l'appel de la fonction

Code : Tout sélectionner

ProcedureDLL Keywords(AdresseDebutDatas, Nombre_A_Lire)
        ; Restore maliste; on se place au début des datas
         MOV  eax, AdresseDebutDatas
         ! MOV dword [PB_DataPointer], eax        ; initialise le pointeur des Data
         For i = 1 To Nombre_A_Lire
            Read Struc.s
          a$ + Struc.s+Chr(10)+Chr(10)
         Next i
         
         MessageRequester("",a$,16)
EndProcedure
ensuite rédémarre le compilateur pour que la lib soit prise en compte (Menu compilateur/redémarrer le compilateur)

ouvre un nouveau document PB vide et met le code

Code : Tout sélectionner

 Keywords(?maliste, 3)   ; 3 car 3 valeurs
; 
;          
DataSection
  maliste:
     Data.s "DELETE"
     Data.s "ADD"
     Data.s "VDISK"
EndDataSection
et tu devrais voir la messagerequester s'afficher avec les 3 lignes de datas

mets par exemple 2 à la place du 3 et la messagerequester n'affiche que les 2 lignes

Maintenant il ne reste plus qu'à mettre ta portion de code et de supprimer a$ et la messagerequester

On peut aussi envisager de mettre 2 labels et de passer en paramètre les 2 labels (1er label début des datas et 2eme label pour la fin des datas, les datas situés entre ces 2 labels seront lus, pas les autres

voici le code que j'ai testé et qui fonctionne

Code : Tout sélectionner

ProcedureDLL Keywords1(AdresseDebutDatas, FinDatas)
        ; Restore maliste; on se place au début des datas
         MOV  eax, AdresseDebutDatas
         ! MOV dword [PB_DataPointer], eax        ; initialise le pointeur des Data
         !boucle:
         !MOV  eax, dword [PB_DataPointer]
         MOV edx, FinDatas
         !CMP eax, edx
         !JE  _fin

           Read Struc.s
          ; mets ton code ici
            a$ + Struc.s+Chr(10)+Chr(10)
         !JMP boucle
         !_fin:
         MessageRequester("",a$,16)
EndProcedure
et ensuite le code d'essai

Code : Tout sélectionner

Keywords(?maliste, ?Finmaliste)

         
DataSection
     Data.s "DELETE"
     Data.s "ADD"
  maliste:
     Data.s "VDISK"
     Data.s "VDISK1"
     Data.s "VDISK2"
  Finmaliste:
     Data.s "VDISK3"
     Data.s "VDISK4"
EndDataSection
 
Dernière modification par Anonyme2 le jeu. 19/mai/2005 5:15, modifié 1 fois.
Avatar de l’utilisateur
Progi1984
Messages : 2659
Inscription : mar. 14/déc./2004 13:56
Localisation : France > Rennes
Contact :

Message par Progi1984 »

@DENIS : On fait un gros SMACK virtuel (en tout bien tout honneur) ! Merci ca marche !
Yieeeeeeeeeeepppppppppppeeeeeeeeeeeeeeeeeeee !!!!!!!!!!!!!!!!!!!!!!!!!!
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Progi1984 a écrit :@DENIS : On fait un gros SMACK virtuel (en tout bien tout honneur) ! Merci ca marche !
Yieeeeeeeeeeepppppppppppeeeeeeeeeeeeeeeeeeee !!!!!!!!!!!!!!!!!!!!!!!!!!

Ca a été un peu laborieux mais bon :D
Répondre