X86 Nedir ?

Eski 01-14-2009   #1
[KAPLAN]
Icon47

X86 Nedir ?



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?

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 :) 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 :)

4- E 0100 yazıp enter tuşuna basınız
5- b4 yazıp boşluk tuşuna (space bar) basın, 09 yazıp boşluk tuşuna basın, ba 0b 01 cd 21 b4 4c cd 21 4d 45 52 48 41 42 41 20 41 53 53 45 4d 42 4c 59 24 değerleri içinde aynı işlemi tekrar edin :) Şayet arada bir yerlerde hata yaparsanız klavyeden enter tuşuna basıp 4 adımdan itibaren yeniden başlayın İşlem bitince ekran görüntüsü aşağıdaki gibi olacaktır
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 :) 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 :) 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 :) 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 :) 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 Debug’ın g komutu ise meşhur fetch-decode-execute sürecini yani hafızadan al getir - kodunu çöz - icra et sürecini başlatır İşte biz buna halk dilinde program çalışıyor diyoruz Programı mikroişlemci (CPU) çalıştırır ve programcı tarafından kısmen kullanılabilir Bu süreç programcıları fazla ilgilendirmez, daha çok donanımla alakalıdır, bu yüzden ayrıntıya girmiyorum Ama çok istek gelirse bu şarkıyıda sizler için söyleyebilirim :)
BU KODLARI ÇOK SEVDİYSENİZ GELİN BUNLARI SAKLAMAK İÇİN BİR PROGRAM DOSYASI OLUŞTURALIM
Bu işlemi yapmak için öncelikle programda ne kadar kod kullandığımızı bilmemiz yani programın byte cinsinden uzunluğunu bilmemiz gerekir Kodları kendi elimizle teker teker girdiğimizden uzunluğunun 28 byte olduğunu biliyoruz Emin olmak için 5 adımdaki şekilden faydalanınız Dosya oluşturma işlemi için ilk önce CPU’nun CX kaydedicisine (CX ne yahu, kaydedicide ne demek kardeşim dediğinizi duyar gibiyim merak etmeyin bu terimler ileride hiç ağzınızdan düşmeyecek) 28’in hex karşılığı olan 1C’yi yazacağız Daha sonra debug’ın N komutu ile dosyaya isim vereceğiz ve son olarak W komutu ile harddiskimize kayıt yapacağız Son olarak debug’tan çıkıp komut istemine geri döneceğiz ve oluşturduğumuz programı çalıştıracağız Lütfen aşağıdaki şekli inceleyiniz (Yalnız komut istemi penceresini kapattıysanız işiniz yaş 1adıma geri dönmeniz gerekiyor çünkü kodlar hafızadan silinmiş olabilir)

Meşhur DOS komutlarından olan "dir" ile tekrar bir nostalji yapıp dosyamızı görelim :)

Görüldüğü üzere 28 byte’lık merhabacom adlı dosyamız oluşturuldu ve çalıştırılmaya hazır, o zaman hemen çalıştıralım

Programımız konsol ekranına MERHABA ASSEMBLY yazdı ve işletim sistemi tarafından sonlandırıldı Programımızı bir dosya haline getirdik, Microsoft’un işletim sistemlerinde 2 tür program dosyası mevcuttur ve bunlar dosya ismini takip eden EXE ve COM uzantıları (file extensions) ile tanınırlar Bir burada COM olanından oluşturduk, endişelenmeye gerek yok EXE uzantılı dosya’da oluşturacağız ve COM ile EXE arasında ne gibi farklar var onları da göreceğiz fakat bunlar bizim için henüz çok ileri konular, sabretmek lazım :) Bu programı bir sonraki makalemize kadar silmeyin, çünkü bir sonraki makalemizde bu dosyadan faydalanıp sembolik kodlardan oluşan assembly diline geçiş yapacağız ve eksik kalan noktaları tamamlayacağız Siz bu arada boş durmayıp bu kodlar üzerinde oynamalar yapabilirsiniz özellikle 12 koddan itibaren son koda kadar olanları değiştirin (son kod hariç) çünkü bunlar MERHABA ASSEMBLY yazısının ASCII kod karşılığıdır Bunun için ASCII kod tablosundan faydalanabilirsiniz Başka bir programlama dili biliyorsanız aynı yazıyı yazan programı o programa dili ile yazıp dosya boyutunu buradaki ile karşılaştırınız Ayrıca Debug programının diğer komutlarını görmek için - işaretinin görüldüğü modda ? yazıp enter tuşuna basınız
Assembly Eğitim CD Seti
Assembly For Windows Görsel Eğitim CD Seti

