• Jueves 14 de Noviembre de 2024, 04:10

Autor Tema:  Arreglo De Una Estructura  (Leído 2945 veces)

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Arreglo De Una Estructura
« en: Miércoles 28 de Marzo de 2007, 18:10 »
0
Para hacer un array hago:
Código: Text
  1.  
  2. Array  dd 255 dup ?
  3.  
  4.  
El problema es que si en vez de "dd" pongo la estructura la cosa no compila. Y si llegase a compilar, tampoco me imagino como sería el ecceso.

¿Que se hace en esos casos? Es decir, cuando se necesita tener en memoria consecutivame estructuras.

Se hace varios arreglos con sus campos por separado?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Arreglo De Una Estructura
« Respuesta #1 en: Miércoles 28 de Marzo de 2007, 19:45 »
0
Yo no suelo trabajar con arrays estaticos sino dinamicos y lo que encontre en Internet no me funciona directamente:

http://maven.smith.edu/~thiebaut/ArtOfAsse...H05/CH05-3.html

Pero si reemplazo el (?) por ({}) si me funciona bien.

De cualquier manera siendo los arrays memoria contigua el chiste sigue estando en que para acceder a cualquier campo de cualquier elemento del array se hace una operacion matematica simple.

Primero obtenemos la estructura en si con: Elemento * sizeof(Estructura)

Y despues le sumamos la posicion en que se encuentra el campo al que queremos acceder. Aunque nos podemos ahorrar este paso usando esto (uso el ejemplo de la pagina pero asi me gusta mas):

Código: Text
  1.  
  2. Point           struct
  3. x               word    0
  4. y               word    0
  5. z               word    0
  6. Point           ends
  7.  
  8. Object8         struct
  9. Pts             point   8 dup ({})
  10. Color           dword   0
  11. Object8         ends
  12.  
  13.  
  14. .data
  15. d Object8 {}
  16.  
  17. .code
  18. main:
  19. mov d.Pts[0*sizeof(Point)].x, 0
  20. mov d.Pts[0*sizeof(Point)].y, 1
  21. mov d.Pts[0*sizeof(Point)].z, 2
  22. mov d.Pts[1*sizeof(Point)].x, 0
  23. mov d.Pts[1*sizeof(Point)].y, 1
  24. mov d.Pts[1*sizeof(Point)].z, 2
  25.  
  26.  

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Arreglo De Una Estructura
« Respuesta #2 en: Miércoles 28 de Marzo de 2007, 22:00 »
0
Gracias por el link. Pense que no se podía ya que no se me ocurría el tema de como direccionarlo después.
Aca va la version en FASM
Código: Text
  1.  
  2. struct MyPoint
  3.   x    dw 0
  4.   y    dw 0
  5. ends
  6.  
  7. section '.data' data readable writeable
  8.    myArray      MyPoint
  9.    rb 8 * sizeof.MyPoint; si o si tiene que ser linea nueva
  10.  
  11. section '.code'  data readable
  12.    mov     [MyArray.x + 0 * sizeof.MyPoint], 5
  13.    mov     [MyArray.y + 0 * sizeof.MyPoint], 8
  14.    mov     [MyArray.x + 1 * sizeof.MyPoint], 9
  15.    mov     [MyArray.y + 1 * sizeof.MyPoint], 5
  16.  
  17.  

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Arreglo De Una Estructura
« Respuesta #3 en: Miércoles 28 de Marzo de 2007, 22:50 »
0
Por sierto, para arrays Dinamicos, ¿Que se hace?
HeapAlloc y luego redireccionas usando Index x SizeOf + algo mas?
Código: Text
  1.  
  2.   &#59; para un array de Points que tiene x, y: DWORD
  3.    [hHeap + 0 * sizeof.DWORD + 0 * sizeof.Array] = Array[0].x
  4.    [hHeap + 1 * sizeof.DWORD + 0 * sizeofArray] =  Array[0].y
  5.   &#59; lo mismo pero ahora sin sizeof.DWORD que es 4
  6.    [hHeap +  0 + 1 * sizeof.Array] = Array[1].x
  7.    [hHeap +  4 + 1 * sizeofArray] =  Array[1].y
  8.  
  9.  
Es asi, o se puede hacerlo mas comodo?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Arreglo De Una Estructura
« Respuesta #4 en: Miércoles 28 de Marzo de 2007, 23:25 »
0
Cita de: "Enko"
Por sierto, para arrays Dinamicos, ¿Que se hace?
Primero obtenemos la estructura en si con: Elemento * sizeof(Estructura)
Y despues le sumamos la posicion en que se encuentra el campo al que queremos acceder.


