Assembly ile rastgele sayı üretmenin bir kaç değişik metodu var. GetTickCount APIsi, RDTSC komutu ve nrandom fonksiyonlarını kullanarak rastgele sayı üretebiliriz. Bunları kullanarak hazırladığım örnek Rastgele Sayı Üretecini yazının sonunda kaynak kodlarıyla beraber bulabilirsiniz.
GetTickCount:
Çağrıldığında işletim sisteminin başladığı andan itibaren geçen zamanı bize milisaniye olarak döndürür ve EAX yazmacına yazdırır. Her çağrılışda farklı bir sayı gelecektir. EAX yazmacına atılan zaman değerinin tamamını ya da 8 bitlik veya 16 bitlik kısımlarını kullanarak rassal bir sayı elde edebilirsiniz. Böylece kendi üreteciğiniz algoritma ya da fonksiyonlarınızda kullanabileceğiniz bir rastgele sayınız olur.
RDTSC:
Time Stamp Counter kelimelerinin kısa halidir. Çağrıldığında bize işlemcinin en son resetlendiği andan itibaren her bir sayıp devrini verecektir. Yalnız bunu zaman ile karıştırmamak gerekir. Time Stamp Counterın 64bit MSR(model spesific register) yazmacı işlemcinin devrine göre bir artarak yazdırılır. RDTSC için ayrılan yazmaçlar EAX ve EDX yazmaçlarıdır. RDTSC komutu düşük öncelikli 32 biti EAX yazmacına yüksek öncelikli 32 biti EDX yazmacına yazar. Yalnız bu komut bize pentium işlemciler ile beraber geldiği için projenizi hazırlarken en üstte en az 586 olmasına dikkat ediniz aksi halde hata verecektir.
Not: Ayrıca işlemci devrinden zamanı hesaplamak isteyenler için:
#saniye = #devir/işlemci hızı(HZ cinsinden)
yukardaki şekilde hesaplaybilirsiniz.
Masm32.lib->nrandom fonksiyonu:
Masm32 ile birlikte gelen rastgele sayı üreten fonksiyondur.
RDTSC
invoke nseed,eax
invoke nrandom,sayı
şeklinde çağrılır burada sayı bir değişken ya da doğrudan bir sayı olabilir. Bu da o sayıya kadar rastgele sayı üretmemizi sağlar.nseed ise nrandom komutunun program açıldığında hep aynı sayıyı değil yine rassal bir sayı üreterek açılmasını sağlar. Kullanılmazsa nrandom yine rastgele sayı üretir ancak program her açıldığında aynı sayı ile açılır. Güzel bir özelliktir.
Elimden geldiğince açıklamaya çalıştım. Yazım hataları ya da belgede eksik/hatalı bilgi verdiysem affola,bana bildirin düzelteyim. Aşağıda bu konuyla ilgili hazırladığım bir örnek proje var kaynak kodlarını inceleyiniz. Ayrıca s3rh47’e de ayrıca teşekkür ederim. Onun da bir projesini buraya ekliyorum o da güzel bir key generator. Random fonksiyonunun nasıl bir key generator içinde kullanıldığını görmek açısından gayet güzel bir uygulama.
[dm]89[/dm]
[dm]90[/dm]
Comments of this post
s3rh47
15 Kasım 2009
Paylasim Icin Sagol
Umarim herkeze faydali Olur
admin
16 Kasım 2009
Umarım! Şimdiye kadar 9 kişi indirmiş keşke daha çok kişiye ulaşabilsek..
zugzwang
26 Kasım 2009
asm ile ilgilenen fazla yok..
Cihangir
10 Aralık 2009
merhaba yeni bir asm öğrencisiyim her türlü bilgiye açığım :) teşekürler bu arada projeler için
admin
11 Aralık 2009
Teşekkürler, elimden geldiğince birşeyler hazırlamaya çalışıyorum. Her zaman bilgisayar ve internet başında olamıyorum mesleğimden dolayı. Aslında bunlar her ne kadar benim projelerim de olsa dışarıdan her türlü güzel proje ve örneğe açığım. Ancak pek ilgilenen yok herhalde. Ya da bu sayfadan haberdar değiller. İşine yaradığına sevindim, kolay gelsin
KUTALMIS
19 Aralık 2009
Eline sağlık hocam, bir sen uğraşıyorsun valla, ortalık programcıyım diye geçinen web tasarımcılarına dot net cilere kaldı :)
admin
23 Aralık 2009
Yorumun için çok teşekkürler Kutalmış :) Gerçi bende şu aralar iş yoğunluğu ve internet sıkıntısı nedseniyle iyice pasife bağladım. Bir an önce internet olayını çözmem lazım ama nasıl olacak bilmiyorum. Daha neler yapacağım ama her zamanda isteyince olmuyor.
Sağlıcakla kal :)
Ahmet Vural
24 Aralık 2009
Site az kişiye ulaşıyor diye düşünüyorum, 3 yıldır bu işlerle iç içeyim daha yeni haberim oldu.
admin
28 Aralık 2009
Tabii bir google, yahoo gibi bütün insanlığa hitap eden bir içeriğimiz olmamasından kaynaklanabilir. Ayrıca sitenin içeriği ülkemiz çoğrafyasında pek az kişiye hitap ediyor. Hatta o insanların çoğuda iyi birer ingilizce bilgilerine sahip olduklarından yabancı sitelerle işlerini halledebiliyorlar. Bu da Türk assembly dünyasının kısıtlı ve Türk ters mühendisliğine olan ilgininde az olmasının başlıca nedenidir
isimsiz
01 Ocak 2010
@KUTALMIS
“ortalık programcıyım diye geçinen web tasarımcılarına dot net cilere kaldı ”
belki aralarında iyi derecede programcı olanlarda vardır,onların hakkını yemeyelim…
Ama nedendir bilmiyorum ,bilgisayar ile ilk tanışan direk web tasarımına yöneliyor:)
fondeep
20 Ocak 2010
siteyi çok beğendim bundan sonra hep buradayım :D
admin
20 Ocak 2010
Her Zaman bekleriz:)
Emre TINAZTEPE
19 Mayıs 2010
Kardeşim, eline sağlık. O kadar işin arasında bunlar deşarj olmamızı sağlayan tek şey herhalde:)
Ufaklığı sabırsızlıkla bekliyoruz, kankilerin olarak. Seni andık geçen…
Gel artık da birer kahve içelim…
Dikkat kardeşim kendine
admin
05 Haziran 2010
Sağol kardeşim, elimden geldiğince ve zaman(!) buldukça birşeyler yapmaya çalışıyorum. Ufaklık 7,5 aylık oldu, darısı başına. Umarım yakın zamanda karşılaşırız. Yeni projem var başladım bitirince ekliyeceğim siteye. Kendine iyi davran görüşmek üzere.
DarkStyle
13 Şubat 2011
Ters Mühendislik icin mükemmel bir Paylasim,Almanyada yasiyorum. Islerimden dolayi pek fazla ilgilenemiyorum.
Ilgilendigim alan Delphi7 ve Assembly
Paylasimdan dolayi tesekkür eder basarilarinin devamini dilerim.
admin
25 Şubat 2011
Yorumun ve ilgin için teşekkürler
SCTZine » » Rastgele Ondalıklı Sayı Üreteci
05 Ağustos 2012
[…] yazımda sizlerle rastgele tamsayı üreten bir araç hazırlayıp kaynak kodlarıyla eklemiştim. BURADAN inceleyebilirsiniz. 2 gün önce MASM Forumlarında rastgele reel sayı üretmek ile ilgili bir […]