Bu bölüme başlamadan evvel öteki bölüm ile arada boş bir süre bırakmam gerektiğini düşündüm, çünkü yazacağım şeylerin içeriğini hazırlamam epey güç oldu. Bu konu gerçekten çok derin ve çok etkileyici, ancak bir o kadar da dikkat isteyen bir bölüm. Dolayısıyla, bu bölümü okumaya başlamadan evvel 3. bölüm ile ilgili kafanızda büyük soru işaretleri kalmamış olmalı.

 

Bu bölüm, Intel IA-32 serisi(80386 ve sonrası) mikroişlemcilerinin etkin ve verimli biçimde kullanılmasını sağlayan 32 bit korumalı kipi ve bu kipe bağlı olarak kullanılabilecek assembler dilini konu alıyor. Assembler dilinin temel anlamda içeriği işlemci sembolik kodları olduğundan, öncelikle ortama bağlı olmaksızın bu dil işlenecek. Daha sonra, Windows altında çalışmak üzere yazılan assembler programlarını derlemek amacıyla kullanılan Microsoft Macro Assembler'e yer verilecek. Windows programlarının penceresel yapısı üzerinde bu bölümde durmayacağım, çünkü söz konusu konu kendi başına bir bölüm teşkil edecek kadar önemli ve derin.

 

Bölüm 5: 32 Bit Korumalı Kip ve 32 Bit Assembler

 

1985 yılında piyasaya sürülen 80386 işlemcisi, bilgisayar kullanıcılarının gözünde resmen bir çığır olmuştur. Kullanıcıların %90'dan fazlasının alt düzey sistem donanımı ile ilgili bilgisinin olmamasına karşın, 80286 işlemcisinin ardından 33Mhz'lik bir iç hız hissedilir bir gelişimdir ve komutların çalışma ve işleme süreleri bu hızla doğru orantılıdır. Ancak bu serideki işlemciler, gerçek üstünlüklerini 32 bitlik işlemler yapabilmeleri ve 32 bitlik adres veriyolları ile gösterirler. Bu özelliklerden ayrıntılı biçimde söz etmeden evvel ilk mikroişlemcilere ve gelişim sürecine yer vermek istiyorum.

 

Intel Mikroişlemci Ailesinin Gelişim Süreci

 

İlk Intel mikroişlemcisi olan Intel 4004 1969 yılında piyasaya sürüldükten sonra IA-32 mimarisinin kökünün uzandığı 8080 ve 8085 mikroişlemcileri geliştirilmiştir. IA-32 serisinden önce çıkan son işlemciler 8086 ve 8088'dir. 8086 ve 8088 işlemcileri arasındaki tek fark, dış veriyoludur. 8086'nın dış veriyolu 16 bit iken 8088'in dış veriyolu 8 bittir. Bu işlemciler sayesinde segment kavramı ortaya çıkmıştır. 16 bitlik dört adet segment yazmacı sayesinde, hiçbir değişiklik yapmaksızın 256KB'lık veriye erişilebilmektedir. Segment yapısı sayesinde toplam 20 bitlik, yani 1.048.576 baytlık bellek erişimi sağlanmıştır. İlk x86 zamanlarında bu kadar büyük bir belleğe ihtiyaç dahi yoktu, zira yoğunluklu olarak COM dosya biçimi kullanılmaktaydı ve çok nadir durumlar dışında sadece 64KB'lık bellek işlemlerin gerçekleştirilmesi için yeterli olmaktaydı(Bkz. Bölüm 4: COM ve EXE Dosya Biçimleri).

 

Korumalı Kipe Giriş

 

80286 işlemcisinin çıkması ile Intel işlemcilerine yeni komut setleri eklenmiş, ayrıca Korumalı Kip kavramı ortaya çıkmıştır. Korumalı Kip, segment yazmaç içeriklerini Açıklama Tabloları'na yönelik işaretçiler veya seçiciler olarak kullanmaktadır. Açıklama tabloları, 24 bitlik bellek erişimi sunmakta; bu da maksimum 16MB'lık fiziksel bellek anlamına gelmektedir. Ayrıca segment takasına dayalı Sanal Bellek yönetimini ve çeşitli koruma mekanizmalarını desteklemektedir. Bu koruma unsurları kısaca:

