CommentCaMarche
Recherche
Posez votre question Signaler

Fonction MUL de l'assembleur en langage C [Résolu]

slolo2000 320Messages postés jeudi 3 février 2005Date d'inscription 29 mai 2007Dernière intervention - Dernière réponse le 27 févr. 2005 à 23:28
Bonjour,

ma question va peut être paraître bizarre mais comment fait-on en langage C pour avoir l'équivalent de la fonctionMUL de l'assembleur. Je m'explique. En assembleur MUL ECX place dans EAC le résultat de EAX * ECX. Mais si la valeur est plus grande que 32 bits, la fonction MUL place les bits en trop dans EDX. Exemple :
451319D * 451319D = 12A34D56F77A49
Or cette valeur est beaucoup trop grande pour tenir dans une variable de 32 bits.
En assembleur EAX sera égal à 56F77A49 et EDX égal à 12A34D

Comment faire pour avoir la valeur 12A34D en langage C ?

Merci d'avance.
Lire la suite 
Réponse
+0
moins plus
salut, eh ben tu lis la valeur du registre, coe on peut incorporer du code asm ds du C, tu incorpores ton asm ds ton code C. Mais attention, ce ne sera pas du code portable. Je ne sais pas si j'ai été clair.
Ajouter un commentaire
Réponse
+0
moins plus
si tu as été clair mais j'ai essayé la méhode sous Dev C++ mais je n'y arrive pas. voici la syntaxe trouver sur le site de Dev c++(http://www.bloodshed.net/dev/faq.html) :

How to use assembly with Dev-C++ ?
The "GNU as" assembler uses AT&T syntax (not Intel). Check out this page for more information.
Here's an example of such a syntax :

// 2 global variables
int AdrIO;
static char ValIO;

void MyFunction(..........)
{
__asm("mov _AdrIO, %dx") ; // loading 16 bits register
__asm("mov _ValIO, %al") ; // loading 8 bits register
/*
Don't forget the underscore _ before each global variable names !
*/
__asm("mov %ax,%dx") ; // AX --> DX
}

J'ai donc essayé d'initialiser ax et cx puis de faire un mul cx mais ça ne fait rien. De même, j'ai simplement essayé de faire un __asm("mov %dx, 25 ") ; mais ça fait planter l'appli.

Si quelqu'un peut m'aider se serait cool. Je veux simplement faire une multiplication en assembleur sous Dev c++

A+
Ajouter un commentaire
Réponse
+0
moins plus
je me répond à moi tou seul mais ça peut être utile pour les autres. en fait la réponse est assez simple. Il suffit de travailler avec un variable du type double puis de diviser le résultat de la multiplication par 2^32
C'est tout.
Ajouter un commentaire
Ce document intitulé «  fonction MUL de l'assembleur en langage C  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.