Forum Graph100

Forum Graph100

Vous n'êtes pas identifié.

Annonce

Bonjour et bienvenue sur le nouveau Forum Graph100 !
L'intégralité des données a été transférée sur un forum PunBB et tout les comptes sont fonctionnels avec le même nom d'utilisateur et mot de passe.
Un wiki est aussi disponible avec le même compte ! N'oubliez pas de remettre votre avatar, bon surf !
Pour plus d'informations, consultez ce post.

#1 26 Aug 2005 16:02:45

KillTiti
Membre
Lieu: Changé (Sarthe)
Date d'inscription: 16 Jul 2005
Messages: 39

ASM inline en C

J'ai une procedure en C contenant de l'assembleur inline et à l'endroit où on appelle cette procédure je veux que le compilateur réécrive dans le code compilé la procedure complète au lieu de faire un call ! Est-ce possible ?

Euh.. si vous avez pas compris se que je demande faites le moi savoir !  wink

Hors ligne

 

#2 26 Aug 2005 16:39:57

deather
Membre Communauté Graph100
Lieu: Banlieue parisienne (Fresnes)
Date d'inscription: 05 May 2002
Messages: 909

Re: ASM inline en C

Ben tu definis la fonction en inline:

Code:

inline    function_name(args)
{
}

..:: Deather ::..
deather.dede@gmail.com.NO.SPAM

Hors ligne

 

#3 26 Aug 2005 16:42:29

dada66
Membre Communauté Graph100
Lieu: Perpignan
Date d'inscription: 09 Oct 2002
Messages: 1033

Re: ASM inline en C

normalement en mettant dans la déclaration de ta méthode le mot inline du style : inline void maproc();

Le compilateur prendra le corps de la méthode à chaque endroit ou tu appelles la méthode. Ca doit 'normalement' donner le meme résultat qu'un #Define. Mais faut faire attention aux options du compilateur, car certains compilateurs ont des options pour ne pas copier le code de la méthode si celle-ci est trop grosse en mémoire.(c réglable)


Flash100, F100Console, GComm, ... : http://flash100.free.fr/xoops

Hors ligne

 

#4 26 Aug 2005 16:47:57

KillTiti
Membre
Lieu: Changé (Sarthe)
Date d'inscription: 16 Jul 2005
Messages: 39

Re: ASM inline en C

Merci

