[NEWBIE] comment passer une structure en paramétre :( !?

Signaler
Messages postés
10
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
22 août 2007
-
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
-
voilà mon probléme j'aimerai passé en parametre pr une fonction une structure du genre :
endroit struct
x dw ?
y dw ?
endroit ends 
; je declare une structure :
endroit1 endroit ?
; j'initialise les deux coordonnées :
mov endroit1.x,100d
mov endroit1.y,150d
; et la j'aimerai le passé en parametre :
push endroit1
call lire_coordonnee ; par exemple

lire_coordonne proc
??????
ret
lire_coordonne endp


la question est comment accedé à "endroit1.x" ou "endroit1.y" dans la fonction lire_coordonne , voila et merci d'avance pour les responses :) (bonne année en passant :P)

4 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
ben d'ordinaire quand c'est une structure on passe le pointeur sur son adresse:
push offset maStruct
tout depend comment tu codes la fonction qui doit recevoir.

ciao...
BruNews, MVP VC++
Messages postés
10
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
22 août 2007

Est ce que tu pourra me donner des exemples qui correspandent à mon probléme ? merci :)
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
en ASM 32 bits:

la struct comprenant 2 membres de 32 bits, si on te la passe sur pile:

lire_coordonne proc
mov eax, [esp+4] ; RECUP ADDR STRUCT, LE PARAM

mov edx, [eax] ; VALEUR DE x DANS edx
mov ecx, [eax+4] ; VALEUR DE y DANS ecx

ret 4 ; DEPILAGE ICI
lire_coordonne endp

ciao...
BruNews, MVP VC++
Messages postés
540
Date d'inscription
dimanche 23 mars 2003
Statut
Membre
Dernière intervention
5 octobre 2007
1
CODE 16 bits

endroit struc ; attention pour tasm/masm
; c'est struc et pas struct
x dw ?
y dw ?
entroit ends

endroit1 endroit <0, 0>

mov word ptr [endroit1.x], 100d
mov word ptr [endroit1.y], 150d

push 100d
push offset endroit1
call scale
add sp, 8

scale:
push bp
mov bp, sp
push bx cx

mov bx, word ptr [bp+4]
mov cx, word ptr [bp+6]

mov ax, cx
imul ax, word ptr [bx.x]
mov word ptr [bx.x], ax

imul cx, word ptr [bx.y]
mov word ptr [bx.y], cx

pop cx bx
leave
ret

Core Breaker