X86 Assembly Programlama Girişi


Assembly Dili ve Programlama    Assembly Dili ve Programlama İle İlgili Paylaşım Kategorisi

Yazar: GhostSpace    1 Yorum    361 Görüntüleme
  • 0 Oy - 0 Yüzde

Paylaşım Tarihi: 24.04.2016, 12:35:18 #1
GhostSpace Yeğen
Onaylı Uye
Status: Çevrimdışı Yorum Sayısı:27 Konu Sayısı:14 Üyelik Tarihi:24.04.2016 Rep Puanı: -14

Bu yazıda X86 işlemcilerine giris yapıp Assembly                  p4k.jpg

programlama ile ilgili giriş bilgisi vermeye çalışacağım.

X86 NEDİR ? 
X86 Intel’in ilk mikroişlemcilerinden olan 8086 ile ilgili 

programlama kurallarını ifade eden bir tanımlamadır. 

Intel’in önemli özelliklerinden biri olan "geriye dönük 

yazılım uyumluluğu" böyle bir tanımlamanın oluşmasını 

sağlamış.

Şöyle ki; 8086 mikroişlemcisi olan bir bilgisayar 

sisteminde hazırladığınız herhangi bir assembly programı 

X86 uyumlu tüm bilgisayarlarda çalışır. 80286, 386, 486 

SX veya DX, Pentium, Pentium III, AMD nin 286, 386 

işlemcilerinde veya Nexgen, Cyrix’in aynı tür 

işlemcilerinde ve diğerlerinde bu program çalışacaktır. Bu 

demek oluyor ki yukarıda saydığımız tüm mikroişlemciler 

ve uyumlu olan diğerlerinin ortak bir yönü var. Bu ortak 

yönler ortak program kodların olması ve 

mikroişlemcilerinin temel mimarileri birbirinin aynı 

olmasıdır.


Yeni bir mikroişlemci üretildiğinde, eski mikroişlemcilere 

uyumlu olması büyük bir avantajdır. Öyle olmasaydı bugün 

dünyada %90 oranında PC, X86 uyumlu işlemci kullanıyor 

olmazdı. Bu yüzden mikroişlemci pazarının bu büyük 

dilimini birkaç firma paylaşıyor, aslan payını Intel, daha 

sonra AMD geliyor, Cyrix ve Nexgen gibi diğer 

mikroişlemci üreten firmaların isimlerini pek duymuyoruz. 

X86 tabanlı sistemlerin mimarisi birbirine benzer. Birde 

X86 tabanlı olmayan sistemler vardır. Apple firmasının 

iMAC bilgisayarları, yada SUN Microsystems firmasının 

sistemleri X86 tabanlı mikroişlemciler kullanmadıkları için 

bu tür bilgisayarda çalışan programlar X86 tabanlı 

sistemlerde çalışmazlar. 

Şunu unutmayalım; dünyada yaklaşık %90 oranında X86 

uyumlu PC sistemi kullanılıyor. Bu yüzden bu X86 

assembly dili diğer assembly dillerinden daha geçerli bir 

programlama dilidir.

ASSEMBLY PROGRAMA DİLİ VE DİĞERLERİ ? 

Assembly programlama dilini 3 kelime ile tanımlayacak 

olursak bunlar; GÜÇLÜ, HIZLI ve KISA olurdu. Bu demek 

oluyor ki aynı programı assembly dili ile ve C++ 

programlama dili ile yaparsak, iki programın boyutlarına 

baktığımızda assembly ile yazılan daha kısa olduğunu 

görürüz, aynı zamanda mikroişlemciyi ve hafızayı daha 

verimli kullandığı için assembly dilinde yazılan program 

diğerlerine nazaran daha güçlü olacaktır, son olarak 

assembly dilinde yazılan program diğerine oranla çok daha 

hızlı çalışır. 

Son zamanlarda mikroişlemcilerin hızları GHz’ler (giga 

hertz - ciga herz diye okunur) mertebesine çıktığından 

assembly dilinin en büyük özelliği olan hızlılığı artık pek 

popüler değildir. Kullanıcıya, 2GHz hızındaki bir CPU da 

hemen hemen her uygulama aynı hızda çalışıyor gibi 

