umutsuzluklarına karşın artış gösteren işlemci performansı pek çok CPU’ların zamanın çoğunda boş oturduklarını, I/O işlemleri ve çağrı (paging) gibi önceden tahmin edilen sıkıntıların neden olduğu gecikmelerin söz konusu olduğunu ifade etmektedir. Bu pek çok programcılar için ham kodun çalışma hızını bir mesele olmaktan çıkarmıştır. (Böylece âşikâr performans etkisi olmaksızın yorumlanan dillerin kullanımı artırılmıştır.)

Aslında günümüz uzman pratisyenlerin assembly dilini tercih edebileceği sadece çok az durum vardır: şöyle ki:

• Tek başına bir ikilinin icra edilmesi gerektiğinde, bir başka deyişle yüksek seviyeli bir dille bağlantılı olarak çalışma süresi elemanlarına veya kütüphanelerine başvurmaya gerek duyulmaksızın icra etmesi kesinlikle şart olan; bu belki de en çok karşılaşılan durumdur.

• Donanımla doğrudan etkileşim sağlandığında, örneği: bir cihaz sürücüsünde veya derleyici tarafından kullanılmayan veya derleyicide bulunmayan işlemciye özel komutların kullanılması halinde.

• Ekstrem (aşırı) optimizasyonun gerekmesi halinde, örneğin; işlemci yoğun algoritma içindeki bir dahili döngü(loop) içinde.

• Sınırlı kaynakların kullanımını maksimize etmek için ciddi kaynak sıkıntısı içindeki bir sistemin (örneğin: bir dahili sistem) elle kodlanması gerektiğinde; ancak işlemci fiyatı/performansı kanıtlamadığından bu daha az yaygın hale gelmektedir.

• Yüksek seviyeli dilin mevcut olmaması halinde, örneğin; bir yeni veya uzmanlaşmış işlemcide.

Günümüzde pek az programcı günlük bazda assembly dilini kullanma gereğini duymaktadır. Performans-kritik uygulamalar için C gibi alt seviyeli bir dil genellikle seçilebilecektir. Şimdi, bir assembly dilinde yazılan programdan daha az verimli olan bir C programını yazmak çok güçtür.

Ancak, assembly dili pek çok Bilgisayar Bilimi programlarında hâlâ öğretilmektedir. Bir araç olarak günümüzde az sayıda programcılar düzenli olarak assembly dili ile çalışmaktaysalar da kolayca görülmeyen ancak önemli olan kavramlar hâlâ önemini sürdürmektedir. İkili (binary) aritmetik, bellek tahsisi, “stack” işleme, karakter seti kodlaması, kesme işlemi ve derleyici tasarımı gibi ana konular üzerinde ayrıntılı olarak çalışmak bir bilgisayarın donanım seviyesinde nasıl çalıştığını tam olarak kavramadan çok zor olacaktı. Bir bilgisayarın davranışı esas itibarıyla kendi komut setiyle belirlendiğinden, bu kavramların öğrenilmesindeki mantıksal usul bir assembly dili üzerinde çalışma yapmaktır. Neyse ki, pek çok modern bilgisayarlar benzer komut setlerine sahiptir, böylece tek bir assembly dili üzerindeki çalışma temel kavramları (concepts) öğrenmek, assembly dili kullanımının uygun olabileceği durumları tanımak ve verimli icra edilebilir bir kodun yüksek seviyeli dillerden yaratılabileceğini anlamak için yeterlidir.

3.3. Tipik uygulamalar

Elle kodlanmış assembly dili tipik olarak bir sistemin BIOS’unda kullanılır. Bu alt seviyeli kod diğerleriyle birlikte OS’yi tanıtmadan (booting) önce sistem donanımını çalıştırmak ve test etmek için kullanılır ve ROM içinde saklanır. Bir kez belli bir seviyedeki donanımın initializasyonu (ilk çalıştırılması) yapılırsa, icraat diğer koda geçer, tipik olarak yüksek seviyeli dillerde yazılmıştır; fakat güç devreye alındıktan hemen sonra çalışan kod genellikle assembly dilinde yazılır. Aynı şey pek çok “boot” yükleyicileri içinde geçerlidir.

