# Mikroprogramlama
Mikroprogramlama, kontrol işaretlerini oluşturan ikili sayıların (0, 1) mikrokomutlar yazılarak oluşturulmasıdır. Bu sembolik mikroprogram, ikili kontrol işaretlerine mikroassembler anlamında dönüştürülür. Mikroprogramlama yazılım ile donanım arasındaki özyinelemeyi sağlayan bilgisayarın en gerekli parçasıdır. İşlemcinin denetim birimini tasarlamak için yazmaç aktarımı işlemleri düzeyinde programlama yapılması yöntemidir. Birçok işlemcide mikroprogramlama makine kodu buyruklarını doğrudan donanım üzerinde yürütür. Fakat bazı yeni mimarilerde mikroprogramlama uygulanmaz onun yerine yazılım, dijital mantık düzeyindeki işlemleri doğrudan çalıştırır.
Mikroprogramın her satırı 5 alanlı mikrokomutlardan oluşur: etiket, mikrooperasyon, CD, BR ve AD alanlarıdır.
  - Alan: Etiket alanı, boş olabilir veya sembolik bir adres içerebilir. Kolon (:) ile biter. 
  - Alan: Mikrooperasyon alanı, virgül ile ayrılmış bir, iki veya üç sembolden oluşur. Her biri F1, F2, F3 alanlarına karşı düşer ve 9 bit (3 x 3 bit) ile tanımlanır. 
  - Alan: CD alanı U, I, S veya Z harflerinden birini içerir. Mikrokomuttaki koşulu tanımlar. 
  - Alan: BR alanı daha önce tanımlanan JMP, CALL, RET ve MAP sembollerini içerir. 
  - Alan: AD alanı aşağıdaki 3 yoldan birisi olabilecek adresi tanımlar:
  - Sembolik bir adres (etiket) 
  - NEXT sembolü: sonraki satırı tanımlar 
  - BR alanı RET veya MAP olarak tanımlanmışsa, AD alanı boş bırakılır.


## Tarihi.
Önceden bilgisayar bilimcileri kendi çalışmalarını sekteye uğratan birçok kısıtlamalarla karşı karşıya kaldılar. Programlar alt düzey dillerle yazılmış ve mevcut depolanan alan küçüktü. Bu sebeple güçlü alt düzey buyruklar her zaman bilim adamları tarafından en çok ilgilenilen konu oldu çünkü güçlü buyruklar kolay programlanabilir ve bellekte az yer kaplar öte yandan daha güçlü buyruklar büyük ve hantal olan daha karmaşık donanımsal yorumlayıcılar gerektirir.
Bilgisayarın denetim parçaları yani elektronik parçaların mantık kapılarına dönüştürülmesi 60'ların öncesinde yapılandırıldı. Bilgisayarların inşasının özellikle denetim mantığının karmaşık ve hata eğilimli olduğunun kısa zamanda farkına varılmıştır bu yüzden hataları azaltmak ve ileri sistem yapılandırılması yapmak için birtakım teknikler geliştirildi. Bunun rağmen hala karmaşıktır ve hataları da düzeltmek zordur.
1947'de MIT Whirlwind tasarımı, bilgisayar tasarımını kolaylaştıran ve "amaca özel-niyete mahsus" olan yöntemlerin ötesine geçmek için bir yol olan denetim belleği fikri ile tanıştı. Denetim belleği iki boyutlu bir kafestir. Bir boyut MİB dahili saatinden "denetim zamanı vuruşları" olarak kabul edildi, diğeri ise kapılar ve diğer akımlar üzerindeki denetim sinyallerine bağlıdır. "Vuruş dağıtıcı", MİB saati tarafından oluşturulan vuruşları alır ve her biri kafesin farklı bir satırını etkinleştiren sekiz parça zaman vuruşuna böler. Satırlar etkinleştiği zaman, kendisine bağlı olan denetim sinyallerini etkinleştirir. Başka bir yoldan açıklarsak, sinyaller denetim belleğinden ardışık bir şekilde yayılır ve bitlerden kurulan çok geniş kelime dizisi tarafından kontrol edilir. Mikroprogramlama karmaşık yorumlayıcılara alternatif olarak 1951 yılında Maurice V. Wilkes tarafından ileri sürüldü. Wilkes'in tasarısı bir sonraki buyruğu gidip ana programdan alıp getiren, buyruğu çözümleyen ve buyrukları çalıştırmak için gerekli donanımsal işleri gerçekleştiren fiziksel bağlantılı bir program uygulamakla ilgilidir. Bu denetim yolu tasarımını fazlasıyla kolaylaştırır. Bu tasarıya göre mikroprogram merkezî işlem birimi üzerindeki bir bellek dizisinde saklanmalı ve hemen hemen olağan programlama teknikleri ile tasarlanmalı daha sonra da teller ve kapılarla gerçekleştirilmelidir.
1951'de Wilkes bu konuya "koşullu uygulamayı" ekleyerek geliştirdi. Onun başlangıç uygulaması bir çift matris içerir. İkinci matris bir sonraki devre geçen sinyal satırını seçerken, birincisi Whirlwind denetim belleği şeklinde sinyaller üretir. İkinci matristen alternatifler seçebilen koşullular denetim belleğinde tek bir hat geliştirilerek uygulandı. Bu yakalanan dahili sinyallerde koşullu denetim sinyalleri oluşturur. Wilkes bu özelliği açıklamak ve bunu basit bir denetim belleğinden ayırmak için mikroprogramlama terimini keşfetti.


