Генератор псевдослучайных чисел RND
Moderator: Shaos
-
- God
- Posts: 1078
- Joined: 03 Feb 2003 13:53
Генератор псевдослучайных чисел RND
Хотелось бы заиметь сабжевую функцию с возможностью задания нижней и верхней границы:)
-
- God
- Posts: 1101
- Joined: 29 Dec 2003 01:00
- Location: Москва
Re: rnd
Влад, вот обещанная ссылка.cr0acker wrote:Хотелось бы заиметь сабжевую функцию с возможностью задания нижней и верхней границы:)
Тут много полезных примеров!
http://zilog.sh.cvut.cz/~baze/misc/z80bits.html
-
- Junior
- Posts: 2
- Joined: 31 May 2004 19:40
- Location: St. Petersburg
Code: Select all
global mul
; Генератор случайных чисел, медленный ~3000 takts.
; тpебует наличия функции умножения
RAND_MAX equ 0xffff
psect data
randx: dw 0, 0
psect text
; hl = random(0..<de) генерация числа в диапазоне
randn:
push de
call rand
ex de, hl
pop bc
call mul
ex de, hl
ret
; Получение случайного числа
; -> hl = случайное число 0..65535 ~2300 takts.
rand:
; randx = randx*1103515245 + 12345)>>16) & 077777)
ld de, (randx+2)
ld bc, 0x4e6d
call mul
push hl
ld de, (randx)
ld bc, 0x41c6
call mul
pop de
add hl, de
push hl
ld de, (randx)
ld bc, 0x4e6d
call mul
ld bc, 0x3039
add hl, bc
ld (randx), hl
pop hl
adc hl, de
ld (randx+2), hl
ret
; Установка генератора случайных чисел
; de = инициирующее значение
srand:
ld (randx), de
ret
EXPORT global mul ; long (DE,HL) = DE*BC ~730t.
; функция беззнакового умножения 16-разрядных чисел
; (C) Kirill Frolov
; idea by Vasil Ivanov
; dehl=de*bc ~730t.
psect text
mul:
ld hl, 0
ld a, c
ld c, l ; 18
add a, a
jr nc, $+4
add hl, de
adc a, c ; 29
; REPEAT 7
add hl, hl
rla
jr nc, $+4
add hl, de
adc a, c ; 40*7 309
add hl, hl
rla
jr nc, $+4
add hl, de
adc a, c
add hl, hl
rla
jr nc, $+4
add hl, de
adc a, c
add hl, hl
rla
jr nc, $+4
add hl, de
adc a, c
add hl, hl
rla
jr nc, $+4
add hl, de
adc a, c
add hl, hl
rla
jr nc, $+4
add hl, de
adc a, c
add hl, hl
rla
jr nc, $+4
add hl, de
adc a, c
; ENDR
ld c, a
push hl ; 0chl
ld hl, 0
ld a, b
ld b, l ; 33
add a, a
jr nc, $+4
add hl, de
add a, b ; 29
; REPEAT 7
add hl, hl
rla
jr nc, $+4
add hl, de
add a, b ; 40*7 309
add hl, hl
rla
jr nc, $+4
add hl, de
add a, b
add hl, hl
rla
jr nc, $+4
add hl, de
add a, b
add hl, hl
rla
jr nc, $+4
add hl, de
add a, b
add hl, hl
rla
jr nc, $+4
add hl, de
add a, b
add hl, hl
rla
jr nc, $+4
add hl, de
add a, b
add hl, hl
rla
jr nc, $+4
add hl, de
add a, b
; ENDR
; ahl0 + 0cde = hlde
pop de
ld b, l
ld l, h
ld h, a
ld a, d
add a, b
ld d, a
ld b, 0
adc hl, bc
ex de, hl ; 60
ret ; 729t.