hi-tech mi?

Başlatan Fixxer, 13 Ocak 2009, 00:35:24

z

Bunda gariplik yokki,

C iyidir. Assembly ile birlestirince cok daha iyidir.

Opcode ile alakali yazima takilmissin sen. O yazi, bu basliktali Assembly = Opcode yazanlara hitabendi. Sen kendi ustune alindin.

Orada anlasilir diye uzun uzun yazmadim. Opcode ile program yazmaya kalktiginizda tum adresleme hesaplarini, degisken adres degerlerini de siz dusuneceksiniz tek tek opcode araliklarina kendiniz yerlestireceksiniz demek istiyordum. Fakat konuyu matbaaya, Osmanliya, Lale devrine gericilige donusturdunuz.

Keske atip tutmadan once sorsaydiniz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Asm mi C mi konusunun birkaç başlığa yayılarak , bu kadar uzamasına şaşırdım.

Alıntı yapılan: "bunalmis"
C iyidir. Assembly ile birlestirince cok daha iyidir.

Katılıyorum.  Ama şimdiye kadar  Birkaç küçük asm eklentisi dışında  ciddi ciddi asm blokları eklememi gerektirecek hız ihtiyacım olmadı. İleride olursa o zaman düşünürüm.

Alıntı yapılan: "bunalmis"
Opcode ile alakali yazima takilmissin sen. O yazi, bu basliktali Assembly = Opcode yazanlara hitabendi. Sen kendi ustune alindin.

Zamanında HEX kodlarla ben de çalıştım. Assembbler kesinlikle bana  hex yerine kelime ile çalışma kolaylığından çok daha fazlasını verdi.  
Evet ASM Assembly=Opcode den biraz daha fazlası. Ama kabullenmek lazım ki  çok da fazlası değil.  macro yazabilmek , birkaç adres hesabı yapabilmek  ona derleyici özelliği kazandırmaz.  Assembly = Opcode  değildir   daha fazlasıdır derken  derleyiciler ile kıyaslama  yapıyorsanız yanılıyorsunuz derim.  Ama derleyici ile kıyaslamıyor , sadece Assembler in  bu kadar da basit olmadığını anlatmaya çalışıyorsanız katılırım.

z

O zaman soyle diyeyim.

Opcode = byte (mnemonic) OR (Adres_Bilgisi)

Assembler in yaptigi Adres bilgilerini hesaplamak ve mnemonic kodla birlestirmek ve opcode degerini bulmak.

Fakat daha pek cok kolaylik da getiriyor.

Klein hiz hiz diyoruz da bu bahse konu hiz muallakta kaliyor.

En guzel ornek:

Opamplarla yapilmis analog bir bilgisayari digital olarak gerceklestirmek istedigimizde islemcinin hizi ve assemly kodlama on plana cikiyor.

Kodunuzdan atilan her NOP hayati onem kazaniyor. Cunku kaldirip attiginiz her bir NOP sayesinde bilgisayarin isleyecegi sinyalin frekans degeri de kidim kidim artmis oluyor.

Assembly e bulasmak istemeyenler daha hizli islemci kullanarak sorunu kendilerince cozuyorlar.

-------------------------------------

Motor aslinda cok guclu, motorla tekerlek arasinda reduktor var ve tekerler yavas donuyor deniyor.

C cimiz ne yapiyor, yapabilecegi her seyi deniyor olmadi motoru degistiriyor.

Assemblercimiz ne yapiyor motora hic dokunmuyor reduktordeki orani degistiriyor.

C ile son derece efektif yazilmis bir programi  dahi asm ile kirpip kusa cevirebiliriz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

hasangurlek

Evet "ASSEMBLY = OPCODE" dur.

"Assembly bir programlama dilidir" cümlesi ile compiler, decompiler yorumunun alakası olsa olsa "kel alaka" olur. Evet assembly tıpkı C gibi bir dildir. Assembly ile C arasında dil manasında bir fark yoktur, fark derleyicilerindedir.

Sadece MCU assembly bilgisine sınırlı olarak sahip olanların yorumları insanları yanlış yönlendirmekten başka bir işe yaramıyor. MCU lar için yazılan kodlar herhalde tüm yazılımların %1 ini bile bulmaz. Sadece bir windows işletim sisteminin kodları, milyonlarca MCU in yazılımı kadar uzundur.

