[RESOLU]Data et Fonction
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à
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à
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Non, dsl j'ai toujours mon "Error: Assembly error ! Please mail us this file. Le canal de communication a été fermé."
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
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
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)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Etat actuel des choses hors fonctionnement :
@LSI: avec ou sans espace,ca ne marche pas !
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
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
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
SI un jour tu ajoute des DATA dans ta librairie, tu devras retirer cette ligne
car tu auras l'erreur "symbol already defined"
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
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
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"
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
tu as du faire un copier/coller du code dan un nouveau document PB après avoir ouvert l'éditeurProgi1984 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"
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'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
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
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 !
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 !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
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
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
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
et ensuite le code d'essai
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
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
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
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.
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
@DENIS : On fait un gros SMACK virtuel (en tout bien tout honneur) ! Merci ca marche !
Yieeeeeeeeeeepppppppppppeeeeeeeeeeeeeeeeeeee !!!!!!!!!!!!!!!!!!!!!!!!!!
Yieeeeeeeeeeepppppppppppeeeeeeeeeeeeeeeeeeee !!!!!!!!!!!!!!!!!!!!!!!!!!
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net