X86 Assembly/Giriş

Vikikitap, özgür kütüphane

Assembly dili en alt seviye programlama dilidir. Assembly dili ile bellek gözeneklerine ve işlemci yazmaçlarına direkt müdahale ederiz. Daha üst seviye programlama dillerinde kaynak kodu makina koduna dönüştürmek için son derece karmaşık işlemler yapılır. Halbuki Assembly dili, makina kodlarının akılda tutulması zor olduğu için türetilmiş, İngilizce sözcüklerin kısaltmasından ibaret olan bir dildir. Her makina kodunun Assembly dilinde bir karşılığı vardır. Yani bir Assemnly kodunu makina koduna dönüştürürken (günümüz tabiriyle derlerken) tek yapılan Assembly kodlarını karşılığı oldukları makina kodlarına dönüştürmektir. Yani ortada çok karmaşık bir şey yoktur.

X86 ne demek?[değiştir]

X86 Intel'in 8086 işlemcisini merkez alan bir işlemci mimarisidir. Günümüzde kullanılan bütün Intel ve AMD işlemciler bu mimaridedir. Yani rahatlıkla işlemci pazarının %90'ının bu mimariden olduğunu söyleyebiliriz. X86 mimarisindeki işlemciler genelde aynı komut setlerini kullanır. Değişen tek şey hız, önbellek gibi performansa dayalı verilerdir. Sonuca gelecek olursak X86 Assembly demek, X86 mimarisine sahip işlemcilerle uyumlu olan Assembly dili demektir. Diğer Assembly dillerinden daha popüler bir dildir.

Hangi işletim sistemi?[değiştir]

Aslına bakarsanız Assembly dili işletim sistemi bağımsız bir dildir. Ancak Microsoft firması, kendi işletim sistemlerinin çekirdeğine bazı önemli işleri yapmak için (ekrana yazı yazmak, kullanıcıdan veri girişi için beklemek, vb.) yazılmış hazır fonksiyonlar koymuş. Bu hazır fonksiyonlardan faydalanabilmek için bu kitap boyunca kodlarımızı Windows ya da DOS işletim sistemlerinde yazacağız.

Neden Assembly?[değiştir]

Kuşkusuz son derece gelişmiş ve işlerimizi son derece kolaylaştıran birçok programlama dili varken Assembly gibi çok alt seviye bir programlama diliyle program geliştirmek son derece mantıksız gibi görünüyor. Ancak Assembly dili ile diğer programlama dilleriyle yapamayacağımız birçok şeyi yapabiliriz. Örneğin:

  • Bilgisayar sistemlerini yakından tanımak için,
  • Aygıt sürücüleri yazmak için,
  • İşletim sistemleri yazmak için,
  • Program ya da işletim sistemlerindeki güvenlik açıklarını görmek için,
  • Şifre kırma ve hacking işlemleri için,
  • Virüs ve antivirüs programları yazmak için.

Bunların yanına bütün programların kaynak kodlarını Assembly olarak görebileceğimizi de eklememiz gerek. Yani bir Assembly programcısı için bütün programlar açık kaynak kodludur.

Assembler ne demek?[değiştir]

Birçok yerde yanlış bir şekilde Assembly sözcüğü yerine Assembler sözcüğü kullanılmakta. Assembler, Assembly kaynak kodlarımızı makina kodlarına dönüştüren programlardır. Yani modern tabirle Assembly derleyicisidir. Windows'ta veya DOS'taki debug programı da bir assemblerdır. Biz kitapta öncelikle Assembly kodlarımızı makina koduna dönüştürmek için bu programı kullanacak, daha sonra daha gelişmiş assembler programlarına geçeceğiz. debug programı Windows işletim sistemlerinde C:\WINDOWS\System32 klasörü altındadır. Büyük ihtimalle sisteminiz bu klasöre otomatik path yaratmıştır. Yani komut isteminde hangi klasörde olursanız olun bu klasördeki dosya ve klasörlere direkt erişebilirsiniz. Eğer sistemizin bu klasöre otomatik path yaratmamışsa şu yolla bunu kendiniz yapabilirsiniz:

  • Bilgisayarım'a sağ tıklayın.
  • Özellikler'i seçin.
  • Açılan pencerede "Gelişmiş" sekmesini görüntüleyin.
  • "Ortam Değişkenleri" butonuna tıklayın.
  • "Sistem değişkenleri" kısmından "Path"a çift tıklayın.
  • Açılan "Sistem Değişkenini Düzenle" penceresindeki "Değişken Değeri" metin kutusundaki yazının sonuna ;C:\WINDOWS\system32 yazısını ekleyin.
  • Bütün pencerelerden "Tamam" diyerek çıkın.