En masm32 coment déclarer un buffet variable [Résolu]

papiboff 19 Messages postés dimanche 16 octobre 2005Date d'inscription 10 avril 2006 Dernière intervention - 4 avril 2006 à 20:14 - Dernière réponse : papiboff 19 Messages postés dimanche 16 octobre 2005Date d'inscription 10 avril 2006 Dernière intervention
- 7 avril 2006 à 01:05
j'ai fait une dll en asm pour lire les images d'une webcam et les additionner (aque moi j'ai que 15 jours d'asm en gros quoi)
je donne à ma dll le width et le height de limage
ben comment déclarer le buffet avec le width et le height de limage

.data? --> en lecture dd pour 200x150 en Fixe
rsom db 120004 dup (?)
vsom db 120004 dup (?)
bsom db 120004 dup (?)
en buffet variable ? ?? moi pas savoir !..
merci
papi
Afficher la suite 

Votre réponse

15 réponses

Meilleure réponse
nightlord666 750 Messages postés vendredi 17 juin 2005Date d'inscription 23 mai 2007 Dernière intervention - 6 avril 2006 à 20:03
3
Merci
C'est bête car tu aurais pû gràçe à ça t'adapter à tous types de résolution sans changer ton code.
Mais bon, si tu préfère garder ton code portable, tu a choisi la bonne solution.

PS : Met ma réponse en réponse acceptée.

Merci nightlord666 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de nightlord666
Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 6 avril 2006 à 21:38
3
Merci
mov eax, w_size
mov ecx, h_size
shl eax, 2
mul ecx


ET BASTA, le "* SIZEOF DWORD" est fait par 'shl, 2'
nbr octets nécessaires est dans eax.


