Page 1 sur 1

datasection : label

Publié : mar. 21/juin/2005 12:53
par graph100
c'est possible de faire un restore changeant:
je m'explique: je voudrai faire une procedure a qui on rentre
le nom d'un label et qui va exploité les donnée entrée dans le code

LoadDataImage(numero, "label")

et non pas d'etre obliger d'ecrire:
if machin = 1 : restore truc : endif
if machin = 2 : restore bidule : endif

voila

Publié : mer. 22/juin/2005 11:43
par comtois
sur le forum anglais , il y a ça
http://forums.purebasic.com/english/vi ... hp?t=15648


ça correspond à ce que tu veux ?

Publié : jeu. 23/juin/2005 21:09
par graph100
j ai pas tres bien compris les lignes 4-5 :?

; ---- Label as argument in Procedure? ----

Procedure LabelTest(LabelAdress.l)
! MOV eax,[esp]
! MOV dword [PB_DataPointer],eax
Read text.s
Debug text.s
EndProcedure

LabelTest(?label3)
End


DataSection
label1:
Data.s "Text from Label 1"
label2:
Data.s "Text from Label 2"
label3:
Data.s "Text from Label 3"
EndDataSection

Publié : jeu. 23/juin/2005 21:46
par comtois
ben si tu tapes un restore label1
et que tu lances PbCompilers /Commented tu obtiens un truc de ce genre

Code : Tout sélectionner

; Restore LAbel1
	MOV	 eax,l_label1
	MOV	 dword [PB_DataPointer],eax
alors avec

Code : Tout sélectionner

MOV eax,[esp] 
tu peux faire un rapprochement , il s'agit de récupérer l'adresse en paramètre pour la commande restore.


Sinon , j'aurais fait un truc de ce genre :

Code : Tout sélectionner

Procedure LabelTest(LabelAdress.l)
    text.s = PeekS(LabelAdress)
    Debug text.s
EndProcedure 

LabelTest(?label3)
End

DataSection
label1:
Data.s "Text from Label 1"
label2:
Data.s "Text from Label 2"
label3:
Data.s "Text from Label 3"
EndDataSection

Publié : ven. 24/juin/2005 17:51
par graph100
ben oui mais on est oblige de reécrire le nom du label

on pourrait pas faire un restore vers le premier label
ou le second etc ...

Publié : sam. 25/juin/2005 13:46
par comtois
tu devrais détailler un peu mieux ton problème , parce que là je ne comprends pas .

quand tu appelles la procédure , tu donnes l'adresse du label qui t'intéresse , et c'est tout , c'est bien ce que tu demandais non ??

Publié : sam. 25/juin/2005 17:53
par graph100
non non

tu entre la position du label

un exemple explique mieux

Code : Tout sélectionner

DataSection
  premier :
    Data.l 10, 11
  second :
    Data.l 12, 13
  Troisieme :
    Data.l 14, 15
EndDataSection


Procedure GotoLabel(labelnumber.l)
  ????????????
  ????????????
EndProcedure

GotoLabel(2)
Read a

; on devrai avoir : a = 12
voila j'espere que c'est limpide :? :roll:

Publié : sam. 25/juin/2005 20:33
par comtois
Je ne sais pas si c'est ce que tu veux faire , mais ça m'a obligé à regarder un peu l'assembleur , du coup j'ai appris quelques commandes au passage , c'est toujours ça :)

Code : Tout sélectionner

Procedure LabelTest(No.l)
    ;No correspond au numéro d'un label , dans cet exemple , test avec les valeurs 1, 2 ou 3.
   ; Tu peux supprimer le -1 si tu indexes tes labels de 0 à 2
    adr.l = (No - 1) * 8
    ! MOV eax,l_premier 
    ! MOV dword [PB_DataPointer],eax
    ! MOV eax,[esp + 4]
    ! ADD dword [PB_DataPointer],eax 
    Read a
    Read b
    Debug a
    Debug b
Debug "------"
EndProcedure

LabelTest(1)
LabelTest(2)
LabelTest(3)

End

DataSection
premier :
Data.l 10, 11
second :
Data.l 12, 13
Troisieme :
Data.l 14, 15
EndDataSection

Publié : sam. 25/juin/2005 22:00
par comtois
sinon tu peux tout simplement faire ça

Code : Tout sélectionner

Procedure LabelTest(No.l)
    adr.l = ?premier + (No - 1) * 8
    a = PeekL(adr) : adr + 4
    b = PeekL(adr)
    Debug a
    Debug b
    Debug "------"
EndProcedure

LabelTest(1)
LabelTest(2)
LabelTest(3)

End

DataSection
premier :
Data.l 10, 11
second :
Data.l 12, 13
Troisieme :
Data.l 14, 15
EndDataSection

Publié : dim. 26/juin/2005 10:26
par graph100
ok moi je connais pas l'asm
d'apres ce que j'ai compris la methode marche pas
pour des nombres de lonqueur ou de type different ?

en fait je voudrais l'utiliser pour lire les images que je
stoke non pas dans l'executable avec Includebinary
mais dans les datasections