Assembly Nedir - Avantajları ve Dezavantajları

TheVikinGs
Banned
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.​
 
- Yönetici düzenlemesi: :
TheVikinGs
Banned
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.​
 
efkarlie
Forum Kalfası
güzel açıklama olmuş kodları ve nasıl kullanıldığı hakkında bilgiler olucak mı?
 
stable
Daimi Üye
hımm güzel anlatan bir arkadaşımız olursa bende tekrar başlayıp

öğrenmek isterim.

paylaşım için saol :)
 
Kayıtlı Değil
Misafir Üye
kaynak

TheVikinGs 'nin yazdıgı bilgi için kaynak belirtebilrimisiniz.
 
Üst