MENU  
  Strona startowa
  Newsletter
  Rejestracja
  LOGOWANIE
  Forum
  Systemy
  WAREZ
  Chomikuj.pl
  Darmowy Hosting
  GRAFIKA
  Baner Flash
  Alfabet HTML
  Asembler Kurs
  => Czas i data
  => ADRESOWANIE PAMIĘCI
  => CZAS I RUCH NA EKRANIE
  => DYREKTYWY ASSEMBLERA
  => OBSŁUGA GŁOŚNIKA
  => GENERATOR LICZB LOSOWYCH
  => REJESTRY PROCESORA
  => PĘTLE
  => SZABLON PROGRAMU
  PIERWSZY RAZ HTML
  Hakerstwo
  Świat WWW
  Serwery Proxy
  Galeria
  GRY
  SKÓRKA DO GG
  Lockerz.com
  SKLEP
...
GENERATOR LICZB LOSOWYCH

GENERATOR LICZB LOSOWYCH


Przy obsłudze głośniczka warto wspomnieć o generowaniu liczb losowych. Przydaje się to gdzy chcemy wydobyć z głośniczka szum lub inny potrzebny efekt dźwiękowy oparty o liczby losowe.
W wielu językach wysokiego poziomu funkcja generująca liczby przypadkowe nazywa się RANDOM , więc my będziemy posługiwać się tym samym nazwenictwem.
Jesli chodzi o funkcje random to sposobow uzyskania wartosci przypadkowej jest wiele... Np. odczytujemy z pamieci operacyjnej ilość tiknięć zegara od startu komputera poczym na podstawie takiej liczby wybieramy z pamięci jakąś komórkę(możemy tu zastosowac dowolne metody wyznaczania adresu z wykorzystaniem tej liczby tiknięć)z ktorej pobieramy wartość - to ona bedzie nasza wartoscia przypadkowa. Wadą tego rozwiązania jest to, ze maksymalna wartość to wartość bajtu czyli 255, lecz możemy również pobierać słowo 16-bitowe, podwojne slowo (32 bity) itd... uzyskując wieksze wartoćci).

Innym rozwiązaniem jest zastosowanie zamiast liczby tiknięć aktualną godzinę - tzn. np. odczytujemy:
hh:mm:ss
teraz adres komórki obliczamy na przykład tak:

ds = "hh"+"mm"+"ss" (lub inaczej - jak kto woli) bx = "ss" (lub jak kto woli) bajt = ds:[bx] gdzie: bajt to nasza wylosowana liczba(jesli chcemy stworzyć pewien zakres losowanych liczb to "bajt" trzeba porownac z zakresem, jesli go przekracza[jest od niego większy] to operacje losowania trzeba powtorzyć). Jak komus sie podoba adres "bajtu" możemy także uzależnić od daty i od wielu innych zmiennych elementow w komputerze itd......... Tak więc taka jest ogólna najprostsza randomu...

Przykład:

assume cs:code,ds:code
code segment
bajt db ?
cyfra1 db ?
cyfra2 db ?
start:
mov ax,cs
mov ds,ax ; dane i kod są w jednym segmencie
od_nowa:
mov ah,2Ch ;odczyt zegara za pomoca funkcji DOSa
int 21h; przerwanie DOSa
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
Teraz 11202 odwiedzający (26039 wejścia)
Logowanie  
 
Nazwa użytkownika:
Hasło:
 
 
 
 
 
   
Ta strona internetowa została utworzona bezpłatnie pod adresem Stronygratis.pl. Czy chcesz też mieć własną stronę internetową?
Darmowa rejestracja