biçimindedir.

 

32 Bitlik İşlemcilerin Başlangıcı

 

Intel I386 işlemcisi, IA-32 mimari ailesindeki ilk 32 bitlik işlemcidir. Bu işlemci, 1985'te çıkmıştır ve hem veri saklama, hem de adresleme için 32 bitlik yazmaçları ortaya çıkarmıştır. Bu yazmaçlar, önceki işlemcilerde yer alan AX, BX vs... yazmaçların önlerine E (extended) harfi konulması suretiyle anılmaktadır ve düşük 16 bitlik kısımları, önceki yazmaçlar ile tamamen aynı niteliktedir. Bu sayede geriye dönük uyumluluk sağlanmaktadır. Ayrıca sistem, içerisinde barındırdığı Sanal 8086 Modu (Virtual-8086 mode) ile, önceki işlemciler için yazılmış, segment dolaylı adresleme yöntemi kullanılan programlar için de büyük kolaylık ve etkinlik sağlamaktadır.

 

Intel I386 işlemcisi, 32 bitlik veriyoluna sahiptir ve 4GB'lık fiziksel belleği desteklemektedir. Her işlem(uygulama) için mantıksal adres bölgesi tahsis edilmektedir. 32 bitlik mimari, hem segment dolaylı, hem de Flat (Düz) bellek erişimini desteklemektedir. Flat bellek modelinde tüm segment yazmaçları aynı değeri göstermekte ve her bir segment üzerinden 4GB'lık adreslenebilir bölge erişilebilir olmaktadır. Başka bir deyişle segment yazmaçları kullanılmamaktadır. Bu şekilde tamamen doğrusal bir bellek erişimi sağlanır.

 

16 bitlik eski komutlar, 32 bitlik yazmaçları ve adresleri destekleyecek şekilde genişletilmiştir. Ayrıca Paging (Sayfa seçimi) yöntemi ortaya çıkmış; sabit 4KB'lık sayfalar ile sanal bellek yönetimi sağlanmıştır. Segment yazmaçları, işte bu sayfaları seçmek için kullanılmaktadır. Tüm bunlar dışında, 6 adet paralel kat sayesinde kod işleme verimliliği, bellek erişim çeşitliliği ve işlem hızı arttırılmıştır. Bugün kullanmakta olduğumuz IA-32 serisinin en son işlemcileri, tüm bu özellikleri temel almakta ve kimi hususlarda daha üstün özellikler göstermektedir. Ancak 32 bitlik yazmaçlar ve bellek erişimi tamamen aynıdır.

 

*4KB'lık büyüklük, 12 bit ile ifade edilmektedir.

 

32 Bitlik İşlemcilerin Özellikleri ve 32 Bit Assembler

 

Intel I386 işlemcisinden başlayan ve günümüze değin gelişerek devam eden işlemcilerin 3 farklı çalışma kipi vardır:

32 bitlik bir Intel işlemcisinin temel çalışma ortamında şu ana sistem kaynakları mevcuttur:

Bunlar dışında sistemde donanımsal ve işletim konumunu barındıran çeşitli kaynaklar da mevcuttur. Tamamına değinmek, bu yazının amacını aşmaktadır.

 

Intel I386 işlemcisinden bu güne değin kullandığımız tüm işlemciler 32 bitlik veriyoluna (bus) sahiptir. Bunun şu 2 özel anlamı vardır:

Bu tür erişimler genelde tek bir hamlede yapıldığından, aynı frekanstaki 16 bitlik erişimlere göre 2 kat yüksek veri akış hızı sağlanmakta, bu da işlem başarımını arttırmaktadır.

 

 

Bu bölümü tek bir yazı halinde değil, farklı başlıklara değindiğim birden fazla yazı olarak yayınlamayı düşünüyorum. Dolayısıyla bu parçaya burada son veriyorum. Devam niteliğinde olacak sonraki bölümde 32 Bit Assembler'a yer vereceğim. Gelecek bölümde görüşmek üzere, iyi çalışmalar ve sınavlarınızda başarılar dilerim...

 

Cihan Atıl Namlı