Pek çok derleyiciler tam derleme yapılmadan önce ilk iş olarak, assembly kodunun hatadan kurtarma (debugging) ve optimizasyon amacıyla görülmesine imkân vererek yüksek seviyeli dillerin assembly (çevirme) içine alınmasını sağlar.

Bu imkânları kullanan programlar, Linux kernel gibi, daha sonra her bir donanım platformu üzerinde farklı assembly dili kullanan abstraksiyonları inşa edebilirler. Sistemin taşınabilir kodu daha sonra bu işlemciye özel elemanları yeknesak bir ara yüz vasıtasıyla kullanabilir.

Pek çok program sadece makine kodu formunda dağıtıldıklarından, ve makine kodunun genellikle assembly diline çevrilmesi kolay olduğundan ve bu formda dikkatlice incelendiğinden, fakat bir yüksek seviyeli dile çevirmek çok zor olduğundan, assembly dili ters mühendislikte de kıymetlidir. Enteraktif Disassembler (çeviri yapmayan) gibi araçlar bu amaca yönelik “disassembly”nin kapsamlı kullanımına imkân verir.

• Assembly (çevirme) dili veya çevirici dili genel olarak assembly (çevirme), assembler (çevirici), ASM, veya sembolik makine kodu şeklinde adlandırılır. IBM ana gövde (mainframe) programlayıcılarının bir nesli "Temel Assembly" Dili için BAL olarak adlandırılır.

Not: Dil çeviricisi teriminin kullanılması şüphesiz potansiyel olarak karıştırılır ve müphemdir, çünkü bu terim aynı zamanda assembly dil komutlarını makine koduna çeviren faydalanma (utility) programının da adıdır. Bazıları bunun tam karşılığı olmadığını veya hata olduğunu düşünebilir. Ancak, bu kullanım profesyoneller arasında ve literatürde on yıldan beri yaygın bir kullanıma sahiptir. Aynı şekilde bazı ilk bilgisayarlar "çeviricilerine" assembly programı olarak adlandırmışlardır.

• Tüm makro işlem dahil bir çeviricinin çalıştığı hesapsal (computational) adım assembly (çevirme) zamanı olarak bilinir.

• Assembly (çevirme) sözcüğünün kullanımı bilgisayarın ortaya çıktığı ilk yıllar kadar eskidir (karşılaştırınız: kısa kod. Hızlı kod/”hızlı kodlama”).

• Bir çapraz çevirici (cross assembler) (çapraz derleyiciye bakınız) tek tip işlemci için kod üretir, fakat başka birisinin üzerinde çalışır. Yeni işlemciler için yazılımların geliştirilmesi sırasında bu teknoloji özellikle önemlidir.

Hem geçmişte hem de günümüzde verilen herhangi bir kişisel bilgisayar, ana gövde, dahili sistem, ve oyun konsolu için çeviricilerden (muhtemelen düzinelerce) en az biri yazılmıştır. Örnekler için çeviriciler listesine bakınız.

Unix sistemlerinde çevirici geleneksel olarak “as” olarak adlandırılır; kodun tek bir gövdesi olmasa da, her bir port için tipik olarak yeniden yazılır. Unix varyantlarının bir kısmı GAS kullanır.

İşlemci grupları içerisinde her bir çevirici kendine ait diyalekte sahiptir. Bazen, bazı çeviriciler başka bir çeviricinin diyalektini okuyabilir, örneğin, TASM eski MASM kodunu okuyabilir, fakat eski MASM kodu TASM’yi okuyamaz. FASM ve NASM aynı sentaksa sahiptirler, fakat her biri birbirlerine çevirmeyi güçleştiren farklı makroları destekler. Temel tamamıyla aynıdır, fakat ileri özellikler farklı olacaktır.

Ayrıca, assembly (çevirme) bazen aynı tip CPU üzerindeki farklı çalışan tüm sistemlerde taşınabilir. Çalışan sistemler arasında konvansiyonlar olarak çağrılması sıklıkla biraz farklıdır, ve büyük dikkat ile assembly dilinde bir miktar portatifliğin elde edilmesi mümkündür, genellikle çalışan sistemler arasında değişmeyen bir C kütüphanesi ile bağlanarak. Ancak, arayanın çalışan sistemler arasında değişebilen ön işlemci makroları kullanmasını isteyen C kütüphanesi ile portatif olarak bağlanmak mümkün değildir.

