Un énorme travail de votre part [Résolu]

Messages postés
23
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
12 avril 2012
- - Dernière réponse : cs_mana
Messages postés
23
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.
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
552
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1
3
Merci
/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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 223 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ToutEnMasm
Messages postés
552
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1
0
Merci
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 ?!
Commenter la réponse de ToutEnMasm
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
Je crois que c'est déjà ce qu'il a fait...
Commenter la réponse de cs_patatalo
Messages postés
552
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1
0
Merci

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.
Commenter la réponse de ToutEnMasm
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
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...
Commenter la réponse de cs_patatalo
Messages postés
23
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
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
Commenter la réponse de cs_mana
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
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.

@++
Commenter la réponse de cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
c'est ici
Commenter la réponse de cs_patatalo
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
0
Merci
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.

@++
Commenter la réponse de cs_patatalo
Messages postés
552
Date d'inscription
jeudi 28 novembre 2002
Statut
Membre
Dernière intervention
26 mars 2016
1
0
Merci
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.
Commenter la réponse de ToutEnMasm
Messages postés
23
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
j'utilise 'GNU GCC' mais je ne trouve nul part l'option '/FA'

Tapez le texte de l'url ici.
Commenter la réponse de cs_mana
Messages postés
23
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
12 avril 2012
0
Merci
merci.
Commenter la réponse de cs_mana