skirby
Messages postés96Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention26 juillet 2007
-
28 déc. 2005 à 14:36
skirby
Messages postés96Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention26 juillet 2007
-
29 déc. 2005 à 11:38
Bonjour tout le monde,
j'aurais voulu savoir comment traduire en langage C le petit bout d'assembleur suivant.
MOVSX EDI, var1
MOV EAX, EDI
IMUL EDI
CDQ
XOR EAX,EDX
SUB EAX,EDX
En fait, la partie qui me pose problème est en rouge.
Au début, j'utilisait une variable de type double mais je ne sais pas comment faire pour récupérer les 32 bits de poid fort d'une variable de type double dans une variable de type long puisqu'on ne peut pas faire d'opération de décalage sur un type double.
De plus, la commande CDQ étend le bit de signe aux octets de poid fort. Donc EDX peut valoir 00000000 ou FFFFFFFF en fonction du bit de signe de EAX.
J'avoue ne pas savoir comment faire. J'espère avoir été clair.
ctx_man
Messages postés285Date d'inscriptionmardi 28 décembre 2004StatutMembreDernière intervention20 janvier 20132 29 déc. 2005 à 01:12
Je connais pas l'assembler donc je ne capte pas vraiment ske tu veut faire. Mais tu dis vouloir recuperer les 32 premiers bits (poid forts) de ton double en les mettant dans un long. Un simple pointeur et le tour est joué :
double var;
long *ptr = (int*)&var; //Tu aura certainement un warning pour perte de donnee mais *ptr correspond bien au 32 premiers bits de ton double, inependemment de l'interpretation du signe et de la virgule du type double.
Le travail c'est la santé, ne rien faire c'est la préservé !!!
skirby
Messages postés96Date d'inscriptionvendredi 1 avril 2005StatutMembreDernière intervention26 juillet 2007 29 déc. 2005 à 11:38
Merci pour vos réponses.
En fait, j'ai trouvé une autre solution. Je compile mon code assembleur et j'inclu le fichier .o à mon édition des liens.
Sinon, par curiosité je vais essayer ton astuce ctx_man.
En ce qui concerne ta proposition deck_bsd, il faut que je cherche comment on utilise l'assembleur en ligne dans DEV-CPP (donc avec le compilateur gcc je crois)