Fonction d'affichage de chaine - asm - bug a l'execution

Soyez le premier à donner votre avis sur cette source.

Snippet vu 3 371 fois - Téléchargée 36 fois

Contenu du snippet

Cette fonction affiche une chaine à l'ecran sans appel à une librairie mais plante (overflow) à la ligne "asm("int 0x10");"
Si quelqu'un peut m'aider à corriger ce bug je lui en serais reconnaissant

Source / Exemple :


int a;
char*string;

void affiche(char*string)
{
  for(a=0; string[a]; a++)
  {
    asm("movl $string, %eax");
    asm("movl a, %ebx");
    asm("movb 0x0(%eax,%ebx,1), %al");
    asm("movb $0x0e, %ah");
    asm("int 0x10"); //Plantage
  }
}

int main()
{
  affiche("String");
  return 0;
}

A voir également

Ajouter un commentaire

Commentaires

Messages postés
46
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
2 décembre 2006

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:

#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().
@+
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

madprog: Turbo C non ? Mais bon, le 16 bits et les interruptions DOS ne sont pas promis à un grand avenir :)
Messages postés
16
Date d'inscription
mardi 1 octobre 2002
Statut
Membre
Dernière intervention
7 août 2005

Kaid: et tu connais un compilateur c/c++ en 16bits ?
merci
Messages postés
949
Date d'inscription
mardi 2 octobre 2001
Statut
Membre
Dernière intervention
8 juillet 2006

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.
Messages postés
16
Date d'inscription
mardi 1 octobre 2002
Statut
Membre
Dernière intervention
7 août 2005

va savoir...
et c pas une fatal error mais un overflow ;)
Afficher les 16 commentaires

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 et codes sources.

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