Hola gente:
Perdonad si el hilo no correspondiera con el foro pero no sé muy bien donde dirigir esta pregunta. Y como sé que aquí hay peña que el ensamblador es como su segunda lengua pues eso, hay va la pregunta:
Es muy dificil realizar una rutina de calculo aleatorio? Haber me explico, algo así como el RND en basic o parecido. Que se delimite los limites y sobre el resultado se realice una u otra cosa.
No sé si me explico.
Saludos y perdonad de nuevo. Gracias.
sejuan
Ayuda en CM
Moderador: CEZ
- sejuan
- 64 bits
- Mensajes: 866
- Registrado: 15 Jun 2006 16:44
- Ubicación: Amarion
- Contactar:
- na_th_an
- 256 bits
- Mensajes: 11874
- Registrado: 22 Abr 2005 13:25
- Contactar:
Un googleciño rápido me ha llevao a este peaso de página en la cual hay MUCHAS rutinas útiles: http://map.tni.nl/sources/external/z80bits.html
En concreto la que tú quieres:
En concreto la que tú quieres:
Código: Seleccionar todo
3 Random Number Generators
3.1 8-bit Random Number Generator
This is a very simple linear congruential generator. The formula is x[i + 1] = (5 * x[i] + 1) mod 256. Its only advantage is small size and simplicity. Due to nature of such generators only a couple of higher bits should be considered random.
Input: none
Output: A = pseudo-random number, period 256
Rand8 ld a,Seed ; Seed is usually 0
ld b,a
add a,a
add a,a
add a,b
inc a ; another possibility is ADD A,7
ld (Rand8+1),a
ret
3.2 16-bit Random Number Generator
This generator is based on similar method but gives much better results. It was taken from an old ZX Spectrum game and slightly optimised.
Input: none
Output: HL = pseudo-random number, period 65536
Rand16 ld de,Seed ; Seed is usually 0
ld a,d
ld h,e
ld l,253
or a
sbc hl,de
sbc a,0
sbc hl,de
ld d,0
sbc a,d
ld e,a
sbc hl,de
jr nc,Rand
inc hl
Rand ld (Rand16+1),hl
ret
- sejuan
- 64 bits
- Mensajes: 866
- Registrado: 15 Jun 2006 16:44
- Ubicación: Amarion
- Contactar:
na_th_an escribió:Un googleciño rápido me ha llevao a este peaso de página en la cual hay MUCHAS rutinas útiles: http://map.tni.nl/sources/external/z80bits.html
Muchisimas gracias na_th_an voy a probarlas ahora mismo.
Un abrazo.
sejuan
para obtener un número aleatorio entre 0 y 255 simplemente tienes que leer el valor del registro R.
ld a, r nos metería en A un valor "aleatorio" entre 0 y 255.
Pongo entre comillas lo de aleatorio, porque si lo utilizas en intervalos exactos de tiempo, pierde un poco su aletoriedad, pero vamos, para el 90% de los usos en juegos vale
ld a, r nos metería en A un valor "aleatorio" entre 0 y 255.
Pongo entre comillas lo de aleatorio, porque si lo utilizas en intervalos exactos de tiempo, pierde un poco su aletoriedad, pero vamos, para el 90% de los usos en juegos vale