Mais en fait (et c'est ca que je ne comprend pas) TurboC n'accepte pas que je mette : inline void nomprocedure(args) !

Hors ligne

 

#5 27 Aug 2005 03:50:37

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: ASM inline en C

Attention les fonctions inline doivent être définies dans un fichier .h et non un fichier .c (c'est logique en fait, si on réfléchit au fait que pour remplacer l'appel de la fonction par son code le compilateur a besoin du corps entier de la fonction et pas seulement de sa déclaration...)  smile

Attention aussi, si on n'y prend pas garde ça peut faire exploser la taille de l'executable! C'est généralement à éviter.


Pensez à surveiller mes releases wink

Hors ligne

 

#6 27 Aug 2005 05:14:03

KillTiti
Membre
Lieu: Changé (Sarthe)
Date d'inscription: 16 Jul 2005
Messages: 39

Re: ASM inline en C

Mais je le mes dans un fichier .h  sad  sad  sad

Vous avez pas une source à me présenter pour savoir d'où viens mon erreur ?

Hors ligne

 

#7 27 Aug 2005 06:54:06

tonton1664
Membre
Lieu: Somme (80)
Date d'inscription: 22 Jul 2002
Messages: 217
Site web

Re: ASM inline en C

Turbo C est un (très) vieux compilateur, il ne supporte peut-etre pas les fonctions inline.
Regarde du coté de digital mars, c'est un compilateur beaucoup plus récent, et plus strict aussi, ce qui te permet de faire  moins d'erreurs.

Hors ligne

 

#8 27 Aug 2005 09:10:31

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: ASM inline en C

Ne t'inquiète pas il les supporte très bien...
(En tout cas pour les fonctions inline dans des classes il les supporte même trop bien, à voir la taille du code que ça génère au lieu d'un simple appel de fonction :P)


Pensez à surveiller mes releases wink

Hors ligne

 

#9 27 Aug 2005 10:10:26

KillTiti
Membre
Lieu: Changé (Sarthe)
Date d'inscription: 16 Jul 2005
Messages: 39

Re: ASM inline en C

Mais commenyt je fais moi ???

Hors ligne

 

#10 27 Aug 2005 15:57:48

dada66
Membre Communauté Graph100
Lieu: Perpignan
Date d'inscription: 09 Oct 2002
Messages: 1033

Re: ASM inline en C

si tu ne vx pas passer à un autre compilo au lieu d'utiliser une fonction inline, défini ta méthode comme une macro #define MAPROC(arg) asm{ blabla}


Flash100, F100Console, GComm, ... : http://flash100.free.fr/xoops

Hors ligne

 

#11 28 Aug 2005 09:13:48

2072
Programmeur Graph100
Lieu: Somewherebourg
Date d'inscription: 29 Jan 2002
Messages: 2056
Site web

Re: ASM inline en C

je crois que "inline" ne fonctionne qu'en C++


-~2072~-
Paid Emails
[URL=http://www.2072productions.com]2072productions.com[/URL]
[URL=http://www.casiocalc.org]casiocalc.org[/URL]

Hors ligne

 

#12 28 Aug 2005 10:25:11

KillTiti
Membre
Lieu: Changé (Sarthe)
Date d'inscription: 16 Jul 2005
Messages: 39

Re: ASM inline en C

Bon, Inline ne marche pas même dans le fichier .h : erreur "Syntax error"
et le #define MAProc(ARg) asm {truc} non plus : erreur ben ça dépend ! j'ai eu 6 erreurs différentes !  :evil:
Bon, je suis débutant en C donc si vous pouvez me dire comment déclarer ma procedure avec des exemples plizzz ! :vert:

Hors ligne

 

#13 28 Aug 2005 11:36:39

casioworld
Programmeur Graph100
Lieu: Palaiseau (Essonne)
Date d'inscription: 08 Feb 2002
Messages: 1843
Site web

Re: ASM inline en C

qu'est ce qui t'empêche de faire un fonction banal ? ah mois que j'a rien suivi


- http://www.casioworld.wb.st  --> plus grande base de données pour Graph100+
- http://efreidelirium.free.fr --> vive l'EFREI mdr

Hors ligne

 

#14 28 Aug 2005 12:12:01

KillTiti
Membre
Lieu: Changé (Sarthe)
Date d'inscription: 16 Jul 2005
Messages: 39

Re: ASM inline en C

Ben, comme je l'ai dis je suis débutant et j'essai d'apprendre et puis c'est pour une fonction d'affichage de Point.

Hors ligne

 

#15 29 Aug 2005 03:18:49

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: ASM inline en C

C'est "inline" et pas "Inline" hein (juste au cas où)...

Par contre de l'asm ne peut pas être contenu dans des fonctions inline, ça j'en suis sûr... Ici tu veux faire un define, à mon avis ce sont les accolades qui lui posent quelques soucis (y'a moyen de faire en sorte que ça marche, mais je crois qu'il faut un peu chipoter).

Qu'est-ce que tu veux créer comme procédure inline? Normalement tu n'as pas vraiment besoin de ça... :?


Pensez à surveiller mes releases wink

Hors ligne

 

#16 29 Aug 2005 13:21:20

KillTiti
Membre
Lieu: Changé (Sarthe)
Date d'inscription: 16 Jul 2005
Messages: 39

Re: ASM inline en C

Ben ca serais pour faire une fonction AfficherPixel (comme je l'ai dis plus haut) mais j'aimerai l'integrer à l'intérieur d'une fonction AfficherLigne sans les s***peri de Push ! qui ralentisse tout !

Hors ligne

 

#17 29 Aug 2005 20:23:34

[neo]f4kill
Programmeur Graph100
Lieu: montauban
Date d'inscription: 05 Oct 2003
Messages: 678
Site web

Re: ASM inline en C

ta pas besoin de faire ces fonctions elles existent déjà et sont surrement plus optimisées que les tiennes, push ou pas smile

d'ailleur la vitesse va plus dépendre de ton algorithme que du fait que tes fonctions soit inline ou pas
et le fait quelles soient inline ça ne va pas virer les push mais juste éviter les call.


=> Auteur de : Code, Hot-dog (v alpha), Aspirin v1.2, Memory v1.0, Slider v1.0 + 2 ou 3 progs à la noi wink


http://www.danasoft.com/sig-fre.jpg

Hors ligne

 

#18 30 Aug 2005 03:30:42

KillTiti
Membre
Lieu: Changé (Sarthe)
Date d'inscription: 16 Jul 2005
Messages: 39

Re: ASM inline en C

oué je sais qu'elles existent déjà ! mais tu sais les programmeurs ca a toujours la mani de tout refaire soi-même ! et je vois pas comment on pourrais vraiment plus les optimiser que les miennes parce que se qui prend le plus de temps c'est les PUSH que met le compilateur automatiquement ! et j'aimerai les virer !

Hors ligne

 

#19 30 Aug 2005 04:10:20

dada66
Membre Communauté Graph100
Lieu: Perpignan
Date d'inscription: 09 Oct 2002
Messages: 1033

Re: ASM inline en C

essaye en écrivant #define TEST(a) asm ...;
                                                     asm ....;
                                                     ........
                                                     asm ....;
dans les defines tu ne px pas typer les arguments vu qu'ils seront remplacés par le pré-processeur. Normalement cela doit fonctionner.


Flash100, F100Console, GComm, ... : http://flash100.free.fr/xoops

Hors ligne

 

#20 30 Aug 2005 06:26:48

KillTiti
Membre
Lieu: Changé (Sarthe)
Date d'inscription: 16 Jul 2005
Messages: 39

Re: ASM inline en C

ahhhh ! Oui j'ai compris !!!
Je comprennais pas comment le préprocesseur pouvait connaitre les types des arguments et en plus avec de l'ASM c'est super important !

Bon je teste ca et je vous donne des nouvelles !

Hors ligne

 

#21 30 Aug 2005 20:06:01

[neo]f4kill
Programmeur Graph100
Lieu: montauban
Date d'inscription: 05 Oct 2003
Messages: 678
Site web

Re: ASM inline en C

bof

un bon programmeur ça réutilise
d'ailleur c bien conu ya pas plus feignant qu'un programmeur smile


=> Auteur de : Code, Hot-dog (v alpha), Aspirin v1.2, Memory v1.0, Slider v1.0 + 2 ou 3 progs à la noi wink


http://www.danasoft.com/sig-fre.jpg

Hors ligne

 

#22 31 Aug 2005 07:10:31

KillTiti
Membre
Lieu: Changé (Sarthe)
Date d'inscription: 16 Jul 2005
Messages: 39

Re: ASM inline en C

Ah Bon ?  wink

Et pour les nouvelles donc ca compile mais la fonction de point ne marche pas (Mais en décompilant le compilé on peut voir qu'il n'y a pas de PUSH donc ca doit être beaucoup plus rapide !)

Hors ligne

 

#23 31 Aug 2005 07:28:17

KillTiti
Membre
Lieu: Changé (Sarthe)
Date d'inscription: 16 Jul 2005
Messages: 39

Re: ASM inline en C

C'est bon ca marche ! et c'est assez rapide !

Hors ligne

 

#24 01 Sep 2005 05:47:48

Julien
C++iste convaincu
Lieu: Waterloo (Be)
Date d'inscription: 29 May 2002
Messages: 1456
Site web

Re: ASM inline en C

Tu pourrais me donner le code que tu as écrit?
Je vais faire des tests de vitesse, on verra bien wink


Pensez à surveiller mes releases wink

Hors ligne

 

#25 01 Sep 2005 06:42:12

KillTiti
Membre
Lieu: Changé (Sarthe)
Date d'inscription: 16 Jul 2005
Messages: 39

Re: ASM inline en C

Bon c'est un chronométrage à la montre donc pas très précis !

environ 24400 pixels/s pour la fonction d'affichage de pixel PutPixelD3 !
environ 25600 pixels/s pour la fonction d'affichage de pixel PutPixelD3Segment !
environ 45000 pixels/s pour la fonction d'affichage de pixel PutPixelD3Inline !
environ 51000 pixels/s pour la fonction d'affichage de pixel PutPixelD3SegmentInline !

Par contre l'utilisation de WinG100 pour connaitre la rapidité du prog est très mauvaise : il accélère presque par 2 la vitesse ! Donc au début j'étais super heureux j'avais 100000 pixels par seconde mais bon !

Code:

#define PutPixelD3SegmentInline(X, Y, Couleur, Segment)
{
asm {
    mov ax, Segment;
    add al, Y;
    mov es, ax;
    mov cx, X;
    mov si, cx;
    shr si, 3;
    and cl, 7;
    db 0x26, 0x0F, 0x12, 0x04;
    mov al, Couleur;
    shl al, cl;
    or es:[si], al;
}
}

void PutPixelD3Segment(unsigned int X, unsigned char Y, unsigned char Couleur, unsigned int Segment)
{
asm {
    mov ax, Segment
    add al, Y
    mov es, ax
    mov cx, X
    mov si, cx
    shr si, 3
    and cl, 7
    db 0x26, 0x0F, 0x12, 0x04
    mov al, Couleur
    shl al, cl
    or es:[si], al
}
}

#define PutPixelD3Inline(X, Y, Couleur, Page)
{
asm {
    mov ax, Page;
    shl ax, 6;
    add ax, 0x1A20;
    add al, Y;
    mov es, ax;
    mov cx, X;
    mov si, cx;
    shr si, 3;
    and cl, 7;
    db 0x26, 0x0F, 0x12, 0x04;
    mov al, Couleur;
    shl al, cl;
    or es:[si], al;
}
}


void PutPixelD3(unsigned int X, unsigned char Y, unsigned char Couleur, unsigned int Page)
{
asm {
    mov ax, Page
    shl ax, 6
    add ax, 0x1A20
    add al, Y
    mov es, ax
    mov cx, X
    mov si, cx
    shr si, 3
    and cl, 7
    db 0x26, 0x0F, 0x12, 0x04
    mov al, Couleur
    shl al, cl
    or es:[si], al
}
}

J'ai supprimer les commentaire parce que ça prennais beaucoup de place !

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr