datasection : label
datasection : label
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
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
sur le forum anglais , il y a ça
http://forums.purebasic.com/english/vi ... hp?t=15648
ça correspond à ce que tu veux ?
http://forums.purebasic.com/english/vi ... hp?t=15648
ça correspond à ce que tu veux ?
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

; ---- 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
ben si tu tapes un restore label1
et que tu lances PbCompilers /Commented tu obtiens un truc de ce genre
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 :
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
Code : Tout sélectionner
MOV eax,[esp]
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
non non
tu entre la position du label
un exemple explique mieux
voila j'espere que c'est limpide

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


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