datasection : label

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

datasection : label

Message 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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 ?
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message 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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message 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 ...
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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 ??
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message 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:
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message 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
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Message 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
Répondre