Un énorme travail de votre part

Résolu
cs_mana Messages postés 22 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 12 avril 2012 - 19 déc. 2010 à 21:48
cs_mana Messages postés 22 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 12 avril 2012 - 1 janv. 2011 à 11:14
bonjour,
voici un programme écrit en c++
(il permet de passer d'une image en couleur 24bits(ARGB) a une image en 256 niveaux de gris(toujours sur 24bits))

____________________________________________

for (a=0;a<256;a++){A[a]=a*65793;}
for (a=0;a<256;a++){
R[a]=a*306;V[a]=a*601;B[a]=a*117;
}
do{
rgb=*pixel;
a=((rgb & 0xff000000));
r=((rgb & 0xff0000)>>16);
g=((rgb & 0x00ff00)>>8);
b=((rgb & 0x0000ff));
rgb=(R[r]+V[g]+B[b])>>10;
*pixel++=a | A[rgb];
}while(--len);
}
____________________________________________

je l'ai traduit en asm
____________________________________________
asm("pusha");
asm("mov ebx,_mem_eax");
asm("mov esi,_mem_edx");
asm("boucle:");
asm("mov ecx,[ebx]");
asm("push ebx");

asm("mov eax,29");// b*117/4
asm("mul cl");
asm("mov ebx,eax");

asm("mov eax,150");// g*601/4
asm("mul ch");
asm("add ebx,eax");

asm("ror ecx,8");
asm("mov eax,76");// b*306/4
asm("mul ch");
asm("add eax,ebx");

asm("shr eax,8");

asm("mov cl,al");
asm("mov ch,al");
asm("rol ecx,8");
asm("mov cl,al");

asm("pop ebx");
asm("mov [ebx],ecx");
asm("add ebx,4");
asm("sub esi,1");
asm("jne boucle");
asm("popa");
____________________________________________
pourriez-vous me re-ecrire se programme en asm svp.
il me fraudai :
_un programme 'plus propre' que le mien
_un programme avec un pré-calcul (comme la version c)
_un programme avec des instructions mmx
_un programme avec des instructions sse
_un programme avec des instructions sse2

je sais qu'il existe la lib. opencl , mais mon but est d'apprendre et d'élargir mes connaissances en asm.
pour résumer , il me fraudai un tuto pour chaque programme demandé.
merci.

12 réponses

ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
26 déc. 2010 à 18:09
/Fa est l'option pour le c++ express microsoft.
Tapez le texte de l'url ici.
Si le 'GNU GCC' est un choix obligatoire,le lien que vous aviez mis dans un précédant mail,semblait donner l'option.
3
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
20 déc. 2010 à 20:06
Le traduire "à la main" n'est pas la bonne méthode.On perd ainsi les optimisations du c++.
Recompiler le source c++ en ajoutant /Fa dans les propriétées du compilateur.
Production: un .asm directement compilable par masm.
C'est beau quand même ?!
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
21 déc. 2010 à 03:30
Je crois que c'est déjà ce qu'il a fait...
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
21 déc. 2010 à 08:50

Je crois que c'est déjà ce qu'il a fait...

J'ai déja fait ce genre de traduction et le code inline ressemble bien a du code fait à la main.
Du code traduit du c++ par cl ressemble à ça.

PUBLIC __time64
EXTRN __imp__GetSystemTimeAsFileTime@4:PROC
EXTRN __aulldiv:PROC
; Function compile flags: /Odtp
_TEXT SEGMENT
_tim$ -16 ; size 8
_nt_time$ -8 ; size 8
_timeptr$ 8 ; size 4
__time64 PROC
; File e:\midl\extrait\time64.c
; Line 57
push ebp
mov ebp, esp
sub esp, 16 ; 00000010H
; Line 61
lea eax, DWORD PTR _nt_time$[ebp]
push eax
call DWORD PTR __imp__GetSystemTimeAsFileTime@4

M'enfin,l'intéressé peut nous le dire lui même.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
21 déc. 2010 à 17:27
en plus, l'interêt pour lui est que si il déclare ses données, il aura même des exemples pour les floats.

Et il pourrait également regarder ce que donne différentes optimisations.

Je crois avoir déjà vu des codes sur le site avec les instructions mmx. Sur les floats, c'est sur...
0
cs_mana Messages postés 22 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 12 avril 2012
21 déc. 2010 à 22:20
je débute aussi bien en c qu'en asm.
j'ai crée un programme en c que j'ai optimisé(c'est la version ci-dessus)
j'essaie de faire la même chose en asm , mais je n'y arrive pas(pour le moment).
je demande juste votre aide pour accélérer mon apprentissage.
je veux juste des programmes qui font la même chose que le mien, ils non pas besoin d'être optimisés.

j'utilise codeblocks et je ne sais pas désassembler avec.
si vous pouviez me donner le nom des logiciels que vous utilisez pour le faire me serais d'une grande utilité.
ps: je n'arrive pas a me servir de windams
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
22 déc. 2010 à 09:09
re,

Ce qu'il faudrait que tu saches, c'est quel compilateur tu utilises. gcc/tcc/? (gcc --help ou man gcc)

Tu regardes les options de compilation et tu devrais pouvoir trouver la même option que celle dont t'as parlé ToutenMasm.

@++
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
22 déc. 2010 à 09:11
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
22 déc. 2010 à 09:17
il te produira certainement de l'assembleur AT&T. Si tu préfères la syntaxe intel, nasm dispose d'un desassembleur qui s'appelle ndisasm.

@++
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
22 déc. 2010 à 15:28
Le c++ express (gratuit),compagnon de masm fait très bien les traductions du c++ a l'assembleur.
Pour le trouver,taper "Versions express de microsoft ",c'est en français.
Le c++ à d'excellentes qualités d'optimisation.
0
cs_mana Messages postés 22 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 12 avril 2012
26 déc. 2010 à 13:55
j'utilise 'GNU GCC' mais je ne trouve nul part l'option '/FA'

Tapez le texte de l'url ici.
0
cs_mana Messages postés 22 Date d'inscription mardi 8 avril 2003 Statut Membre Dernière intervention 12 avril 2012
1 janv. 2011 à 11:14
merci.
0
Rejoignez-nous