begin process at 2010 03 15 15:40:18
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Divers

 > 

Débutant(e)

 > 

masm32 buf variable


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

masm32 buf variable

vendredi 9 juin 2006 à 00:26:49 | masm32 buf variable

skotmarud

bonsoir,
j'ai un probleme pour créer un buffer à taille variable pourtant je suis tombé sur ce post : http://www.asmfr.com/infomsg_MASM32-COMENT-DECLARER-BUFFET-VARIABLE_706529.aspx mais j'ai rien compris, ça fait que deux semaines que je suis dans l'asm.. j'essai de faire comme ça pour pouvoir par la suite incrémenter ou décrémenter la taille du buffer :
----------------
.data
num dd 5
.data?
buf db num dup(?)
----------------
et a la compile il me dit "constant expected" constante prévue ??
si je fais
buf db addr num dup(?)
là où je l'utilise il me dit "undefined symbol" symbole non défini ! pouvez vous m'aider s'il vous plait car dans ce cas je ne sais pas comment faire sans aide :-/
 merci
vendredi 9 juin 2006 à 09:31:03 | Re : masm32 buf variable

Nasman

Réponse acceptée !
Bonjour,

Je ne pense pas que ce type de déclarations puisse fonctionner pour les raisons suivantes:
La section .data est la section des données initialisées - Qui ont donc des valeurs fixées au lancement du programme.
Pour les données non initialisées, c'est une réservation d'espace qui est faite. Cette réservation est de taille donnée. De toute façon ton type de déclaration reviendrait à la même chose que:
data
num dd 5
.data?
buf db 5 dup(?)

Le seul intérêt de ce que tu veux faire serait d'éviter de modifier dans les deux types de données à chaque fois que tu doives recompiler.
Si la valeur de num est susceptible de varier au cours de l'exécution du programme, celà ne fonctionnera pas. Nota le programme exécutable remplace les adresses (offsets) par des valeurs en "dur". Si tu modifie la taille d'un buffer, tu décalerais les adresses de ce qui suit - il faudrait dans ce cas modifier les adresses en dur de la partie programme - et donc que la section programme soit writable. C'est pas impossible mais dangereux.
Je te conseille plutôt de réserver l'espace pour ton buffer dans la pile. Par exemple

data
num dd 5

code
...
sub esp,num   ;réserve 5 dword
...
mov [esp],eax   ;met le contenu de eax (par exemple) dans le buffer dont l'adresse est dans esp (vérifier que la valeur de esp pointe toujours bien sur l'emplacement du buffer).
Après utilisation, libérer le buffer
add esp,num

A+
vendredi 9 juin 2006 à 10:44:18 | Re : masm32 buf variable

skotmarud

Bonjour Nasman En fait l'intérêt de ce que je veux faire (une sorte de editbox au final) c'est pouvoir faire varier la taille du buffer qui receptionne les entrées clavier en une chaine de caractères affichée avec la fonction TextOut de l'api windows et donc effacer un caractère en decrémentant de 1 le buffer par la touche vk_back ou vk_delete qui serait bien mieux que de remplir le vide avec un espace, parceque même le caractère zero ça affiche un caratère apparemment inconnu !... je vais creuser ton conseil et merci pour ces explications, je comprends maintenant pourquoi ma méthode ne peut fonctionner! ++
vendredi 9 juin 2006 à 13:06:13 | Re : masm32 buf variable

Nasman

Rebonjour,

Si tu remplis le buffer avec les caractères saisis et augmente sa taille en conséquence (ou l'inverse) tu sera confronté au problème suivant si tu utilise la pile:
Supposons que les caractères saisis soient "azerty". Ta pile va se remplir à l'envers soit en finale:
y en [esp]
t en [esp+1]
r en [esp+2]
e en [esp+3]
z en [esp+4]
a en [esp+5]
La chaine sera donc enregistrée comme "ytreza" à partir de l'adresse pointée par[esp]. Ce ne sera pas très pratique pour la sortir avec TextOut.
Dans ce cas il te faut décaler tous les octets du buffer (vers les adresses négatives) pour laisser une place vide pour mettre le caractère saisi suivant. - Et tu devras bien gérer tout octet placé sur la pile (avant le buffer - du point de vue des adresses).

Bon courage

vendredi 9 juin 2006 à 13:26:41 | Re : masm32 buf variable

patatalo

Membre Club Administrateur CodeS-SourceS
salut, l'utilisation des fonctions GlobalAlloc et GlobalFree est le seul moyen de generer des buffers variables a conserver en memoire à la sortie de la fonction. @++


Cette discussion est classée dans : buffer, variable, num, buf, masm32


Répondre à ce message

Sujets en rapport avec ce message

Access violation et ecriture de variable [ par anthraxx ] J'ai une question qui me traKsse avec MASM:quand je declare un tampon comme cela:buffer db 100 dup(0)et dans le code, j'essaye d'ecrire dedans, avec u [NASM-Linux] Problème de buffer [ par yann2192 ] Bonjour à tous, je me suis lancé dans l'assembleur 32bits avec les appels linux et j'ai un problème.Je récupére le chemin d'un fichier entrer par l'us Masm32 - adressage direct - soucis ! [ par ouadji ] Bonjour à tous,mov eax , [11223344h]cette instruction existe ! registre de segment utilisé ... DS ... par défaut !Code machine de cette instruction : buffer directx [ par mana ] bonjour, je travail avec des image dont l'adresse est un pointeur directx(dans la ram du pc , pas cette de la carte vidéo), mais l'accès a la mémoire send db to bmp [ par vincent2795 ] bonjour, j' ai un bmp que j' ai mais dans ma source sous forme "DB" je veux le sortir de ma source et le mettre dans un bmp. j' arrive a y sortire du Partie haute et basse [ par noname001 ] Bonjour à tous, voilà j'aurais essentiellement 2 questions: 1)J'ai un petit soucis concernant la partie haute et basse d'une variable. Imaginons qu débutant qui a un prob avec l'int21h [ par sibi12 ] salut voivi mon code : mov ah, 09h mov dx, offset buffer int 21hbuffer a été déclaré comme ca: buffer db 50 dup(0)le compilateur me met prob mode protégé pour graphisme [ par prunkdump ] Bonjours afin de testé un de mes programmes qui passe en mode protégé j'ai éssayé de renplir en 32bits le buffer d'écran en mode graphique 13h. Au déb Affichage caractere par caractere d'une variable DT [ par Eclipz ] BonjourVoila, un souci en MASM, j'ai une variable nommée Resultat de type DT et je voudrais afficher, caractere par caractere, son résultat... le prob Image jpg en Masm32 [ par phoenix1969asm ] Tout d'abord Merci pour l'aide que vous allez m'apporterje debute est je dois dire que je nage un peu ...je souhaiterai afficher une image Jpg de mani


Nos sponsors


Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
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,827 sec (3)

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