• Domingo 28 de Abril de 2024, 08:08

Autor Tema:  Random/rand en ASM?  (Leído 7117 veces)

Continue

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Random/rand en ASM?
« en: Sábado 19 de Julio de 2008, 09:10 »
0
Hola!
Quisiera saber dónde se realiza el cálculo de las funciones "random/rand" que están presentes en tantos lenguajes de programación.Yo sé solo lo que he leido y he leido que el random genera números pseudoaleatorios y en realidad son números calculados.Pero también he leido que algúnos de los lenguajes a la hora de compilar un .exe pasan por comandos ASM para pasar a código maquina.Dónde se calcúla el rand de C por ejemplo,¿en una de las funciones en las bibliotecas que incluimos en el principio? o llamando una función en ASM o tal vez en un chip preprogramado en la placa madre?
Y si está presente en ASM esa función,cómo la llamo?Espero no tener que escribir se la uno mismo  :wacko: por ser así,mejor la copio de otro sitio y la pego en mi ensamblador :P
Gracias por calmar esta cuiosidad mia!

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Random/rand en ASM?
« Respuesta #1 en: Lunes 21 de Julio de 2008, 20:46 »
0
Código: ASM
  1.  
  2. proc Random Range: DWORD                ;get pseudo random namber
  3.     mov     eax, [Range]                ;[RandSeed] es variable global que se puede cambiar
  4.     xor     edx, edx                    ;para modificar el patron del random
  5.     imul    edx,[RandSeed],08088405H    ;08088405h una constante, algunas cifras se pueden cambiar, otras no
  6.     inc     edx
  7.     mov     [RandSeed],edx
  8.     mul     edx
  9.     mov     eax, edx
  10.     ret
  11. endp
  12.  
  13.  
Ese codigo es de FASM. La funcion es una adaptacion del Random de Delphi.
 [RandSeed] es una variable global que se usa como semilla de los numros aleatorios. Una buena manera de sacar la semilla en Windows, es obtener el tiempo con GetTime
http://www.wowwiki.com/API_GetTime
http://foros.solocodigo.com/viewtopic.php?t=8122

Continue

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Random/rand en ASM?
« Respuesta #2 en: Martes 22 de Julio de 2008, 06:10 »
0
Gracias por la respuesta,Enko!

esse

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Random/rand en ASM?
« Respuesta #3 en: Domingo 11 de Enero de 2009, 02:33 »
0
Disculpa este codigo lo utilice tambien en MASM pero no pude hacer q funcione siempre me devuelve cero en eax, le de el rango que le de, como tendria q ser??


Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Random/rand en ASM?
« Respuesta #4 en: Domingo 11 de Enero de 2009, 12:02 »
0
¿Estas inicializando RandSeed? Publica tu codigo completo sino ...

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.

esse

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Random/rand en ASM?
« Respuesta #5 en: Domingo 11 de Enero de 2009, 19:05 »
0
Código: Text
  1. Random PROC range:DWORD              ;get pseudo random namber
  2.      mov     eax, [range]                ;[RandSeed] es variable global que se puede cambiar
  3.      xor     edx, edx                    ;para modificar el patron del random
  4.      imul    edx,[RandSeed],08088405H    ;08088405h una constante, algunas cifras se pueden cambiar, otras no
  5.      inc     edx
  6.      mov     [RandSeed],edx
  7.      mul     edx
  8.      mov     eax, edx
  9.      ret
  10. Random ENDP
  11.  
  12.  
  13.  
  14.  
  15. ;/////////////////////////////////////////////////////////////PRINCIPIO DEL PROGRAMA/////////////////////////////////////////////////////////////////
  16. main PROC
  17.     mov ax,@data
  18.     mov ds,ax
  19.     mov es,ax
  20. inicio:
  21.     ;semilla random
  22.     mov eax, fs:[046ch]
  23.     mov RandSeed, eax
  24.     call Random(10d)
  25.     scanF
  26. main    ENDP
  27. END main
  28.  

Cuando le dejo el ret, se cierra el programa, si le quito el ret se queda congelado :S ya me genera el aleatorio... pero ya q llamo la funcion, no regresa al codigo..

Gracias!

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Random/rand en ASM?
« Respuesta #6 en: Lunes 12 de Enero de 2009, 01:14 »
0
La proxima pone TODO el codigo por favor (con MASM tuve que agregar, dword ptrs para RandSeed y assume fs:nothing, comentar scanF, etc).

Esto esta mal:
Código: Text
  1. call Random(10d)
  2.  

No esta pasando ningun parametro sino que esta llamando a Random+0xA (10d).

Asi es como se pasa un parametro a esta funcion:
Código: Text
  1. push 10d
  2. call Random
  3.  

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.

esse

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Random/rand en ASM?
« Respuesta #7 en: Lunes 12 de Enero de 2009, 01:16 »
0
Ahh ok muchas gracias, es que estoy acostumbrado a medio y alto nivel  :P  y disculpa la proxima pondre todo el codigo pero es q como lo tengo en modulos se me hizo mas facil pegar solo el main lo siento  :rolleyes: