Instruction Assembleur CDQ en langage C

skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 juillet 2007 - 28 déc. 2005 à 14:36
skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 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.

Merci d'avance pour votre aide et A+

4 réponses

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
28 déc. 2005 à 19:16
Pourquoi traduire? tu na qu'à l'éxécuter dans le code soit :



__asm{ tes intructions

}



ou :



__asm instruction 1

__asm instruction 2

...



Bon code



++ALL
0
ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 3
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é !!!
0
ctx_man Messages postés 285 Date d'inscription mardi 28 décembre 2004 Statut Membre Dernière intervention 20 janvier 2013 3
29 déc. 2005 à 01:14
le cast c en long qu'il faut le faire, dsl pour cette etourderie.

Le travail c'est la santé, ne rien faire c'est la préservé !!!
0
skirby Messages postés 96 Date d'inscription vendredi 1 avril 2005 Statut Membre Dernière intervention 26 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)

Merci et A+
0
Rejoignez-nous