Assemblerin ne olduğu;

ASSEMBLY komutunu; donanımın tanıdığı OPCODE karşılığı ile,

ASSEMBLY değişken isimlerini; benzersiz değerlere sahip sabitlerden oluşacak şekilde atayarak, programcının tanımladığı (tanımlamadıysa kendi belirlediği) donanımın fiziksel bellek (ram) içinde kalacak şekilde adreslerle,

ASSEMBLY programcının verdiği etiket isimlerini, benzersiz değerlere sahip sabitlerden oluşacak şekilde atayarak fiziksel bellek (rom) içinde kalacak şekilde adreslerle,

değiştirir.

Varsa konfigürasyon, ID, eeprom datalarınıda donanıma yazılacak dosyaya ekler.


Assemblerin yaptığı kısaca budur, assembler derleyicidir. Siz OPCODE un ne olduğunu biliyorsanız, değişkenlere ve etiketlere bellek adresi atamayı biliyorsanız, assembler derlemesine ihtiyaç duymayacak şekilde kod yazabilirsiniz.

Bilgisayarınızda çalışan herhangi bir exe dosya içinde hangi dil ile yazılmış olursa olsun kullanıcının ve hatta kodu yazan programcının bile farkında olmadığı ASSEMBLY kodları gömülüdür. Bu bilgiye sahip olmak için 20 sene önce programcılığa başlamak gerekir. O yıllarda derlediğiniz bir programı başka makinelerde çalıştırmak için ek işlemler uygulamak zorunda kalırdınız. Bu olay günümüzde yok. Çünkü derleyicilerin gömdüğü bu assembly kodlar ile dosya tipi işletim sistemi tarafından tanınmakta.

PC lerde sıkça karşılaştığınız DLL dosyaları kimliklerini bildirebilmek için sistemin registry alanında bir etikete sahiptir. Bu kayıt silindiği zaman ilgili dosya işletim sistemi için bir hiçtir. Fakat bir assembly dosyası işletim sistemine kaydedicide bilgi olmaksızın kendini tanıtabilir ve çalışabilir. PC nizi rahatsız eden viruslerin ufacık boyutuna rağmen registry alanı kullanmadan büyük işler başarmasının sırrı budur.

Siz makinenizde bir kod yazarken eklediğiniz her obje debug çalıştırması öncesi sanki program PC ye kuruluyormuşçasına registere kaydedilir ve kod bundan sonra çalışmaya başlar. Kırık olarak kullandığınız programların kürekleri içinde zaman zaman regsvr32.exe gibi dosyaların kullanıldığı görmüşsünüzdür. İşte bu yolla registry deki kayıtlar değiştirilmektedir.

NET platformunda derlediğiniz bir kodu başka bir makinede çalıştımaya kalktığınızda NET çalışma gurubunun xxx versiyonunu gerekli gibi bir mesajla karşılaşırsınız. Çünkü NET assembly leri COM objeleri gibi kimlik bilgilerini registry e kaydetmek yerine kendi üzerlerinde çalıştırırlar, bunun içinde minumum derlendikleri ortama sahip olmaları gereklidir.

Alıntı YapAssembly Avantajları :