Örneğin, derlemeden önce “libe”deki pek çok şey OS-specific, C-specific şeyleri programda yapmak için ön işlemciye bağlıdır. Aslında, bazı fonksiyonların ve sembollerin ön işlemcinin dışında varlıkları da garanti edilemez. En kötüsü, “structs” ın büyüklüğü ve alan sırası, aynı zamanda “off t” gibi belli “typedefs” büyüklüğü assembly dilinde hiç yoktur, ve parametreler olarak sadece basit tam sayıları ve ibreleri alanların dışında “libe” deki fonksiyonları portatif olarak aramayı imkânsız hale getirerek Linux versiyonları arasında da farklıdırlar.

C gibi bazı yüksek seviyeli bilgisayar dilleri, assembly kodunun oldukça kısa bölümlerinin yüksek seviyeli dil kodunun içerisine yerleştirilebilindiği “Inline assembly”yi desteklerler. “Borland Pascal” de bir “asm” şifresiyle açılan bir çevirici derleyiciye sahip olmuştur. Bu başlıca Mouse (fare) ve COM-port sürücüleri oluşturmakta kullanılmıştı.

Assembly dil programlarını hatadan arındırmak (debug) için pek çok kişi bir benzetici (emulator) kullanır.

Aşağıda C, Visual Basic ve Assemblyde introduction programlarının farkı. Dil seviyesi yükseldikçe kod kısalmaktadır:

Assembly
C
Visual Basic






Veda Hutbesi

Veda Hutbesi, Hicri 9 Zilhicce 10 tarihinde (çeşitli kaynaklarda Miladi takvimde 6-7-8-9 Mart 632 olarak karşılanmaktadır.) Muhammed tarafından, kendisinin ilk ve son Hac'cı olan Veda Haccı'nda 124.000 Müslümana karşı yaptığı konuşma metni. Dinleyicilerin sayısı itibarıyla "en kuvvetli hadis" kabul edilir.

Rivayete göre Muhammed, bu son hutbesinde, bundan sonra bir daha hac edemeyeceğini bildirip ölümünün yaklaştığını ima ettiği, sonraki aylar içerisinde de yaşamını yitirdiği için bu hacca "Veda Haccı", konuşmaya da "Veda Hutbesi" adı verilmiştir.

Veda Hutbesi'nin bazı bölümleri birbirine uymayan değişik rivayetlere dayalı versiyonları bulunmaktadır. Bu versiyon farklılıkları ile ilgili açıklayıcı görüşlerden biri şudur:

Veda Hutbesi her ne kadar tek bir hutbe imiş gibi kabul edilmekteyse de, gerçekte bu hutbe, Arafat'ta, Mina'da ve bir gün sonra yine Mina'da olmak üzere arife günü ile, bayramın 1. ve 2. günlerinde parça parça irad edilmiştir. Değişik yer ve zamanlarda irad edildiği için de hutbe, birçok kişi tarafından birbirinden farklı şekillerde rivayet edilmiştir. Kişinin ya da grubun duyduğunu başkaları işitmediğinden, hutbenin tamamının bir araya toplanmasında bu farklı rivayetlerden yararlanılmış ve daha sonraki yıllarda bu üç ayrı yer ve zamanda tamamlanan hutbe tek bir hutbe olarak bir araya getirilmiştir.





Red Special

Red Special (veya Fireplace), Queen'in gitaristi Brian May'in fizik bilgisi ve babası Harold May'in elektronik bilgisini birleştirerek birlikte özgün bir tasarımla yaptıkları ve Brian May'in hala kullanmakta olduğu gitar. Gitarın yapımında kullanılan ahşap malzeme 120 yıllık eski bir şömineye aittir. Gitarın sapı ise çelik bir çubukla güçlendirilmiş ve tremolo kolu da 1928 model bir Panther marka motosikletin iki valf yayıyla yapılmıştır. İçinde tahtakurdu dehlizleri olan maun gövdeli gitar 24 perdeli olup perdelerin yapılmasında Brian May'in annesinin sedef dü