## Mikroprogramlama uygulaması.
### Yatay ve dikey mikroprogramlama.
Yatay ve dikey olmak üzere iki tür mikro programlama vardır. Bu ayrımın sebebi mikro kodun işlenme şeklidir. Veriyolu kontrol sinyalleri ile yönetildiğinden mikro kodun bu sinyallerle nasıl ilişkilendirileceği problemi ortaya çıkar. Yatay ve dikey mikro programlama bu ilişkilendirme şeklidir. En basit yöntem olan "tam yatay mikro programlama" mikro koddaki her bitin kontrol sinyallerindeki bitlerle birebir eşlenmesidir. Ama böyle bir mikro programlama tekniğinde veriyolu yönetimi için çok fazla mikro buyruk ve aynı zamanda geniş veriyolu gerektirmektedir. Bunlara rağmen paralel programlama desteğini de artırmaktadır. Diğer bir mikro programlama türü tam dikey mikro programlamadır. Bu yöntemle veriyolu bitleri kodlanmakta ve böylece daha az mikro buyruk gerektirmektedir. Mikro buyruklardaki azalma ise mikro programlama için gerekli olan belleği azaltmaktadır. Ama dikey programlama paralel programlamayı engeller.


### Değerlendirme.
Her tasarım bazı faydalar sağlarken uygulanması fedakârlıklara sebep olur. 1960'lardan itibaren mikro programlama moda olmasında aşağıdaki iki fayda rol oynamıştır.
  - "Kolay değiştirilebilirlik": Mikro program kodları diskte saklanabildiği için mikro koddaki hatalar çok rahatlıkla düzeltilebilmektedir ve değişik bilgisayarlar için farklı mikro program kümeleri kullanılabilir.
  - "Kolay genişletilebilirlik": İşlemciye yeni eklenecek buyruk için devre tasarlanması yerine hızlı bir şekilde yeni eklenen buyruk için mikro kodların yazılması yeterlidir.
Yüksek seviyeli programlama dillerinin 1980'lerin başlarından itibaren kullanılması aşağıdaki problemlere sebep olmuştur:
  - "Kurulum zorluğu": Yüksek seviye diller nedeniyle değişik buyruklar geldi ve bu buyruklar için mikro kod yazılması imkânsızlaştı.
  - "Karmaşa": Yüksek seviye buyrukların mikro kodları karmaşıklaştı.
  - "Performans": Yüksek seviye buyruk için gereken mikro buyruk sayısı arttığı için buyruk başına çevrim sayısı azalmaktadır bu da performansta düşüşlere sebep olmaktadır.
  - "Kaynak harcanması": Yüksek seviyeli buyrukların mikro buyruklara dönüştürülmesini sağlamak amacıyla kullanılan kaynaklar aşırı derecede arttı.
  - "Kontrol Birimi Baskınlığı": Buyruk mikro buyruk çevirme devreleri işlemcilerin 70%'inden fazlasını kaplamaya başladı.
Yukarıdaki sebeplerden dolayı 1980'lerin sonlarında mikro programlama modası düşüşe geçmiştir.