Si tuvieramos una estructura con 3 campos siendo estos de tipo DWORD a,b y c. Entonces para acceder a b sumariamos 4 y a c 8 (a es 0).

En MASM podes usar assume y solo tenes que calcular el valor inicial y usar la estructura:

Código: Text
  1.  
  2. ;teniendo en eax Elemento * sizeof(Estructura)
  3. assume eax:ptr ESTRUCTURA
  4. mov ebx, [eax].a
  5. mov ecx, [eax].b
  6. mov edx, [eax].c
  7.  
  8.  

¿Cool, no?

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Arreglo De Una Estructura
« Respuesta #5 en: Miércoles 28 de Marzo de 2007, 23:27 »
0
TOTALMENTE OFF-TOPIC PERO:

¿Viste el Stalker?

Es de unos compatriotas tuyos, lo estoy empezando a jugar y parece MUY bueno.

http://www.gamespot.com/pc/action/stalker/....html?q=stalker
http://www.meristation.com/v3/des_analisis...o=art&c=1&pos=2

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Arreglo De Una Estructura
« Respuesta #6 en: Jueves 29 de Marzo de 2007, 00:32 »
0
Gracias por avisar lo de STALKER, tengo una amigo que lo estaba esperando anciosamente. Cuando le diga que salió se va a poner loco. (es fanatico del doom)

A mi los juegos de disparos en primera persona me marean, como que siento nauceas. No siempre, pero igualmente por eso no los juego tanto.
Los sreenshots se ven realmente bien. Veo si lo consigo :devil: , lo copio y lo paso a mi amigo. O mejor aun, se lo paso a el, y que él me lo copie. :lightsabre:
Citar
La ambientación es sublime, la libertad es tremenda.

Ésto sí es next gen, parece un mundo paralelo donde todo evoluciona a su ritmo. La IA es sorprendente.

Todos los juegos deberían de ser así de buenos, y no enfocar solamente los gráficos.
Parecen buenas críticas.
Tiene algo de terror? Si lo jugas con las luces apagadas da miedo?

El último juego con el que me entretuve fue Oblivion: http://www.elderscrolls.com/
Rol en primera persona y tercera.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Arreglo De Una Estructura
« Respuesta #7 en: Jueves 29 de Marzo de 2007, 09:52 »
0
Cita de: "Enko"
Gracias por avisar lo de STALKER, tengo una amigo que lo estaba esperando anciosamente. Cuando le diga que salió se va a poner loco. (es fanatico del doom)

De nadas, lo estuve jugando un poco mas y esta bueno!

Cita de: "Enko"
A mi los juegos de disparos en primera persona me marean, como que siento nauceas. No siempre, pero igualmente por eso no los juego tanto.

Nunca fueron mis favoritos realmente, aunque en los ultimos tiempos estoy jugando a algunos que tienen algo de esto tipo Splinter Cell o Deus Ex.

Cita de: "Enko"
Si lo jugas con las luces apagadas da miedo?

Juaz, ni idea, yo no juego con las lueces apagadas ningun juego  :lol:

Cita de: "Enko"
El último juego con el que me entretuve fue Oblivion Rol en primera persona y tercera.

Vi por ahi que subieron unos niveles nuevos para el juego pero no lo conocia, tampoco es que los juegos de rol me llamen mucho, suelo jugar mas deportivos (rugby, futbol, tenis) y aventuras graficas.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Arreglo De Una Estructura
« Respuesta #8 en: Jueves 29 de Marzo de 2007, 21:35 »
0
Citar
vi por ahi que subieron unos niveles nuevos para el juego pero no lo conocia
El juego tiene un editor de todo, por eso se pueden crear mods, pero la verdad, en un momento termina ser siempre lo mismo: "subir de nivel" o "buscar bugs y explotarlos y subir de nivel"
En los de deporte soy malisissisimo, en todo mi vida habré jugado 5 hs de juegos de deporte excluyendo los de carreras, a esos los jugé.

El que si realmente me gustó fue Soul Reaver 1, el ambiente y la historia es espectacular, cuando caminas por un laberinto y aparese un bicho :scream:


Si para algo sirven las computadoras es para jugar juegos  :smartass:  :kicking:  :(

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Arreglo De Una Estructura
« Respuesta #9 en: Sábado 28 de Abril de 2007, 17:46 »
0
Encontré el "equivalente" del assume de Masm en Fasm.
Código: Text
  1.  
  2. mov     esi, [pMem]
  3. virtual at esi
  4.    my_PARTICAL     PARTICAL
  5. end virtual
  6. mov    [my_PARTICAL.x], eax
  7. mov    [my_PARTICAL.y], edx
  8.  
  9.