Merci pour tes réponses Denis. Dès que j'aurai du temps (encore qq médians en vue

) j'irai regarder le tuto7 et ton site
Pour les label, en fait j'essayé de créer un label "label" et ça passait pas, qd j'ai fais mis "coucou" ca a marché (j'suis un boulet, ok...)
Pour les codes je vais mettere ce que j'ai sous la main. J'ai preske fini le code des contours...
Code1 : conversion n/b (pas de moi, dc vachement optimisé
Code : Tout sélectionner
; IMAGE.ASM ************************************************************
;
; MI01 - TP Assembleur 2 à 5
;
; Traitement d'une image 32 bits.
; **********************************************************************
LOCALS
JUMPS
.686
.MODEL FLAT, STDCALL
.DATA
.CODE
PUBLIC _process_image_asm
; **********************************************************************
; Sous-programme _process_image_asm
;
; Réalise le traitement d'une image 32 bits.
;
; Entrées sur la pile : Largeur de l'image (entier 32 bits)
; Hauteur de l'image (entier 32 bits)
; Pointeur sur l'image source (dépl. 32 bits)
; Pointeur sur l'image tampon 1 (dépl. 32 bits)
; Pointeur sur l'image tampon 2 (dépl. 32 bits)
; Pointeur sur l'image finale (dépl. 32 bits)
; **********************************************************************
_process_image_asm PROC NEAR ; Point d'entrée du programme
PUSH EBP
MOV EBP, ESP
PUSH ESI
PUSH EDI
PUSHF
PUSH EAX
PUSH EBX
PUSH ECX
PUSH EDX
MOV ESI, [EBP + 16]
MOV EDI, [EBP + 20]
MOV ECX, [EBP + 12]
IMUL ECX, [EBP + 8]
boucle: DEC ECX
MOV EDX, [ESI + ECX * 4]
MOV EBX, EDX
AND EBX, 00FF0000h
SHR EBX, 010h
IMUL EBX, 04Dh
MOV EAX, EDX
AND EAX, 0000FF00h
IMUL EAX, 096h
SHR EAX, 08h
ADD EBX, EAX
MOV EAX, EDX
AND EAX, 000000FFh
IMUL EAX, 01Dh
ADD EBX, EAX
SHR EBX, 08h
MOV EAX, EBX
SHL EBX, 08h
ADD EAX, EBX
SHL EBX, 08h
ADD EAX, EBX
MOV [EDI + ECX * 4], EAX
OR ECX, ECX
JNE boucle
POP EDX
POP ECX
POP EBX
POP EAX
POPF
POP EDI
POP ESI
POP EBP
RET ; Retour à la fonction main
_process_image_asm ENDP
END
Code 2 : ca c'est le mien, bcp plus long (et oué, je suis encore un newbee ...

)
Code : Tout sélectionner
; IMAGE.ASM ************************************************************
;
; MI01 - TP Assembleur 2 à 5
;
; Traitement d'une image 32 bits.
; **********************************************************************
LOCALS
JUMPS
.686
.MODEL FLAT, STDCALL
.DATA
.CODE
PUBLIC _process_image_asm
; **********************************************************************
; Sous-programme _process_image_asm
; Réalise le traitement d'une image 32 bits.
;
; Entrées sur la pile (32 bits) :
; Largeur , Hauteur de l'image
; Ptr image source, tampon1, tampon2, finale
; **********************************************************************
_process_image_asm PROC NEAR ; Point d'entrée du programme
; On sauvegarde ESI et EDI
PUSH ESI
PUSH EDI
; Représentation du registre A
; ********************
; * EAX *
; ********************
; * * AX *
; ********************
; * * * AH * AL *
; ********************
; Calcul du nb d'itération (nb de pixel de l'image)
MOV ESI, [ESP + 12] ; on met la largeur
MOV EAX, [ESP + 16] ; on met la hauteur
MUL ESI
MOV ESI, EAX
; Registres et valeurs associées
; ESI => nb de pixels de l'image
; EDI => compteur de boucle
; EDX => adresse du pixel
MOV EDI, 0
;boucle:
@@boucle:
; On stoque dans EBX l'adresse du pixel
MOV EBX, [ESP + 20] ; adresse de l'image source
MOV EAX, 4
MUL EDI
ADD EBX, EAX
; On recopie l'adresse du pixel dans EDX
MOV EDX, EBX
; Calcul de la couleur "moyenne" d'un pixel
DEC EDX
; Calcul de R
MOV AH, 4Ch
MOV AL, byte[EDX+2]
MUL AH ;=> AX
MOV BX, AX
; Calcul de G
MOV AH, 96h
MOV AL, byte[EDX+1]
MUL AH ;=> AX
ADD BX, AX
; Calcul de B
MOV AH, 1Dh
MOV AL, byte[EDX+0]
MUL AH ;=> AX
ADD BX, AX
; On décale les bits de BX de 8 vers la droite
SHR BX, 8
AND EBX, 0FFh ; On nettoie le reste du registre EBX pour plus de sécurité
PUSH EBX
; Chargement de l'adresse du pixel de tampon1
MOV EBX, [ESP + 28]
MOV EAX, EDI
SHL EAX, 2 ; Multiplication par 4
ADD EBX, EAX
POP ECX
; Modification des pixels
DEC EBX ; C'est bizarre, on doit faire un décalage ?!!! :S
MOV byte[EBX], 0 ; niveau de luminosité
MOV byte[EBX+1], CL ; pixel bleu
MOV byte[EBX+2], CL ; pixel vert
MOV byte[EBX+3], CL ; pixel rouge
; Incrémentation du compteur de boucle
INC EDI
; Test de rebouclage...
CMP ESI, EDI
JNE @@boucle
; On dépile et réaffecte les 2 registres sauvegardés
POP EDI
POP ESI
RET ; Retour à la fonction main
_process_image_asm ENDP
END
L'autre code je vais le posté durant le week-end (je l'ai pas sur ma clé USB là)
Je retravaillerai les codes (qd j'aurai le temps) pour en faire des fonctions PB.
@++