görünür. Buna rağmen C gibi yüksek düzey programlama 

dilleri ile hazırlanan büyük projelerde işlemciyi çok fazla 

meşgul edecek olan kod bölümleri assembly rutinleri 

çağrılarak yapılmaktadır.

NEDEN ASSEMBLY?

İmage

X86 Assembly dilini öğrenmek kolaydır ama bu dilde 

proje hazırlamak insanı çileden çıkartabilir. Bu yüzden 

günümüzde X86 assembly dili yerine, daha çok 

endüstriyel alanda kullanılan microcontroller chip’lerin 

assembly dili kullanılmaktadır. Bir programcı assembly 

dilinde büyük uygulamalar hazırlamaz (genellikle). Bunun 

nedeni üst düzey programlama dilleri olan delphi, C, C++, 

Pascal’a göre daha dikkat gerektirir ve kod yazımı daha 

zordur. Programcı assembly dilinde proje hazırlayacaksa 

kullandığı sistemin mikroişlemcisini ve hafıza haritasının 

yanında, sistemin donanımında iyi bilmesi gerekir. Her 

şeyden önemlisi zamandır ki sadece assembly dili ile PC 

uygulamaları geliştirmek iğne ile kuyu açmaya benzer. 

Assembly alt düzey bir programlama dilidir yalnız alt 

düzey kelimesini yanlış anlamayın, bu kelime bu dilin 

işlemciye ve hafızaya olan yakınlığını belirtir, üst düzey 

diller ise daha çok programcıya yani insana yakındır.

Bu yüzden assembly dilinin özel kullanım alanları vardır. 

Kısaca bunları söyle sıralayabiliriz. 

1- Bilgisayar sistemini yakından tanımak için, 
2- Device driver (cihaz sürücüleri) yazmak için, 
3- Chip’lere program yüklemek için (PIC, microcontroller 

gibi...) 
4- İşletim sistemlerinin yapımında (OS), 
5- Şifre kırma ve Hacking işlemleri için, 
6- Virüs programları yazmak için, 
7- Elektronik tablo’lama (Excel gibi) programlarında.


İLK X86 ASSEMBLY KODLARIMIZ PC platformunda 

doğrudan hafızaya sembolik kod kullanmadan yazacağımız 

bu programcık için herhangi bir editör ve derleyici 

download etmenize gerek yok. DOS veya Windows işletim 

sistemine sahip bir PC kullanmanız kafidir. Sırasıyla 

şunları yapın;

1- Başlat menüsünden çalıştır’ı tıklayıp cmd programını 

çalıştırın. Şayet Windows 98 kullanıyorsanız başlat 

menüsünden MSDOS komut istemini çalıştırmanız 

gerekiyor. Hala DOS işletim sistemini kullanıyorsanız 

bilgisayarınızın power butonuna basmanız yeterlidir Smile yani 

halihazırda komut isteminde olan bir trex siniz.



2- Komut istemindeyken cd\ yazın ve root dizinine geçin 

burada kendinize md asm yazarak asm adında bir klasör 

oluşturun ve cd asm komutu ile klasörün içine girin. Tabi 

ki klasör oluşturmak için bu kadar eziyet çekmenize 

gerek yok, amacımız biraz nostalji. Maksat projemiz bir 

klasörde oluşsun.



3- Debug yazıp enter tuşuna basın. Resimdeki görüldüğü 

gibi debug programı çalıştırıldığında ekranın solunda bir - 

simgesi görülür ve bu programla harikalar yapabilirsiniz Smile



4- E 0100 yazıp enter tuşuna basınız.





6- Klavyeden Enter tuşuna basın ve ekran görüntüsü 3. 

adımdaki gibi olunca g tuşuna basıp ardından son olarak 

enter tuşuna tekrar basın.



Yukarıdaki ekran çıktısında görüldüğü gibi konsol ekranına 

MERHABA ASSEMBLY yazdırdık ve debug programından 

çıkıp komut istemine geri döndük. Hala hevesiniz 

kırılmadıysa Smile neler yaptığımızı tek-tek açıklayalım.
 

Debug programı Microsoft’un tüm işletim sistemlerinde 

bulunan, hafıza ve CPU’nun içindekileri görmemizi, 

