Pb JMP et fonctions
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Pb JMP et fonctions
Bonjour tout le monde.
J'ai des petits pb en ASM avec PB.
1 )
D'abord, j'arrive pas à faire des sauts : JMP, JNE, etc.
Je sais pas comment faire des labels.
2 )
Comment faire une fonction et la compiler (faut utiliser quel logiciel) ?
Si vous avez des petits exemples...
J'aurais sans doute d'autres questions à vous poser. Actuellement je fais des fonctions (avec Turbo Debuger de Borland) pour convertir des images BMP couleurs 24bits en images noi/blancs.
Puis avec un algo je fais des repérages des contours des images (pour créer des masques).
C'ets un TP en plusieurs scéances.
Je posterai les codes une fois finis pour ceux qui seraient intéressés
Merci d'avance
J'ai des petits pb en ASM avec PB.
1 )
D'abord, j'arrive pas à faire des sauts : JMP, JNE, etc.
Je sais pas comment faire des labels.
2 )
Comment faire une fonction et la compiler (faut utiliser quel logiciel) ?
Si vous avez des petits exemples...
J'aurais sans doute d'autres questions à vous poser. Actuellement je fais des fonctions (avec Turbo Debuger de Borland) pour convertir des images BMP couleurs 24bits en images noi/blancs.
Puis avec un algo je fais des repérages des contours des images (pour créer des masques).
C'ets un TP en plusieurs scéances.
Je posterai les codes une fois finis pour ceux qui seraient intéressés
Merci d'avance
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
Re: Pb JMP et fonctions
Tu devrais lire mon tutoriel n° 7 et plus particulièrement le chapitre - Le corps d'un programme FASM pour les librairies PureBasic - ou tu devrais trouver pas mal de réponses à tes questionslionel_om a écrit :Bonjour tout le monde.
J'ai des petits pb en ASM avec PB.
1 )
D'abord, j'arrive pas à faire des sauts : JMP, JNE, etc.
Je sais pas comment faire des labels.
Pour le label ou étiquette, tu mets le nom suivi par deux points, par exemple
Retour:
Evite de mettre des labels qui commencent par PB_ pour éviter d'éventuels conflits avec PB
Les labels sont sensibles à la casse dans FASM, alors fais attention
Pour compiler, tu dois créer ton ton fichier asm (1 par commande), tu dois aussi créer un fichier descripteur (PureasmTools qui fait partie de Pureasm peut créer un fichier desc pour 1 commande), recherche Pureasm sur le forum2 )
Comment faire une fonction et la compiler (faut utiliser quel logiciel) ?
Si vous avez des petits exemples...
Sur mon site tu trouveras mon outil PureLibCreation
Son fonctionnement est simple.
Tu mets dans le même dossier les fichiers asm et le fichier descripteur et tu cliques sur créer une librairie et tu sélectionne ton fichier descripteur (fonctionne aussi avec un glissser/déposer du fichier desc)
Il ne faut pas d'autres fichiers asm que ceux de ta librairie dans le dossier
S'il y a des erreurs retournées par FASM, elles seront dans le presse papier
Si tu as des problèmes pour créer ta lib, je t'aiderais au fur et à mesure
Je suis interessé par les codes

-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
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 2 : ca c'est le mien, bcp plus long (et oué, je suis encore un newbee ...
)
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.
@++


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
Je retravaillerai les codes (qd j'aurai le temps) pour en faire des fonctions PB.
@++
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Non c'est du turbo C
Mais ds qq jours (ou semaines) je retravaillerai ce fichier (l'optimisé) pour le faire marcher sous PB.
Mais ds qq jours (ou semaines) je retravaillerai ce fichier (l'optimisé) pour le faire marcher sous PB.
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !
-
- Messages : 1500
- Inscription : jeu. 25/mars/2004 11:23
- Localisation : Sophia Antipolis (Nice)
- Contact :
Effectivement, c'est bon à savoir.
Merci pour l'info Denis
Sinon c'est vrai que j'ai programmé ces fonctions juste pour la nécessité du TP. Mais si je les recodes pour PB, je sauvegarderai les autres registres et je créerai un cadre de pile.
Là j'ai un peu fais ça à la bourrin, mais bon c'est mon premier prog ASM !
Merci pour l'info Denis

Sinon c'est vrai que j'ai programmé ces fonctions juste pour la nécessité du TP. Mais si je les recodes pour PB, je sauvegarderai les autres registres et je créerai un cadre de pile.
Là j'ai un peu fais ça à la bourrin, mais bon c'est mon premier prog ASM !

Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Participez à son extension: ajouter vos programmes et partagez vos codes !