Fonction MUL de l'assembleur en langage C

Résolu/Fermé
slolo2000
Messages postés
315
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
29 mai 2007
- 27 févr. 2005 à 19:09
slolo2000
Messages postés
315
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
29 mai 2007
- 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.

3 réponses

tafiscobar
Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
177
27 févr. 2005 à 20:29
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.
0
slolo2000
Messages postés
315
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
29 mai 2007
46
27 févr. 2005 à 21:52
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+
0
slolo2000
Messages postés
315
Date d'inscription
jeudi 3 février 2005
Statut
Membre
Dernière intervention
29 mai 2007
46
27 févr. 2005 à 23:28
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.
0