Traduire une chaine "Nom d'un type enuméré" en cet énuméré.

cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 4 juil. 2012 à 14:52
cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 - 4 juil. 2012 à 19:51
Bonjour,

Il y a longtemps que je ne me suis pas mis à l'assembleur et je travaille sur les tutoriaux existants.

Cependant lorsque j'ai voulu passer à la pratique, je me suis heurté au même problème que sous Delphi.
En effet le Type Enuméré n'est pas identifié comme type.
Exemple code delphi
Type
TJS =(Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimanche);
Var
 JS : TJS;
Type
PJS = ^JS;

La compilation me donne l'erreur suivante: "JS n'est pas un identificateur de type"

Je suis donc obligé de passer par les fonctions de la RTTI (TypInfo) pour accéder aux éléments de la liste...

je sais récupérer ces infos en transmettant manuellement le nom du type sous forme de chaine. Par exemple :

LBList.Items.AddObject('Liste TJS', TypeInfo(TJS))



Mais je souhaiterai me passer pour différentes raisons de TypInfo. Par exemple en transmettant le nom du Type sous forme de chaine et accéder ensuite à l'adresse du type TS et à ses éléments


Ma question est :

1. Comment transformer la chaine du nom "TJS" en nom du Type TJS même s'il ne s'agit pas d'un type explicite en Delphi ou même si l'étiquette n'est pas explicite en assembleur; je me contenterai de l'adresse de TJS (son 1er élément sans doute).

Merci pour votre éclairage!

Jean_Jean

1 réponse

cs_Jean_Jean Messages postés 615 Date d'inscription dimanche 13 août 2006 Statut Membre Dernière intervention 13 décembre 2018 3
4 juil. 2012 à 19:51
J'ai observé le CPU d'une affectation de la variable JS en 1ère ligne de procedure:

JS := Jeudi;
Asm
 MOV AL,JS;// affect. type Byte car < 8 vals 
End;
...


La fêtre de débogage (CPU) donne:

Unit1.pas.136: JS := Jeudi;
0044EFCD mov byte ptr[TJS],$03
Unit1.pas.138: mov AL,JS // affect. type ...
0044EFD4 mov AL,[$00452BD0]
Unit1.pas.140: EnumToMemo...


1. [$00452BD0]
est-ce une adresse absolue?
2. J'ai supposé que cette adresse était celle de la valeur recherchée.
Je suis don aller voir à cette adresse. Voici ce que j'y ai trouvé:

JS :
00452BD0 0002 Add[edx],al
No comprendo!
Can you light me?

Jean_Jean
0
Rejoignez-nous