Assembly For Windows TÜRKÇE SESLİ-GÖRÜNTÜLÜ VE UYGULAMALI ÖĞRENİM SETİNİN DETAYLARI


Bu set çizilmeye ve çalışmamaya karşı 2 yıl Garantilidir Herhangi bir olumsuz durumda seti iade edip yenisini almanız mümkündür

Anlatım süresi 26 saat olup 1 Cdden oluşmaktadırAssembly For Windows tüm konularını kapsar Dershane eğitimlerinden daha ayrıntılı olarak anlatılmıştır

Assembly For Windows da Anlatılan Konular:

Bugüne kadar hazırlanan Web sitelerinde en çok kullanılan dil, ASP Dili nedir?

ASP Dilinin Temelleri, Kontrol Yapıları, Fonksiyonlar,Döngüler, Karar Yapıları, Veritabanları ile bağlantılar, Nesne kullanımı, Sözlük nedir, Çerezler ve Oturum işlemleri, XML Nedir, RSS Nedir, E-posta göndermek ve

Tüm bunları bu setle öğreneceksiniz

Assembly İndeksi



01 – Assembly Editörü

02 – File Menüsü

03 – Edit Menüsü

04 – View Menusu

05 – Project ve Build Menusu

06 – Tools Menusu

07 – Window ve Help Menuleri

08 – Kisaca Windows

09 – Kysaca Windows un Tarihi ve Uygulamalaryn Yapysy

10 – Registry, Library, OLE ve COM Yapylary

11 – 32 Bit Makine Mimarisi ve Assembly Uygulamalarinin Yapisi

12 – Degiskenler

13 – Genel Kaydediciler ve Sayi Sistemleri

14 – Sayi Sistemlerinde Ceviri Teknigi

15 – Kaydedicilerin Kullanimi ve Diger Kaydediciler

16 – Bit-Byte Kavramlari

17 – Bir Assembly Uygulamasinda Kullanilan Bolumler ve Assembly Ile Uygulama

18 – Gelistirmek

19 – Windows Tabanli Bir Assembly Uygulamasinin Genel Yapisi

20 – Kisaca Program Tanitimi, Include, Data ve Const Alanlari

21 – Programda Code Bolumu

22 – Kisaca API hakkinda ve WINDOWS_INC dosyadi

23 – Ilk Dialog Projesine Baslangic

24 – Dialog Penceresinin Yaratilmasi ve Hayat Proseduru

25 – ShowSystemFailure Procedure Tanitimi

26 – Sistemden Bellek Talep Eden NewMem Fonksyonu 1

27 – Sistemden Bellek Talep Eden NewMem Fonksyonu 2

28 – Ayrilan Bellegin Sisteme Geri Iadesi FreeMem Fonksyonu

28 – IntToStr Fonksyonu ve Kullanimi

30 – Temel Fonksyonlarin Kullanimi Ile Dialog Projesinin Tamamlanmasi

31 – Bazi Makine Dili Komutlari

32 – Giris

33 – ADD

34 – AND

35 – CALL

35 – CBW, CWD, CWDE, CDQ

37 – CLC

38 – CMP

39 – CMPSBWD

40 – DEC

41 – DIV

42 – INC

43 – JUMP Komutlary

44 – Offset ve LEA Komutlari

45 – Load ve Store String Komutlari

46 – Loop Komutu

47 – Mov Komutu

48 – Or ve Not Komutlari