Ensuite employer VirtualAlloc au lieu de GlobalAlloc qui ne devrait plus servir que pour le clipboard.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de BruNews
nightlord666 750 Messages postés vendredi 17 juin 2005Date d'inscription 23 mai 2007 Dernière intervention - 5 avril 2006 à 13:39
0
Merci
Le buffet ? Tu es sur que tu ne confonds pas avec le buffer ?
Commenter la réponse de nightlord666
papiboff 19 Messages postés dimanche 16 octobre 2005Date d'inscription 10 avril 2006 Dernière intervention - 5 avril 2006 à 16:33
0
Merci
BJ
Rep: Ben si ; et tu crois que cela me rend moinssss z'intelligent ? .(pour les beuffffs ; oui ! ) (traduc dico ; intelligent = QI, pas intello ou ins-truite)
paqueu à la frappe "un t" ? , "un r" ? , boffffff !.
aque la question du forhum !??? ; c'est avec des amuses gueules ?.(je decode pour les beuffff s ; amuse geule = buffet ??? ..)
ben sûr , si tu fumes la moquette ? ; alors là ; ben sûr , un "t"ou un"r" , c'est important pour la question ? ....... sniffff!.
je me renseigniaise , pour les buffets variables ; auprès de mon menuisier "les buffets variables ; existent"
ben et en asm ? (les buffers ben sûr ) .
A+
papi
Commenter la réponse de papiboff
nightlord666 750 Messages postés vendredi 17 juin 2005Date d'inscription 23 mai 2007 Dernière intervention - 5 avril 2006 à 16:48
0
Merci
Excuse c'est parce que tu t'es quand même trompé 3 fois (j'ai recompté ^^).

Sinon il faut allouer de la mémoire à ton buffer avec une fonction API Win32 (je pense que GlobalAlloc marche).

Si j'ai bien compris, tu veut faire un tableau dynamique comme ça :

WIDTH
/--------------------------------->
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
H | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
I | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
G | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
H | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
T | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
| 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
\/0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

?

Pour ça il faut utiliser (en masm32) ceci :

mov eax, w_size ;Width dans mon dessin
mov ebx, h_size ;Height dans mon dessin
imul eax, ebx
imul eax, SIZEOF DWORD
invoke GlobalAlloc, eax, 0 ;Donne à toutes les cases du tableau la valeur 0
mov mon_pointeur, eax
Commenter la réponse de nightlord666
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 6 avril 2006 à 01:03
0
Merci
pourquoi IMUL, risque de négatif dans les dims du tableau ???
Un seul MUL suffit, inutile d'amuser le processeur.

mov eax, w_size
mov ecx, h_size
shl eax, 2
mul ecx

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Commenter la réponse de BruNews
papiboff 19 Messages postés dimanche 16 octobre 2005Date d'inscription 10 avril 2006 Dernière intervention - 6 avril 2006 à 08:40
0
Merci
bj
ne t'excuses pas c'est juste pour la rigole
de toutes façons je ne regarde pas ce que j'ecris ; oui , oui
pour GlobalAlloc je va tester
SIZEOF DWORD il sort d'ou ? (pitête en dd je mul par 4?(shl,2))
mais en pur asm ; ya pas !?.(je suis un défenseur du pur asm ; même avec 15j d'asm)
je lis le buffer en linéaire en partant de la fin , paque plus speed
merci t'est un pote pour la rep
a+
papi
Commenter la réponse de papiboff
nightlord666 750 Messages postés vendredi 17 juin 2005Date d'inscription 23 mai 2007 Dernière intervention - 6 avril 2006 à 18:12
0
Merci
Personnellement, je ne pense pas que ce soit possible en pur asm, mais il faudrait demander à un spécialiste (BruNews t'es encore là ?).

En fait, l'allocation de mémoire est une fonction de l'OS, donc il est impossible de le faire séparèment de l'OS, et donc en pur asm.
Commenter la réponse de nightlord666
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 6 avril 2006 à 18:23
0
Merci
C'est bien clair, la mémoire tout comme les périphs c'est l'OS qui gère donc on lui demande.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Commenter la réponse de BruNews
nightlord666 750 Messages postés vendredi 17 juin 2005Date d'inscription 23 mai 2007 Dernière intervention - 6 avril 2006 à 18:27
0
Merci
Le pire c'est que tu demande comment le faire en MASM32, mais que tu veut le faire en pur asm ^^. Le MASM32, c'est justement fait pour pouvoir utiliser toutes les APIs Windows.

La reponse est donc claire : pour déclarer un buffer, il faut absolument le faire en utilisant l'OS et cette ligne :

mov eax, w_size
mov ecx, h_size
shl eax, 2
mul ecx
mov ecx, SIZEOF DWORD
shl eax, 2
mul ecx

invoke GlobalAlloc, eax, 0
mov mon_buffer, eax

Je pense que c'est la reponse définitive, à moins que je n'ai fait une erreur dans mon code asm (copier-coller rapide, pas testé).
Commenter la réponse de nightlord666
nightlord666 750 Messages postés vendredi 17 juin 2005Date d'inscription 23 mai 2007 Dernière intervention - 6 avril 2006 à 18:29
0
Merci
Et en fait, SIZEOF est une macro de MASM qui renvoie la taille en octets du type : pour db, c'est 1, pour dw, c'est 2 et pour dd, c'est 4 je pense.
Commenter la réponse de nightlord666
papiboff 19 Messages postés dimanche 16 octobre 2005Date d'inscription 10 avril 2006 Dernière intervention - 6 avril 2006 à 20:01
0
Merci
merci ,merci ,merci ,mais z'aime pas wind' os ! et les api
je vais garder le buffer fixe (repos!) ; pour le gâchis de memoire , bofff!
je donnerai au buffer une taille max ; pi vela
a++
papi
Commenter la réponse de papiboff
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 6 avril 2006 à 20:23
0
Merci
Code portable en ASM, ça n'a aucun sens.

nightlord > pourquoi 2 fois SHL, 1 fois sur le resultat de MUL et basta c'est multiplié par 4.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Commenter la réponse de BruNews
nightlord666 750 Messages postés vendredi 17 juin 2005Date d'inscription 23 mai 2007 Dernière intervention - 6 avril 2006 à 20:57
0
Merci
Euh oui, un copier-coller de ton truc qui a merdé ^^

Je rectifie donc :

mov eax, w_size
mov ecx, h_size
shl eax, 2
mul ecx
mov ecx, SIZEOF DWORD
mul ecx

nvoke GlobalAlloc, eax, 0
mov mon_buffer, eax
Commenter la réponse de nightlord666
papiboff 19 Messages postés dimanche 16 octobre 2005Date d'inscription 10 avril 2006 Dernière intervention - 7 avril 2006 à 01:05
0
Merci
merci brunew mais j'avais décodé ; ben moi , j'ai ben écrit 3*fois "buffet"
je peux vous dire ! ; il peut le dire?! "c'est triste pour vous d'accepter aussi facilement (pour un langage
aussi puissant) de garder les mains liées par les api et wind' os"
je crois que je ne suis pas fait pour ce monde ASM ?!
a+ plus +++@+++
papi
Commenter la réponse de papiboff

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.