begin process at 2012 05 25 10:32:05
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Processeurs

 > 

X86

 > 

taille d'une structure masm32


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

taille d'une structure masm32

samedi 6 janvier 2007 à 11:48:40 | taille d'une structure masm32

Le cancre

Bonjour à tous,
je cherche un moyen pour connaitre la taille d'une structure,mais je sais pas qu'elle commande faut utiliser, sizeof ou lengthof ? ..(dans les 2 cas,j'obtiens pas le bon résultat lol :)

voici comment je procéde
  xor ax,ax 
  add ax,lengthof e_IP
  add ax,lengthof e_UDP
  add ax,lengthof eData 
  mov e_IP.TotalLen,ax
  invoke SetDlgItemText,hWin,IDC_EDT4,offset e_IP.TotalLen

ou alors 
  xor ax,ax
  add ax,sizeof e_IP
  add ax,sizeof e_UDP
  add ax,sizeof eData 
  mov e_IP.TotalLen,ax
  invoke SetDlgItemText,hWin,IDC_EDT4,offset e_IP.TotalLen

merci d'avance pour vos réponses

samedi 6 janvier 2007 à 14:29:18 | Re : taille d'une structure masm32

BruNews

Administrateur CodeS-SourceS
Dernier param de SetDlgItemText est l'adresse d'une chaine, je ne suis pas certain que ce soit le cas dans ton code.

ciao...
BruNews, MVP VC++
samedi 6 janvier 2007 à 15:03:43 | Re : taille d'une structure masm32

ToutEnMasm

Salut,
Il y a effectivement l'erreur du au mauvais paramètre.
Sizeof renvoie la taille en bytes (modifier de l'alignement s'il existe).
lengthof renvoie le nombre de variables (de taille n bytes) constituant la chaîne.
                  ToutEnMasm

                
samedi 6 janvier 2007 à 16:47:50 | Re : taille d'une structure masm32

Le cancre

si je comprends bien,j'ai juste à mettre la somme dans l'adresse d'une chaine

d'habitude, j'utilise cette variable
.data?
BufferTxt    dd 128  dup (?)
....
je remplis mes structures suivant les valeurs des texbox et à la fin,je fais la somme 
   xor ax,ax
  add ax,sizeof e_IP
  add ax,sizeof e_UDP
  add ax,sizeof eData 
  mov e_IP.TotalLen,ax
  add eax,0FFFFh
  mov BufferTxt,eax

  invoke SetDlgItemText,hWin,IDC_EDT4,offset BufferTxt
  et comme résultat j'obtiens  �1B;�8;�1; dans ma textbox
  et même si sur mon interface, je change les valeurs de ma structure le résultat ne    change pas..depuis 1h30 je m'arrache les cheveux : ) mais je ne trouve pas



samedi 6 janvier 2007 à 17:52:33 | Re : taille d'une structure masm32

BruNews

Administrateur CodeS-SourceS

eax contient une valeur en binaire, il y a toute chance qu'il y ait des octets 0 dedans et c'est le terminateur d'une chaine.
Il faut transformer le binaire de base 2 vers base 10.

ciao...
BruNews, MVP VC++

samedi 6 janvier 2007 à 19:47:54 | Re : taille d'une structure masm32

ToutEnMasm

Salut,
Il faut transformer le nombre en caractères ascii visualisables avec une fonction du genre atodw(masm).
.data
texte db 30 dup ()
.code
invoke atodw,BufferTxt,addr texte
invoke SetDlgItemText,hWin,IDC_EDT4,addr texte
  
Le dw 1444h  deviendra  db 31h,34h,34h,34h,0.
et s'affichera 1444
               ToutEnMasm
dimanche 7 janvier 2007 à 17:11:33 | Re : taille d'une structure masm32

Le cancre

Bonjour à vous 2 et merci pour votre aide c'est sympa

ToutEnMasm,j'ai eu des erreurs avec ton code
.data
texte db 30 dup () <- erreur =  invalid data initializer
.code
invoke atodw,BufferTxt,addr texte<- erreur = error A2136: too many arguments to INVOKE
invoke SetDlgItemText,hWin,IDC_EDT4,addr texte

voici mon nouveau code en m'aidant de vos réponses 
.data?
BufferTxt    dd 30  dup (?)

.code
 mov e_IP.TotalLen,sizeof e_IP
 mov esi,offset e_IP.TotalLen
 invoke dwtoa ,esi,addr BufferTxt
 invoke SetDlgItemText,hWin,IDC_EDT4,offset BufferTxt

comme résultat, j'ai bien des chiffres et plus de petit carré...ouf!..enfin : )
mais le résultat est pas bon

pour bien comprendre mes erreurs et me faire une idée sur la chose, est-ce qu'on peut me faire une petite démo avec une structure qui contient 2 à 3 variables(texte,et chiffre) et le passage du code qui permet d'obtenir la taille correct de cette structure

Merci d'avance  

dimanche 7 janvier 2007 à 17:51:39 | Re : taille d'une structure masm32

BruNews

Administrateur CodeS-SourceS

A quoi rime tout cela en ASM ???
La taille d'une struct doit etre connue à l'assemblage alors te suffit de jeter un oeil sur la struct, la somme des tailles de ses membres est la taille totale et basta. En ASM pas de compilo pour aligner les données correctement à ta place, responsabilité du programmeur est pleine et entière/

Exemple qui montre ce que ferait mauvais programmeur alors qu'il faudrait ajouter un membre WORD pour avoir un align correct de 4. Ici le prog affichera bien 6, ce qui est assurément mauvais je le répète.

.586
.model flat, stdcall
option casemap :none
option prologue:none
option epilogue:none

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

BIDON STRUCT
  x DWORD ?
  y WORD ?
BIDON ENDS

.data

buf            DB    24 dup(0)
szappname      DB    "Taille",0

.code
start:
   ALIGN 4
   mov      ecx, sizeof BIDON
   mov      edx, offset buf
   call     ultoa
   push     0
   push     offset szappname
   push     offset buf
   push     0
   call     MessageBox
  
progEnd:
   push     0
   call     ExitProcess


ultoa PROC   ;  IN: ECX = INT32, EDX = *psz
   or       ecx, ecx
   jnz      short L1
   lea      eax, [edx+1]
   mov      byte ptr[edx], 48
   mov      byte ptr[eax], cl
   ret      0
 L1:
   mov      [esp-4], edi
   mov      [esp-8], edx
   mov      edi, edx
 L2:
   mov      eax, -858993459
   mul      ecx
   mov      eax, edx
   shr      eax, 3
   mov      edx, ecx
   lea      ecx, [eax+eax*8]
   add      ecx, eax
   sub      edx, ecx
   add      dl, 48
   mov      [edi], dl
   mov      ecx, eax
   inc      edi
   test     eax, eax
   jnz      short L2
   mov      byte ptr[edi], al
   mov      [esp-12], edi
   mov      eax, [esp-8]
 L3:
   dec      edi
   mov      dl, [eax]
   mov      cl, [edi]
   mov      [edi], dl
   mov      [eax], cl
   inc      eax
   cmp      eax, edi
   jb       short L3
   mov      eax, [esp-12]
   mov      edi, [esp-4]
   ret      0
ultoa ENDP

end start

ciao...
BruNews, MVP VC++

dimanche 7 janvier 2007 à 18:28:20 | Re : taille d'une structure masm32

Le cancre

A quoi rime tout cela en ASM ???
je tente de faire un générateur de trame udp,j'ai des textbox sur mon interface pour remplir ma structure,c'est pour cela que je ne connais pas la taille de cette structure à l'avance car elle est vide au départ, enfin bon...merci pour l'exemple du mauvais programmeur

dimanche 7 janvier 2007 à 19:24:36 | Re : taille d'une structure masm32

BruNews

Administrateur CodeS-SourceS
On connait par force la taille d'une structure puisque c'est justement fait pour cela, réserver de la place pour un nombre d'octets sinon ce n'est pas une structure mais une alloc dynamique de mémoire (voir VirtualAlloc).

ciao...
BruNews, MVP VC++


Cette discussion est classée dans : ip, add, ax, sizeof, lengthof


Répondre à ce message

Sujets en rapport avec ce message

Deplacement [ par FireMan57 ] Bonjour, je débute en asm x86 et j'aimerais savoir comment faire pour effectuer correctement le déplacement d'un personnage en mode graphique. J'ai dé interruption [ par aboulkhir ] salut j essaye de gerer le clavier en interruption en asselmbleur voila mon programme je travaille sous debug en invite de commande de windowsclimo tp assembleur i3 pour la FST [ par babbiverus ] main proc mov ax,@Datamov ds, axmov si,offset tabmov cx, 16mov bx,0saisie:  mov dx,offset commande;afficher "saisir un nombre"mov ah,9int 21hmov ah, 1 asm dos sous xp probleme adressage memoire ecran [ par blood01 ] Bonjour, Voilà, j'ai toujours aimé programmer à mes heures perdues et depuis tout un temps, j'ai décidé de me lancer dans l'assembleur, j'ai d'abord f fatal error LNK1190 [ par WildChild54 ] Bonjour à tous!Eh bien voilà, je voudrais créer un petit programme affichant l'heure (je sais il y en a déjà plusieurs qui en ont parlé ici) mais j'ai diffrerence entre (e)ax et ax , (e)bx et bx, ... [ par dyroj ] bonjour a tous,je suis en periode d'aprentissage du language assembleur et j'ai une petite quetion consernant le e (extented) devant le nom d'un regis question sur le language asm [ par dyroj ] bonjour,j'ai qulque question sur l'asm :-quand je fait un : mov ax, 10 , quesqui va dans le registre (ladresse de 10 dans la ram, ou 10).-pourquoi se Affichage décroissant et alphabétique de 2 listes(Nom_Prénom et Note) [ par m_didi9 ] [code=autre]Data SEGMENT Mess1 DB 10,13, 'Entrez la liste des Noms :' DB 10, 13, '$' Mess2 DB 'Entrez la liste des Notes :' DB 10, 13, '$' Mess3 [ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique) [ par dogloop ] J'ouvre ce topic pour essayer de mieux comprendre quelles sont les différentes façons pour accéder à toute la RAM (et aussi peut être la ROM) de mon P


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 : 1,076 sec (3)

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