[asm] liczby pseudolosowe

0

Wie ktos jak napisac prosty generatorek liczb pseudolosowych ??

wzorowalem sie na tym kodzie, ale niestety sypie sie gdy próbuje odczytac cos z komórek pamieci:

assume cs:code,ds:code
code segment
   bajt   db ?
   cyfra1 db ?
   cyfra2 db ?
start:
   mov ax,cs;
   mov ds,ax;
od_nowa:
   mov ah,2Ch ;odczyt zegara za pomoca przerwania DOSa
   int 21h;
   add ch,cl; wyznaczenie adresu przypadkowego bajtu
   add ch,dh;
   add ch,dl;
   mov es,dx
   mov bx,cx
   mov al,byte ptr es:[bx]; al = wylosowany bajt
   mov byte ptr cs:[bajt],al ;zapis al w pamieci
   cmp byte ptr cs:[bajt],99 ;sprawdzenie maksymalnej wartosci losowanej(zakresu)liczby(tu max 99)
   jns od_nowa;-wypisanie wartosci wylosowanego bajtu(tylko 2 znakow)
   mov al,byte ptr cs:[bajt]
   mov ah,0
   mov bh,10
   div bh
   mov byte ptr cs:[cyfra1],al
   mov byte ptr cs:[cyfra2],ah
   add byte ptr cs:[cyfra1],48
   add byte ptr cs:[cyfra2],48
   mov ah,02h
   mov dl,byte ptr cs:[cyfra1]
   int 21h
   mov ah,02h
   mov dl,byte ptr cs:[cyfra2]
   int 21h
   mov al,0
   mov ah,4Ch
   int 21h
code ends

end start
</ort>
0

Mala podpowiedz : skorzystaj z QueryPerformanceCounter, albo funkcji API GetTickCount. Potem wartosc zwrocona przez EAX przemiel przez prosty algos. Teoretycznie za kazdym razem liczba bedzie inna.

0

Mala podpowiedz : skorzystaj z QueryPerformanceCounter, albo funkcji API GetTickCount
[green] no rzekłbym... blamaż na całej linii...
widzisz tam <font color="blue">int 21h</span> ? To oznacza, że chodzi o tryb rzeczywisty, pod DOSem. Polecam zaznajomienie się w temacie przed próbą odpowiedzi.

0

W wyszukiwarce wpisz ucrlib. Jest to biblioteka z bardzo dobrymi funkcjami w asm. Jest m. in. random i randomize. Tylko szukaj starej wersji pod MASMa, bo raczej z HLA to ci sie przerabiać nie będzie chciało (jakbyś nie mógł znaleźć, to daj znać. Gdzieś na dysku mam już to na TASMa przerobione).

0

Najprościej tak:
rdtsc
efekt: Liczba milisekund od odpalenia/resetu procka - w (e)ax masz dolne (podwójne) słowo, w (e)di górne.

0

Najprościej tak:
rdtsc
efekt: Liczba milisekund od odpalenia/resetu procka - w (e)ax masz dolne (podwójne) słowo, w (e)di górne.

Rzeczywiście, liczba milisekund od uruchomienia komputera ma oczekiwany rozkład losowy... :]

0

topic juz dawno nieaktualny, potrzebne mi to bylo do snejka :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1