- İşlemcinizin gücünü en iyi şekilde ortaya koyabilecek tek programlama dilidir.
- Cok az yer kapladığı için bilgisayar virüslerin yazımında kullanılırlar.
- Çok hızlı çalıştıkları için işletim sistemlerinde kernel ve donanım sürücülerinin programlanmasında, hız gerektiren kritik uygulamalarda kullanılmaktadır.
- Yapısı itibariyle üç boyutlu ekran kartlarında ilgili çizim ve efektlerin işlenmesi amacıyla hem oyunlar hem de programlar içinde ekran kartına hitap eden makina dili kodları kullanılmaktadır.
- Herhangi bir amaç doğrultusunda (genelde programların daha hızlı çalışması için optimize edilirken), herhangi bir programlama dili altında, o dilin kodları arasında kullanılabilir. Yani diğer dillerle beraber de kullanabilirsiniz. Sizin uzman olduğunuz dil belki Visual Basic dir. Ama işin içinden çıkamadınız, assembly bilen bir arkadaşınız sizin için birkaç kod ekledi ve tamam.
- İyi öğrenildiğinde diğer dillerde karşılaşılan büyük problemlerin assembly ile basit çözümleri olduğu görülür. Yani başka programlama dillerde çalışan insanların bu iş imkansız dediği yerde assembly devreye girer. Bu üstünlük daima var olacaktır…
- Yazdığınız programın kaynak kodlarını tüm dünya ile paylaşsanız dahi kodlar o kadar karmaşıktır ki insanlar assembly bilse dahi ne işe yaradığını çözmeleri çok uzun zamanlarını alır. (Açıklayıcı bilgiler koymadı iseniz) Assembly bilmeyen bir insanın kaynak kodu anlaması imkansızdır.
- Her program derlendiğinde makina diline dönüşür. Bunlar assembly kodlarına dönüştürülebilirler. (Buna disassembly olayı denir, bunu yapan programlar ise disassembler'lar dır.) Bu sayede assembly bilen bir insan zor da olsa diger programların çalışma şekillerini inceleyebilir ve üzerlerinde oynama yapabilir. Bu özellik de başka hiçbir dilde yoktur. Daha ileri gidip programların şifre isteyen bölümleri değişik yöntemlerle kırılabilir. Serial Generator türü programlar bu şekilde yapılabilmektedir.
- Zaman geçtikce ve insanlar üreten yerine tüketen bilgisayar kullanıcıları haline geldikçe bu dili bilmenin ayrıcalığı artmaktadır.

Dezavantajları :

- Dilin öğrenilmesi uzun zaman ve emek ister.
- Yazılan programlar diğer diller göre daha çok satırdan oluşur.
- Yazdığınız programın hangi satırlarının ne iş yaptığını bir süre sonra anlamayabilirsiniz. Çünkü anlaşılması zor ve karmaşık bir dildir. Bu nedenle kodların sonuna açıklama bölümleri eklemek iyi bir çözüm olacaktır.
- İşlemciye birebir bağımlıdır.


Sonuç olarak daha önce dediğim gibi kimin kafası hangisine basıyorsa, kim daha hatasız çalışacak kodu, daha hızlı çalışacak şekilde hangi dilde yazabiliyorsa onu kullansın. Forumdaki arkadaşların çoğunluğu hala ledlerle uğraşırken bu tartışmalar kime ne fayda sağlıyor ?

Yukarıda "Çin hızlı tren yaptı" diye arkadaşımız yazmış.

Beğenmediğimiz, mallarını kötülediğimiz adamlar 1.068 km yi 3 saatte gidiyor. Biz İstanbul-Ankara arasını 5 saate düşürdük diye havalara giriyoruz.

Bu treni biz yapalımda, sistemin kodları ister C ile ister Assembly ile ister basic ile yazılsın, NE FARKEDER ?

BİR DİL BİR İNSAN, İKİ DİL ?
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

controller

Alıntı yapılan: "hasangurlek"

assembler derleyicidir...

assembler derlemesine ihtiyaç duymayacak şekilde...


Normalde yukarıda yazdıklarınızın her satırına bir cevabım var ama bu yazdıklarınızdan sonra sizin hakkında söyleyebileceğim tek şey "ümitsiz vaka"

Bu yazdıklarınız ile "öss sınavı" aynı mantıktan geliyor.
Hesabım OG tarafından haksız bir şekilde pasif yapılmıştır.

Klein

Alıntı yapılan: "hasangurlek"
Bilgisayarınızda çalışan herhangi bir exe dosya içinde hangi dil ile yazılmış olursa olsun kullanıcının ve hatta kodu yazan programcının bile farkında olmadığı ASSEMBLY kodları gömülüdür. Bu bilgiye sahip olmak için 20 sene önce programcılığa başlamak gerekir.

Bu konuyu biraz daha açar mısınız?
Yani .exe  dosya içerisine ASSEMBLY  kodlar gömmek ne demektir?
yani hex kodların içerisine nasıl assembly kod gömülür biraz anlatır mısınız?
Hatta örnekli olursa çok sevinirim. Örneğin size bir .exe dosya göndersem  bunun HEX ve ASSEMBLY kısımlarını ayrıştırıp hangisinin nerelerde olduğunu gösterebilir misiniz?

z

Opcode Assembly demek değildir.

Opcode mnemonic kodun karsiligi olan hex koddur. Birbiri yerine telafuz edilirse hata yapilmis olur ama ne denmek istendigi anlasilir.

Derlenmis bir kod (Assemblerden gecmis) opcode ve adres yada veriden olusur. *(Bu biraz da islemcinin risc mi cisc mi olduguna bagli)

Ornegin MOV AX,1000H

burada mov opcode karsiligi olan mnemonic, 1000H de adresdir.

Klein,

Evet derlenmis bir programdan assembly kodlar ve hex kodlar ayristirilabilir.

Nasil merak ediyormusunun?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Alıntı yapılan: "bunalmis"

Klein,

Evet derlenmis bir programdan assembly kodlar ve hex kodlar ayristirilabilir.

Nasil merak ediyormusunun?

Evet ediyorum.

hasangurlek

Alıntı yapılan: "controller"
Alıntı yapılan: "hasangurlek"

assembler derleyicidir...

assembler derlemesine ihtiyaç duymayacak şekilde...


Normalde yukarıda yazdıklarınızın her satırına bir cevabım var ama bu yazdıklarınızdan sonra sizin hakkında söyleyebileceğim tek şey "ümitsiz vaka"

Bu yazdıklarınız ile "öss sınavı" aynı mantıktan geliyor.

Vatandaşın bir otobanda giderken radyonun trafik anonsu devreye girer "xxx otobanında xxx.km de ters yönde ilerleyen bir araç var, lütfen dikkat ediniz" Anonsu dinleyen vatandaşımız kendi kendine söylenir "Ne bir tanesi kardeşim, bunların hepsi ters yönde ilerliyor"

Alıntı yapılan: "controller""ümitsiz vaka"

ŞİMDİ SORMAK GEREKİR = SEVİYEYİ DÜŞÜRMEYE GEREK VARMI ?

Dikkat ederseniz yukarıda "assembler derleyicidir" deniyor, yorumlayıcı değil !

Diğerleri gibi kodları yorumlamaz, yazım hatalarını kontrol eder ve yukarıda yazıldığı gibi içeriği makinenin anlayacağı bir yapı haline getirir YANİ DERLER. Siz bu işlemlere ÇEVİRİ diyor olabilirsiniz ama ÇEVİRİ kelimesi assemblerin yaptığı değişkenlere ve etiketlere benzersiz değerler atamasını, kod uzunluğuna göre bir sonraki etiket adresinin hesaplanmasını vs. anlatmaya yetmez !

Belki bu işlemleri MPLAB benzeri editörlerin hallettiğini düşünüyor olabilirsiniz. O halde kodları not defterinde yazıp MASM ile derlemeyi deneyebilirsiniz.


Eğer ÇEVİRİ kelimesinin assemblerin yaptığı işi anlatmaya yettiğini düşünüyorsanız aşağıdaki 3 er etiket ve değişken için assemblerin bellekte nasıl yer ayarlaması sağladığını yani nasıl ÇEVİRDİĞİNİ örnekleyerek bize açıklabilirsiniz.

ETIKET1 =
xxxx büyüklükte kod
ETIKET2 =
xxxx büyüklükte kod
ETIKET3 =
xxxx büyüklükte kod

_DEGISKEN1 =
_DEGISKEN2 =
_DEGISKEN3 =
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

z

@Klein

Cevabi son derece basit. Fakat uygulamasi muhtesem derecede yorucu.
CPU romdan okumus oldugu kodu nasil ele aliyorsa biz de ayni sekilde ele aliriz.

Aptal disassembler programlari gordugu her hex kodu sirayla asm kodlara donusturur. Donusum boyle yapilirsa anlamsiz kodlarla karsilasilir.

Eger programa giris noktasindan itibaren hex kodlari adim adim cevirir, dallanma noktalarinda sen de dalllanir ret ile kaldigin yere geri doner, interrupt girislerine giderken izledigin tum yollarin asm kodlarini elde edersin.

Bu esnada kodlarin yaptigi islere de cok dikkat edersin.

Bu islemleri yapip bitirdiginde asm kodlar hex kodlardan buyuk olcude ayiklanmis olur.

Geriye jump table lar ve veri tablolari (constand)  kalir.

Jump table ve constand degerler elde edilen kodlarin yapmak istedigi islem anlasildiginda tam olarak ortaya cikar.

Tum bu islemlerde cpu kodu olmayan hex kodlar, asci degerler fazlasiyla yardimci olur.

Ancak kafaya takilasi bir exe olmadigi surece boylesine pis bir ise girilmez. Girisilecek se de oldukca yetenekli disassembler ile girilir.

Internetin olmadigi donemde bu tip pek cok tersine islem yaptim.

Zamanin meshur 8051 Basic cipinin hex kodlarindan compile edilebilir source kodunu elde ettim hatta floating point islemde yaptigi bir hatayi da source kodda duzelttim. Dos'daki   Debug programinin hex kodlarindan derlenip calistirilabilir asm source kodlarini elde ettim.

Gerektikce yeni kod ekleyip derleyip kullaniyordum.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Sanırım bu soruyu hangi  cümlelere istinaden sorduğuma dikkat etmediğiniz için böyle bir karışıklık oldu. Tersine işlem iyi bildiğim bir işlem.  Çok kullandığımı söyleyemem. Birkaç kez kaynak kodlarını kaybettiğim kendi programlarımın üzerinde değişiklik yapabilmek amacıyla kulandığım bir yöntem. Sorum bu değildi.

HasanGurlek arkadaşın yazısında bahsedilen şey bu değil hocam. Oradaki iddaa
Alıntı Yap
Bilgisayarınızda çalışan herhangi bir exe dosya içinde hangi dil ile yazılmış olursa olsun kullanıcının ve hatta kodu yazan programcının bile farkında olmadığı ASSEMBLY kodları gömülüdür. Bu bilgiye sahip olmak için 20 sene önce programcılığa başlamak gerekir.
Exe kodun içinde Assembly kodlar gömülü olduğu idaasıdır.  Soru bu idaanın temelini kurcalamak için sorulmuş bir soruydu.

Bir exe kodun içerisinde ASSEMBLY gömülü olması ne demektir.  EXE  kod  hex kod formatında değil midir?  Eğer kastedilen şey  kullanıcınn ve hatta yazarın bile farketmediği kod parçacıkları ise ,  exe içerisine neden HEX şeklinde değil de ASSEMBLY şeklinde gömülmektedir.

z

Alıntı yapılan: "Klein"Bir exe kodun içerisinde ASSEMBLY gömülü olması ne demektir.  EXE  kod  hex kod formatında değil midir?  Eğer kastedilen şey  kullanıcınn ve hatta yazarın bile farketmediği kod parçacıkları ise ,  exe içerisine neden HEX şeklinde değil de ASSEMBLY şeklinde gömülmektedir.

Asm konulari konusulurken, pek cok kavram yanlis kullaniliyor  fakat aslinda birbirimizi anliyoruz. (Bunlar assembler, assembly, opcode, mnemonic, hex kod vs. vs)

Burda cevap vermesi gereken aslinda hasangurlek ama,

Hasangurlek orda assembly kod gomuluyor derken adim gibi eminim exe ye ilave olan hex kodlardan bahsediyor. Sadece kavram karmasasi.

Exe amacli yazdiginiz kodlarin derlenmesi sonucu olusan hex kodlar haricinde isletim sistemine ozgu bir takim kodlarin (Header, hata sonlandirma vs) eklenmesini kasdetti.

Cunku bunlarin haricinde bizden habersiz baska bir kod eklenmiyor.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

Klein

Evet ben de bu cevabu hasangurlek'in vermesini bekliyorum zaten. Bazen o kadar ateşli ve uzun yazıyor ki ,  söylemek istediği şey ile söylediği şey tam uyuşuyor mu kontrol etmiyor. bu yüzden yazıyı parçalara bölüp   söylemek istediğini daha kısa anlatmasını  , işe biraz da polemik katarak  daha zevkli okunmasını sağlamaya çalışıyorum. Eğer buna cevap verirse , ikinci soruya geçmek istiyorum.

hasangurlek

Önceki yazıları yazarken forumdaki bilgi seviyesinin "Bir DLL veya EXE içinde çalıştırılabilir kodların dışında  MOV, RET vs. komutların direk bulunabileceği" düşüncesine kadar inebileceğini hiç düşünmemiştim.

Evet dosyaya gömülenlerin aslı assembly kodları ile oluşturulur. Aksi takdirde konsolda çalışacak ufacık bir kod yazarsınız, yazdığınız koddan büyük ilavelerle karşılaşırsınız. Key kullanımının, yazılım ortamının desteklediği kriptoloji servislerinin, programın kendinin dis edilip edilmediği kontrolünün vs. hemen hepsi arka planda assembly ile oluşturulur.

MASM geliştiricisi Microsofttur. Microsoft gibi bir firma halen assembly kullanmaya devam etmektedir, bunu iyi düşünmek gerekir. İleri seviye diller içinde C veya assembly ile yazılmış dll fonksiyonları kullanılabilirken assembly içinde işin temeli olan kütüphane dosyaları kullanılır. İleri seviye dilde kernel32.dll fonksiyonları ile sınırlanmış işlemler yapılabilirken, assembly ile kernel32.lib dosyası istendiği gibi değiştirilerek, ilave yapılarak kullanılabilir. Tıpkı bir PIC serisi için xxxx.inc dosyasının kullanıldığı gibi assemblyde windows.inc dosyası kullanılır. Data Segment registerinde tanımlanan bir değişkene API ile ulaşmak kolay gözüksede assembly bilen biri için hammallıktır. Keza kod segmenti adres işaretçisi olan IP kaydedicisine ulaşmak assembly ile çok ama çok kolaydır, tıpkı bir MCU in W kaydedicisine ulaşmak gibi. Nasılki forumda "C ile yeterli hıza ulaşamıyorsan daha hızlı işlemciye geç" diyen arkadaşlar var ise işte o noktada çoğunlukla PC de bu mümkün olmamaktadır. Tabi bunları söylerkende "sadece bir aptal assemblyci MessageBox gibi hazır bir fonksiyonu çağırıp kullanmaz" demeyi unutmamak gerekir. Nasıl C içinde asm kullanılabiliyorsa, assembly içindede hazır API fonksiyonlarını kullanmak mümkün ve kolaydır. Bunların dışında en basitinden "ASMStudio" gibi programlar yaygın olarak kullanılmaktadır.

Tekrar yazmak isterimki boşa vakit kaybetmeyin. C yide öğrenin, assemblyyide, hatta Basic de öğrenin. Neyi öğrenebiliyorsanız o kadar çok öğrenin.

VE BİRŞEYLER GELİŞTİRİN. BU GİDİŞLE EN BEĞENMEDİĞİMİZ AFRİKA ÜLKELERİN YERLİ İMKANLARI BİZDEN FAZLA OLACAK.

İLERİYE GİTMİYORUZ, TEKNOLOJİK GELİŞMELER KARŞISINDA YERİMİZDE BİLE DURMAMIZ İMKANSIZ, ŞİMDİLİK ÖĞRENDİKLERİMİZLE GERİYE GİTMEYELİM YETER
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!

hasangurlek

Alıntı yapılan: "fatihbeyy"hasangurdelek hocam ellerine ve ağzına sağlık
aklımdaki tüm soru işaretleri sayende çözüldü
teşekkür ederim bundan sonra bütün yazlılarını
takip etmeye çalışıcam çalışmalarınızda başarılar
dilerim

Üye adı : fatihbeyy

Kayıt Tarihi : 15 Mart 2008

Gönderdiği mesaj sayısı : 1

Gönderdiği mesajın tarihi : 30 Aralık 2009

Benim bu mesajdan önceki son mesajım : 30 Haziran 2009



Evet arkadaşım 4 ay önceki mesajlarımla dünküler arasındaki çelişkiyi farkedemedinmi ?

SEVİYEYİ DÜŞÜREREK YORUM YAPMAK YOKMU ?

Şimdiye kadar çoktan zıplarsın diye düşünmüştüm ama belkide memur falansındırda resmi tatilden dolayı kurumlar bugün yarım gün çalıştığı için foruma girmeye vakit bulamamışsındır !
http://www.cyber-warrior.org, Although they like whiteness, sometimes twilight is required...  Hala evlilermi bilinmez ama kesinlikle artık uygun değiller !!!