49 – Push ve Pop Komutlari

50 – Rep Komutu

51 – Ret Komutu

52 – ROL ve ROR Komutlari

53 – SHL ve SHR Komutlari

54 – Test Komutu

55 – XCHG Komutu

56 – XOR Komutu

57 – Scas Komutlari

58 – Yapilar

59 – STRUCT Yapilari

60 – Donguler

61 – While Dongusu

62 – Repeat-Until Dongusu

63 – Break ve Continue Komutlari

64 – Windows Bilesenleri Hakkinda

65 – Resource dosyasi nedir Ne ise yarar

66 – Temel Bir Windows Uygulamasinin Cekirdegi

67 – Uygulamanin Sisteme Kaydettirilmesi ve WndProc Fonksyonunun Tanitilmasi

68 – Menunun Olusturulmasi

69 – Uygulamanin Calistirilmaya Ilk Hazirlanisi ve Menulerin Kullanilmasi

70 – Editor Programina Giris ve Open File Dialogu Kullanimi

71 – Save File Dialogu Kullanimi

72 – Rich Edit Nesnesi ve Kullanimi

73 – Bir Dosyanin Okunarak Editore Yuklenmesi 1

74 – Bir Dosyanin Okunarak Editore Yuklenmesi 2

75 – Cut, Copy, Paste, Undo ve Delete Menulerinin Calistirilmasi

76 – Kisayol Tuslarinin Calistirilmasi

77 – Toolbar Nesnesinin Olusturulusu ve Kullanimi

78 – Toolbar Buttonlarinin Calisir Hale Getirilmesi

79 – Statusbar Nesnesinin Yaratilmasi, Resize Edilisi ve Bolumlere Ayrilmasi

80 – CapsLock ve NumLock Tuslarinin Statusbarda Gosterilmesi 1

81 – CapsLock ve NumLock Tuslarinin Statusbarda Gosterilmesi 2

82 – About Dialogunun Hazirlanisi

83 – View Menusunu Olusturmak, Registery Kullanimina Hazirlik

84 – Menu SonDurumlarinin Registerye Kaydedilmesi ve Okunmasi

85 – Statusbar ve Toolbar Nesnelerinin Ilgili Menuler Ile Gizlenmesi ve Gosterilmesi

86 – Options Ekrani Uzerinde Property Sheet Dizayni

87 – Font Dialogu Yardimiyla Bir Fontun Secilmesi

88 – Secilen Fontun Editore Uygulanmasi

89 – CheckBox ve Radio Button Kullanimi

90 – Disk Uzerinde Bir Klasor Secmek

91 – Dosyanin Diske Kaydedilmesi

92 – Find Dialogunun Olusturulusu

93 – New Instance ve Exit Islemleri

94 – TreeView ve ListView Bilesenleri

95 – TreeView

96 – TreeView Uzerinde Image Kullanimi

97 – ListView Kullanimi

98 – Araçlar

99 – AsmStudioInstall

100 – Help

101 – Projeler

Alıntı Yaparak Cevapla
 
Üye olmanıza kesinlikle gerek yok !

Konuya yorum yazmak için sadece buraya tıklayınız.

Bu sitede 1 günde 10.000 kişiye sesinizi duyurma fırsatınız var.

IP adresleri kayıt altında tutulmaktadır. Aşağılama, hakaret, küfür vb. kötü içerikli mesaj yazan şahıslar IP adreslerinden tespit edilerek haklarında suç duyurusunda bulunulabilir.

« Önceki Konu   |   Sonraki Konu »
Konu Araçları Bu Konuda Ara
Bu Konuda Ara:

Gelişmiş Arama
Görünüm Modları


forumsinsi.com
Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ForumSinsi.com hakkında yapılacak tüm şikayetlerde ilgili adresimizle iletişime geçilmesi halinde kanunlar ve yönetmelikler çerçevesinde en geç 1 (Bir) Hafta içerisinde gereken işlemler yapılacaktır. İletişime geçmek için buraya tıklayınız.