begin process at 2012 05 25 03:43:11
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Divers

 > 

Débutant(e)

 > 

un énorme travail de votre part


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

un énorme travail de votre part

dimanche 19 décembre 2010 à 21:48:27 | un énorme travail de votre part

mana

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.
lundi 20 décembre 2010 à 20:06:27 | Re : un énorme travail de votre part

ToutEnMasm

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 ?!
mardi 21 décembre 2010 à 03:30:12 | Re : un énorme travail de votre part

patatalo

Membre Club Administrateur CodeS-SourceS
Je crois que c'est déjà ce qu'il a fait...
mardi 21 décembre 2010 à 08:50:04 | Re : un énorme travail de votre part

ToutEnMasm



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.



mardi 21 décembre 2010 à 17:27:40 | Re : un énorme travail de votre part

patatalo

Membre Club Administrateur CodeS-SourceS
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...
mardi 21 décembre 2010 à 22:20:55 | Re : un énorme travail de votre part

mana

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


mercredi 22 décembre 2010 à 09:09:39 | Re : un énorme travail de votre part

patatalo

Membre Club Administrateur CodeS-SourceS
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.

@++
mercredi 22 décembre 2010 à 09:11:19 | Re : un énorme travail de votre part

patatalo

Membre Club Administrateur CodeS-SourceS
c'est ici
mercredi 22 décembre 2010 à 09:17:30 | Re : un énorme travail de votre part

patatalo

Membre Club Administrateur CodeS-SourceS
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.

@++
mercredi 22 décembre 2010 à 15:28:13 | Re : un énorme travail de votre part

ToutEnMasm


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.

1 2

Cette discussion est classée dans : programme, mov, asm, eax, ebx


Répondre à ce message

Sujets en rapport avec ce message

Resultat de la vitesse des : Registre, instruction, calcul, et mémoire ! ! ! [ par rebixav ] Voici la liste que j'ai créé : asm : ( inc ) = 0.065 asm : ( and ) = 0.08 asm : ( or ) = 0.08 asm : ( xor ) = 0.08 asm : ( not ) nombre premier en nasm [ par YAWLY ] MED.MERZOUG salut tout le monde vous pouvez m'aider si j le compile sa affiche chaque fois le nbr est non premeir > le code est : Section .date ch Petit problème pour comparer (cmp) [ par smok1360 ] Bonjour à tous,Pour commencer, j'espère de ne pas avoir choisis le mauvais lieu pour poster, j'ai un petit peu hésité Donc, j'ai décidé d'apprendre l' Aligner des données pour le SSE [ par epineurien ] Bonjour à tous !J'ai un petit problème avec du code dont je mesure la vitesse: suivant la compilation, la vitesse varie du simple au double .J'expliqu Différences ??? [ par Arecibo ] Voila je debute en assembleur et j'aimerais savoir quelles sont les différences entre :-> mov eax, ebx et mov eax, [ebx]-> mov esi, eax et mov [esi], j'ai un prob avec mon buffer ; ya pas d'amuses gueules (masm32) [ par papiboff ] bj si je mets le buffer "somme " en dd avec charge eax et que j'ajoute deux 'dec ebx ' , ben , marche pas correctement ; (pêrqué ???? = en french) sv inverser une chaine [ par MrdJack ] salut, je suis sur un projet de calculatrice me permettant de faire des calculs avec des nombres tres grands. chaque nombre est stocké dans la memoire [linux] read and open [ par sheorogath ] Bonjour,je débute un peu en assembleur et j'essaie de faire un programme qui lit le début d'un fichier dont le nom est entré par l'utilisateur.Voici l AT&T erreur de compilation etc... [ par maminovadu75 ] Bonjour, j'aimerais me mettre a l'assembleur mais j'ai quelque problème.voici mon code morceau de code pour trier un tableau de int : ( mélange de C/C Inversion de chaîne [ par Bidou ] Bonjour à tous,A vrai dire je suis plutôt nouveau en asm et pas très bon lol. Mais bon, faut bien commencer un jour hein. Pour me faire la main, j'ai


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,250 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales