cs_noel70
Messages postés40Date d'inscriptionsamedi 22 mai 2004StatutMembreDernière intervention25 janvier 2007 10 sept. 2004 à 22:15
Merci, mais je n'ai pas compris, je débute en asm.
Ce que je voudrais faire, c'est déclarer une variable reelle dans une procédure, une déclaration de ce type:
LOCAL Nom_Variable : DWORD
Ici, DWORD, car c'etait une varaible de type DWORD, mais que dois-je mettre si je veux que cette variable soit de type REELLE, j'avais pensez à REAL, mais sa me met undefini symbol : REAL, lorsque je compile.
J'ai regarder dans les lib de masm32, mais je n'ai rien trouver.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 12 sept. 2004 à 00:31
Je vois ici plusieurs maniere de déclarer un espace mémoire de 8 octets.
Y'a t'il une méthode standard, ou le sont elles toutes ?
Dans mon cas je fais comme ymca2003 l'a indiqué ( LOCAL MaVariable:QWORD)
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 12 sept. 2004 à 00:40
Pour une fois que je ne suis pas d'accord avec ymca2003 j'en profite...
C'est seulement du sabir MASM donc non portable sur un autre assembleur. Mais ce n'est pas encore le plus grave, en ASM y a pas de compilo pour optimiser alors quand on veut faire ASM faut aussi faire la partie compilo, impossible en sabir car aucun controle de la pile ni de rien du tout. Vaut mieux un bon C que du mauvais ASM et de tres loin.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 12 sept. 2004 à 10:53
Donc le mieux est d'en rester a l'allocation de base comme tu l'as montré (sub esp, 8).
Je ne maitrise pas encore tous les noms de registres et je ne connais pas tous leur utilité. Seul eax, ecx et edx me conviennent, encore que.
ToutEnMasm
Messages postés587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 20223 13 sept. 2004 à 08:21
Salut,
Utiliser sub esp,8 pour pour créer une variable locale est une erreur.
Deux instructions microprocesseurs permettent de dimensionner les variables locales.
Il s'agit de enter et de leave.
La maniere d'utiliser ces deux instructions définit le format des appels qui diffèrent suivant les assembleurs et les langages utilisés.
Voir l'article de msdn consacré au Stack Frame format.
Avec masm32 l'utilisation de proc définit ce format et permet a l'utilisateur d'être libéré de tous les calculs et de la mise en place de enter et leave,masm32 fait tout le travail.
Si vraiment on veut se créer des problèmes de compatibilité,de bugs en pile,utiliser sub esp,8
ToutEnMasm
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 13 sept. 2004 à 10:26
Quand on ne veut rien calculer on a rien a faire en ASM on va en VB, ne te parait pas ?
Tous les compilateurs C modernes ont mis une option 'No Stack Frame', c'est vrai qu'eux veulent produire un code rapide...
ToutEnMasm
Messages postés587Date d'inscriptionjeudi 28 novembre 2002StatutMembreDernière intervention13 décembre 20223 13 sept. 2004 à 18:57
Salut,
Je suis curieux de voir un proc C ave l'option 'No Stack Frame' décompiler pour voir comment l'option code le retour .Ca doit ressembler a un format stack frame de c (bêtement).
Visual C++.net 7.0 de microsoft ne doit pas être trop moderne si on en croit tes dires.
ToutEnMasm