Fonction MUL de l'assembleur en langage C
Résolu
slolo2000
Messages postés
315
Date d'inscription
Statut
Membre
Dernière intervention
-
slolo2000 Messages postés 315 Date d'inscription Statut Membre Dernière intervention -
slolo2000 Messages postés 315 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Mul assembleur
- Logiciel assembleur - Télécharger - Édition & Programmation
- Tp corrigé assembleur 8086 - Forum Assembleur
- E mul - Télécharger - Téléchargement & Transfert
- Des exercices sur l'assembleur (avec emu8086) - Forum Programmation
- Assembleur add mul div sus - Forum Assembleur
3 réponses
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.
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+
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+