cs_chmod777
Messages postés46Date d'inscriptionjeudi 25 juillet 2002StatutMembreDernière intervention 2 décembre 20061 24 févr. 2003 à 00:04
Réponse a KAID:
la tu te goure un peu quand même: insérer de l'ASm dans un code en C est très répandu: pourquoi ? en particulier pour les fonctions d'affichage.
les fonctions d'affichages en C (dont la plus connue printf() ) sont extrememnt lentes, le fait d'inclure de l'asm permet d'augmenter considérablement la vitesse d'affichage et , par la même la vitesse d'execution du programme (c'est pour cela que les moteurs 3d sont en partie codés en ASM)
juste pour te rendre compte, execute le code suivant:
tu pourra attendre longtemps avant que le prog se termine!
alors que si tu vire l'affichage du nombre, l'execution durera 20 secs (sur 1,4 GHz).
d'ou l'avantage d'inclure de l'ASM dans du C.
cela s'appelle l'optimisation!
d'ou le probleme non résolu qui persiste.
P.S: la fonction write() est un peu plus rapide que printf().
@+
cs_Kaid
Messages postés949Date d'inscriptionmardi 2 octobre 2001StatutMembreDernière intervention 8 juillet 20061 9 oct. 2002 à 21:43
madprog: Turbo C non ? Mais bon, le 16 bits et les interruptions DOS ne sont pas promis à un grand avenir :)
madprog
Messages postés16Date d'inscriptionmardi 1 octobre 2002StatutMembreDernière intervention 7 août 2005 6 oct. 2002 à 19:13
Kaid: et tu connais un compilateur c/c++ en 16bits ?
merci
cs_Kaid
Messages postés949Date d'inscriptionmardi 2 octobre 2001StatutMembreDernière intervention 8 juillet 20061 5 oct. 2002 à 10:13
En fait la vraie question qu'il faut se poser est "A quoi sert d'appeler des interruptions DOS 16 Bits dans un programme Win32 32 Bits ?" La réponse étant "A rien", pas la peine de s'étaler là-dessus.
madprog
Messages postés16Date d'inscriptionmardi 1 octobre 2002StatutMembreDernière intervention 7 août 2005 4 oct. 2002 à 19:41
va savoir...
et c pas une fatal error mais un overflow ;)
cs_Thaeron
Messages postés202Date d'inscriptionvendredi 6 juillet 2001StatutMembreDernière intervention31 octobre 2007 4 oct. 2002 à 16:11
Quel est l'interet de pouvoir inserer de l'asm dans un code en C si a chaque int ça fait une fatale erreur ?? :o\
madprog
Messages postés16Date d'inscriptionmardi 1 octobre 2002StatutMembreDernière intervention 7 août 2005 3 oct. 2002 à 09:21
mais ca plante aussi sous linux (segmentation fault) compilé avec g++.
Dev-C++ utilise ce compileur donc ca pourrait venir du compileur aussi.
Pourtant le programme désassemblé présente bien l'interruption et les mouvements voulus (mov).
Alors...
cs_BigNose
Messages postés1Date d'inscriptionsamedi 27 juillet 2002StatutMembreDernière intervention 2 octobre 2002 2 oct. 2002 à 22:26
Effectivement , G fait la meme experience cette ete avec Dev , et pareil G U le meme problem ...
Deja je pense que le problem , vient de l'OS , il me semble pas que windows autorise reellement un appel au interuption comme ca ce faisait sous DOS( je n'en suis pas certain du tout ) Mais qd on vois de l'ASM Win32 , ca fait appelle au API en pagaille donc C pour ca que j'en suis venu a penser ca.
Maintenant si quelqu'un a trouver une solution pour gerer du OLD-Style ASM avec DEV , j'aimerais connaitre la solution
madprog
Messages postés16Date d'inscriptionmardi 1 octobre 2002StatutMembreDernière intervention 7 août 2005 2 oct. 2002 à 18:08
madprog
Messages postés16Date d'inscriptionmardi 1 octobre 2002StatutMembreDernière intervention 7 août 2005 2 oct. 2002 à 13:14
Mais cette fonction de toute maniere n'affiche pas une chaine, mais le caractère en %al... donc ya pas d'histoire de $ a la fin de la chaine Croqmort. Merci quand meme.
Thaeron: la fonction 0x0a de int 0x10 plante aussi. si tu veux une liste des fonctions asm va sur http://madprog.free.fr/ et telecharge le fichier fonction(.exe). c une archive SFX, pas de danger ;)
cs_Thaeron
Messages postés202Date d'inscriptionvendredi 6 juillet 2001StatutMembreDernière intervention31 octobre 2007 2 oct. 2002 à 12:50
Hum c bizarre, j'ai testé la fonction 0x09 de l'int 0x21 et ça plante aussi, deplus dev-c++ n'accepte pas le $string et le a dans le code asm, si qq'un a une idée
Croqmort
Messages postés95Date d'inscriptionmercredi 5 décembre 2001StatutMembreDernière intervention27 juin 2006 1 oct. 2002 à 23:53
il se peut que la chaine doivent se finir par $
je sais que une des fonctions d'affichage du bios edmande que les chaines se finnisent par $, c peut etre celle là.
cs_GoldenEye
Messages postés527Date d'inscriptionvendredi 14 septembre 2001StatutMembreDernière intervention 6 octobre 20084 1 oct. 2002 à 18:31
Faute avouée à demi pardonnée... @+
madprog
Messages postés16Date d'inscriptionmardi 1 octobre 2002StatutMembreDernière intervention 7 août 2005 1 oct. 2002 à 18:11
Desole mais je suis tout nouveau d'aujourd'hui...
++ sur le forum
cs_GoldenEye
Messages postés527Date d'inscriptionvendredi 14 septembre 2001StatutMembreDernière intervention 6 octobre 20084 1 oct. 2002 à 15:19
Quant à la réponse à la question, tu ne l'auras pas de sitôt dans la mesure où tu n'as même pas pris la peine de rechercher dans le forum
cs_GoldenEye
Messages postés527Date d'inscriptionvendredi 14 septembre 2001StatutMembreDernière intervention 6 octobre 20084 1 oct. 2002 à 14:01
Ici on donne des sources et les questions, on les pose dans le forum. Ce n'est pas la première fois qu'on le dit nom d'un chien
24 févr. 2003 à 00:04
la tu te goure un peu quand même: insérer de l'ASm dans un code en C est très répandu: pourquoi ? en particulier pour les fonctions d'affichage.
les fonctions d'affichages en C (dont la plus connue printf() ) sont extrememnt lentes, le fait d'inclure de l'asm permet d'augmenter considérablement la vitesse d'affichage et , par la même la vitesse d'execution du programme (c'est pour cela que les moteurs 3d sont en partie codés en ASM)
juste pour te rendre compte, execute le code suivant:
#include <stdio.h>
int i;
void main()
{
for(i=0;i<1000000000;i++)
{
printf("%d
",i);
}
}
tu pourra attendre longtemps avant que le prog se termine!
alors que si tu vire l'affichage du nombre, l'execution durera 20 secs (sur 1,4 GHz).
d'ou l'avantage d'inclure de l'ASM dans du C.
cela s'appelle l'optimisation!
d'ou le probleme non résolu qui persiste.
P.S: la fonction write() est un peu plus rapide que printf().
@+
9 oct. 2002 à 21:43
6 oct. 2002 à 19:13
merci
5 oct. 2002 à 10:13
4 oct. 2002 à 19:41
et c pas une fatal error mais un overflow ;)
4 oct. 2002 à 16:11
3 oct. 2002 à 09:21
Dev-C++ utilise ce compileur donc ca pourrait venir du compileur aussi.
Pourtant le programme désassemblé présente bien l'interruption et les mouvements voulus (mov).
Alors...
2 oct. 2002 à 22:26
Deja je pense que le problem , vient de l'OS , il me semble pas que windows autorise reellement un appel au interuption comme ca ce faisait sous DOS( je n'en suis pas certain du tout ) Mais qd on vois de l'ASM Win32 , ca fait appelle au API en pagaille donc C pour ca que j'en suis venu a penser ca.
Maintenant si quelqu'un a trouver une solution pour gerer du OLD-Style ASM avec DEV , j'aimerais connaitre la solution
2 oct. 2002 à 18:08
++
2 oct. 2002 à 13:14
Thaeron: la fonction 0x0a de int 0x10 plante aussi. si tu veux une liste des fonctions asm va sur http://madprog.free.fr/ et telecharge le fichier fonction(.exe). c une archive SFX, pas de danger ;)
2 oct. 2002 à 12:50
1 oct. 2002 à 23:53
je sais que une des fonctions d'affichage du bios edmande que les chaines se finnisent par $, c peut etre celle là.
1 oct. 2002 à 18:31
1 oct. 2002 à 18:11
++ sur le forum
1 oct. 2002 à 15:19
1 oct. 2002 à 14:01