- PC - Software - Programmering - Assembler - Data
operations
v Numeric, Byte/Char, String
;IND: AX=range (2..65535)
; UD: AX=random number 0..range-1
Seed DW (?)
---
XOR DX,DX
MOV BX,AX ;range
MOV AX,0FFFFH
DIV BX
INC AX ;divider
MOV BX,AX
MOV AX,SEED ;old seed
MOV CX,31421 ;numbers are from a FORTH routine by Leo Brodie
MUL CX
ADD AX,6927
MOV SEED,AX ;new seed
XOR DX,DX
DIV BX ;AX = seed/divider: random number
|
;before: BLOK contains 'oldrange' Lotto numbers
;after : BLOK contains 'newrange' Lotto numbers, 'newrange'='oldrange'-1
; DL=random LOTTO number from BLOK
BLOK DB ... ;list of numbers
RANGE DW . ;count of numbers in list
---
MOV AX,RANGE ;R
CMP AX,1
JNZ GETRANDOM
DEC AX
JMP SHORT GETNUM
GETRANDOM: CALL RANDOM ;0..R-1
GETNUM: MOV DI,AX
MOV DL,BLOK[DI]
MOV SI,RANGE
DEC SI
MOVENEXT: CMP DI,SI
JZ NEWRANGE
MOV AL,BLOK[DI+1]
MOV BLOK[DI],AL
INC DI
JMP SHORT MOVENEXT
NEWRANGE: DEC RANGE |
Byte, Char