私はアセンブリで完全な乱数を作成しようとしていますが、プログラムを開始するたびに同じ番号が同じ順序で与えられます。 数字が12,132,4113などの場合は、コードを開始するたびに繰り返します。アセンブリで乱数ジェネレータをシードする方法は?
私が作ろうとしているプログラムは、推測ゲームのようなものです。
IDEAL
MODEL small
STACK 100h
DATASEG
;vars here
RNG_Seed dw ?
CODESEG
; Generates a pseudo-random 15-bit number.
; Parameters: <none>
; Clobbers: AX, DX
; Returns: AX contains the random number
proc GenerateRandNum
push bx
push cx
push si
push di
; 32-bit multiplication in 16-bit mode (DX:AX * CX:BX == SI:DI)
mov ax, [RNG_Seed]
xor dx, dx
mov cx, 041C6h
mov bx, 04E6Dh
xor di, di
push ax
mul bx
mov si, dx
xchg di, ax
mul bx
add si, ax
pop ax
mul cx
add si, ax
; Do addition
add di, 3039h
adc si, 0
; Save seed
mov [RNG_Seed], di
; Get result and mask bits
mov ax, si
and ah, 07Fh
pop di
pop si
pop cx
pop bx
ret
endp GenerateRandNum
実行ごとに異なる乱数を得るにはどうすればよいですか?
プログラムがOSなしで実行されていますか? – James
@James osではどういう意味ですか? –
オペレーティングシステム – Ped7g