Instruction Assembleur CDQ en langage C

Signaler
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007
-
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007
-
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+
A voir également:

4 réponses

Messages postés
1243
Date d'inscription
jeudi 31 mars 2005
Statut
Membre
Dernière intervention
3 août 2016
2
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
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

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é !!!
Messages postés
285
Date d'inscription
mardi 28 décembre 2004
Statut
Membre
Dernière intervention
20 janvier 2013

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é !!!
Messages postés
96
Date d'inscription
vendredi 1 avril 2005
Statut
Membre
Dernière intervention
26 juillet 2007

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+