düzenlememizi sağlayan bir programdır. Çok ilkel bir 

program olmasına rağmen beynimizin derinliklerine PC’nin 

yapısını kazıyacak olan ve bir assembly programcısının 

bilgisayara ne şekilde bakması gerektiği konusunda 

yardımcı olacak yegane programlardandır. En fazla 2 

makale sonra Debug programını kullanmayı bırakıp daha 

jan-jan lı debuger programları kullanacağız, şimdilik böyle 

idare edelim.

Biraz önce Debug programının kendisi içinde 

kullanacağımız e (enter) ve g (go)  komutlarını kullandık. e 

komutu hafızaya kod girişi yapmamızı sağlar ve g komutu 

ise CPU’ya şu sihirli kelimeyi söylememizi sağlar; "Ey CPU 

yazdığım bu kodları sırasıyla çalıştır bakayım". CPU 

programcının sadık kölesi olduğundan aynen denileni 

yapar.

E komutu ile hafızaya giriş yaptığımızı söyledik, komut 

isteminin en solunda 152F:0100 gibi bazı rakamlar 

gördünüz, buradaki 152F sizin bilgisayarınızda farklı 

olabilir, ama 0100 aynıdır. işte : simgesi ile ikiye ayrılmış 

bu 8 rakam hafızanın adresidir. Kodlar hafızaya yazılır, 

silinir, değiştirilir fakat bu süreçte değişmeyen tek şey 

hafıza adresidir. Adresler her zaman bizim onları 

doldurmamız veya erişmemiz için hali hazırda beklerler, 

bunu evinizin adresine benzetebilirsiniz. Eve anne gelir 

baba gelir arkadaş gelir bazen tatilde boş kalır yani evin 

içindekiler değişkendir ama ama ev adresi her zaman 

sabit kalır, ta ki ev yıkılana kadar Smile

E komutu ile bu örnekte hafızanın 152F:0100 adresi ile 

152F:011B adresleri arasını makine kodları ile doldurduk. 

Bunu yaparken kod yazacağımız adreste hali hazırda 

hangi kod’un olduğunu görme gibi bir lükse de sahiptik, 

tesadüfen hepsi 00’dı. Makine kodları CPU’nun anlayacağı 

yegane kodlardır ve 2’lik (binary) yada 16’lık 

(hexadecimal) gösterimle ifade edilirler. Zamanla binary 

gösterim biraz fazla yer kapladığından hexadecimal 

gösterim benimsenmiştir. Daha sonra hexadecimal 

gösterimin anlaşılması zor olduğundan sembolik kodlar ile 

yazılan Assembly programlama dili geliştirilmiştir. İnsan 

oğlu rahatına pek düşkün olduğundan Smile daha sonra, kod 

yazması ve anlaşılması daha kolay olan B Programlama 

dilini geliştirmiş bu da yetmemiş C dilini geliştirmiştir. (Bu 

sıralamada Assembly programlama dilide A oluyor tabi ki) 

Programlama dilleri ABC diye devam derken C harfini çok 

seven programcılar buna ++ ve # gibi aksesuarlar takarak 

değişik varyasyonlar denemişler ve çokta başarılı 

olmuşlardır Smile Neyse lafı fazla uzatmadan ve "ey 

programcı geçmişini bilmeyen geleceğinden bir 

haberdardır" diyerek konumuz geri dönelim.

X86 PC’lerin hafızası byte adreslenebilir diye bir 

programcı ata sözü vardır. Bu söz her adrese en fazla 1 

byte’lık kod yazabileceğinizi anlatır. Bizde burada öyle 

yaptık zaten, toplam 28 hafıza konumuna (memory 

location) kod yazdık ve göreceksiniz biraz sonra programı 

derleyip dosya haline getirince dosya boyutu 28 byte 

olacak.
Paylaşım Tarihi: 27.06.2016, 14:35:17 #2
shmebulock Yeğen
Kayıtlı Üye
Status: Çevrimdışı Yorum Sayısı:14 Konu Sayısı:1 Üyelik Tarihi:20.06.2016 Rep Puanı: 1

ben bundan nasıl all kick yapacam breh







Aradığınızı Bulamadınız Mı ?

Konuyu görüntüleyenler:
1 Misafir