Assembly Nedir?
Assembly aslında öğrenilmesi zor bir dildir. Uzun zaman ve büyük
emek ister. Fakat iyi bir şekilde anlatıldığında hiçte zor değil. Ama baştan şunu belirteyim: Diğer
programlama dillerinde yaptıklarınızı assembly altında daha çok satır kod
yazarak ve daha uzun bir zamanda elde edebilirsiniz. Buna karşın diğer dillere
göre birçok üstünlüğü bulunmaktadır. Lütfen bu sayfayı sonuna kadar
okumaya devam edin.
Bir programlama dili öğrenecek insan öncelikle kolay bir dili
öğrenmeli (Bu genelde Basic'dir.) Bu dil vasıtası ile programlama ve algoritma
geliştirme (problemlere karşın geliştirilen hatasız ve tatmin edici çözümler diyebiliriz)
hakkında bilgi ve deneyim sahibi olmalı. Son olarak ise diğer dilleri
tanımalı ve seçtiği dili öğrenmeli, uygulamalar geliştirmelidir.
0C85:0100
B402 MOV AH,02
0C85:0102 B203
MOV DL,03
0C85:0104 CD21
INT 21
0C85:0106 CD20
INT 20
Yukarıda ayrıntılı çıktısı alınmış bir kod parçası bulunuyor.
(Daha sonra ne işe yaradığını anlatacağım) Gri renkteki bölümler bellek
lokasyonlarıdır. Yani ilgili kodların şu anda hangi bellek adresinde bulunduğunu
gösteriyor bize. Kırmızı renkteki yazılar assembly kodlarıdır. Koyu yeşil
kısımlar ise bu assembly kodlarının makina diline çevrilmiş halidir. Bizi
ilgilendiren kırmızı bölümler olacak. Biliyorum o yazılardan hiçbir şey
anlamadınız, bu çok normal...
Tam olarak anlamanız için uzun bir örnek olacak ama
başlıyoruz...
Şu anda bilgisayarınızın başında oturuyor, windows işletim
sisteminiz altında bazı programları kullanıyorsunuz. Muhtemelen Internet
Explorer bunlardan biri. Kullandığınız her program (*.exe *.dll *.ocx ...) hangi
programlama dili ile yazılırsa yazılsın hepside derlenmiş ve ilgili dosyalar
haline dönüştürülmüştürler. Bir program Delphi ile yazılmış ve derlenmiş (exe
uzantılı dosya haline getirilmiş) ise tersi işlem yapılması, yani
programın kodlarına geri döndürülmesi imkansızdır. Derlenmiş program artık
işletim sistemimizin ve makinamızın işlemcisinin anlayabileceği bir haldedir.
Yani bizim makina dili dediğimiz haldedir. Tamamen iç yapısı elektronik devre
elemanlardan oluşan işlemcimiz bu makina dili halindeki kodları çalıştırabilir.
Başka hiçbir şeyden anlamaz. Bilgisayarlara bu nedenle de aptal makina denmektedir.
Çünkü biz ne emredersek onu işlerler. Makina dili 16 lık sayı sistemindeki
değerlerden oluşur. Bu kodlar sadece sayı kümelerinden oluştukları için bir
insanın bunları anlaması hele hele bu sayılar üzerinden programlarını yazması
nerdeyse imkansızdır...
Fakat insanların karmaşık sayılar yerine kendi konuşma
dillerindeki kelimelerden oluşan bir komut kütüphanesi ile çalışmaları daha
kolaydır. Bunu Basic dilinde rahatlıkla görebilirsiniz. Çünkü Basic dilindeki
komutlar ingilizce bilen bir insan için öğrenme ve akılda kalma açısından çok
kolay bir dildir. Makina dilindeki sayılar yani kodlar yani programımız bizim
için önemlidir. Çünkü bunlar işlemcimiz üretilirken geliştirilmiş bir komut
setine hitap ederler. Bir sonraki işlemci teknolojisine geçildiğinde komut seti
genişletilir ve yeni komutlar eklenir. Assembly dili bu komut setindeki makina
dili kodlarının insanların biraz daha kolay anlayabileceği harfler üzerinden
gösterimidir. Bu tamamen semboliktir ve her assembly komutu yazıldığında birebir
makina diline çevrilirler.
Peki Assembly bize ne sağladı? :
-Bize işlemcimiz üzerindeki her komuta aracısız erişim sağladı.
Yani kod yazarken muhatabınız işlemci ve üzerinde çalışmakta olduğunuz işletim
sistemidir. (Bu genelde Windows'tur ama başka bir sistemde olabilir.) Bu size
oluşturacağınız programın kodlanması esnasında çok yüksek bir kod hakimiyeti
sağlar. Böylece diğer dillerde aynı işi yapsanız dahi sizin assembly ile işlemci
üzerindeki hakimiyetiniz en üst düzeydedir ve bunu sizin kadar temiz
yapabilecek bir programlama dili ve/veya derleyici yoktur.
-Yazdığınız her satır kod 1 ila 4 byte civarında olup çok az yer
kaplar. Diğer dillerde yazılan kodlar aynı işi yapsa dahi sizinle aranızda
derleyici bulunmaktadır ve programın işleyişini sağlama almak amacıyla komutlar
arasında ek bilgiler girilmekte ve programınızın boyutu büyümektedir. Ayrıca
diğer dillerdeki komutlar işlemci üzerindeki komutlarla uyuşmaz ise derleyici
bunu dolambaçlı yollardan işlemciye anlatır ve yazılan bir tek komut makina
dilinde yüzlerce komuta karşılık gelebilir. Herhangi bir dildeki basit komut
assembly ile yazılsa 2 ila 6 kat daha az yer kaplar.
-Yazdığınız programlar (eğer bir algoritma hatası yok ise) diğer
dillerdeki şekillerine göre her zaman daha az yer kaplar. Programın az yer
kaplaması çalışırken daha az bellek tüketmesi; işlemler daha az kod ile
anlatıldığından daha kısa sürede işlemin bitmesi, yani programımız daha hızlı
çalışması anlamına gelir.
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.
Yani sonraki sayfalarda anlatılacak olan kodlar Intel ve uyumlu (AMD, Cyrix, Via)
işlemcilerde geçerlidir. Örneğin Motorola işlemcileri kullanan Macintosh
bilgisayarlarda hem komut setinin hem de işlemci mimarisindeki büyük
farklılıklardan
dolayı geçersizdir. Fakat onlarda da bir makina dili tabii ki bir assembly dili
bulunmaktadır. Fakat komutlar daha farklıdır. Bizim ilgi alanımız intel 386
(i386) üstü ve bunlarla uyumlu işlemcilerdir.
(Her programlama dilinde olduğu gibi internette Türkçe kaynaktan
çok daha fazla ingilizce kaynak bulunmaktadır..)
|