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
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

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