Mikroişlemcilerde kural dışı durumlar

**Mikroişlemcilerde kural dışı durumlar**, programların çalıştırılması esnasında verilen komutlar neticesinde oluşan hatalardır. Bu hatalar nedeniyle program istenilen şekilde çalışmaz. Hatta işlemcinin kilitlenmesine bile sebep olabilir. Bu tür durumlar normal bir işleyiş olmadığından kural dışı durum oluşturur.

Kural dışı durumlar çeşitli şekillerde sınıflandırılabilir. En önemli iki sınıflandırmada ise; 
* birincisi kural dışı duruma ne zaman yakalandığı ya da yakalandıktan sonra ne yapılacağına göre sınıflandırılması,
** Ne zaman yakalandığı ya da yakalanınca ne yapılacağına göre sınıflandırmasına bakarsak bu sınıflandırma kendi içinde üçe ayrılmaktadır: Hatalar (fault), tuzaklar (trap) ve iptaller (abort). 
***Hatalar genellikle bellek adresleri ile ilgili durumlarda ortaya çıkarlar. Hatalar işlemci komutu çalıştırmadan önce tespit edilir. Hataya sebep olan komut hata ile ilgili yordam çalıştırıldıktan tekrar çalıştırılır. Bu şekilde olmasının sebebi hataların genellikle adreslerdeki yanlışlıklardan olması, hataların komut çalıştırılmadan tespit edilmesi ve hataların işletim sistemi tarafından kolayca çözülebilmesidir.
*** Tuzaklar ise programcılar tarafından yaptırılan kural dışı durumlardır. Burada amaç bazı kural dışı durumların yardımı ile örneğin sonsuz döngülerden dışarı çıkmaktır. Ayrıca kural dışı durumların çözümünde kullanılan yordamlar programcılar tarafından da değiştirilebildiğinden dolayı bir programlama hilesi olarak da tuzaklar kullanılmaktadır.
*** İptaller de komutlardaki işlemler ile ilgili kural dışı durumlardır. Adından da anlaşılacağı gibi bir iptal tipi kural dışı durum gerçekleştiğinde sorun çözülmeye çalışılmaz program durdurulur. İptallere en büyük örnek sıfıra bölme hatasıdır. 
* ikincisi ise kural dışı durumun adreslerden ya da içeriğinden kaynaklı olmasına göre sınıflandırılmasıdır.
** Diğer önemli sınıflandırma ise kural dışı durumun kaynaklandığı yerdir. Bu yerler temel olarak ya adrestir ya da komut içerisindeki işlemdeki yanlıştır. Adreslerdeki yanlışlar işlemciye getirilecek buyruğun adresinde ya da işlenenlerin adresinde olabilir. Bu tür kural dışı durumlar komut çalıştırılmadan anlaşılabileceği için işlemci adresler üzerinde kontroller yapar ve böylece bu tür kural dışı durumlar çözülmüştür. Adreslerle ilgili hataların takibi için her buyruğa iki bit bağlanır ve bu iki bitte hatanın tipi belirtilir. Hata komut işlemcide iken herhangi bir aşamada değerlendirilebilir. Durma noktası hatasında hata ile ilgili yordam çağırılmadan önce yazmaçların değerlerini döndüren bir mikroprogram çalıştırılır. Adreslerle ilgili kural dışı durumlar haricinde ayrıca buruktaki işlemle ilgili kural dışı durumlar oluşabilir. Bunlar genelde iptal hatası olup buyruğun bulunduğu program durdurularak hata çözülür. Adresler ile ilgili üç adet test yapılır. Bu testler;
*** limit testi, 
**** Limit testi bölünmüş bellekler bulunan (segmenteted memory) bilgisayarlarda anlamlıdır. komut adresinin bölümün dışına çıkıp çıkmadığının yani kendi adres alanının dışına erişip erişmediğinin testidir. Adresin tabanına bölüm büyüklüğü eklenerek üst sınır bulunur ve sonra komut adresinin bu aralıkta olup olmadığı kontrol edilir. 
*** sayfa hatası testi 
**** Sayfa hatası testi sanal bellek kullanıldığında işlemcinin işaret ettiği adres işletim sistemi tarafından buyruğun bulunduğu sayfanın fiziksel belleğe getirilmemiş olup olmadığının testidir. İşletim sistemi bu durumda sanal bellekten sayfayı fiziksel belleğe getirir ve komut yeniden çalıştırılır.
*** durma noktası (breakpoint) testidir. 
**** Durma noktası testi ise eğer program üzerinde hata ayıklanma (debugging) yapılıyorsa yazmaçların durumlarının hata ayıklayan programa bildirilmesi için yapılan testtir. Yukarıda komutlar için anlatılan adres testleri aynı zamanda işlenenlere ait adreslerin testi içinde geçerlidir.

## Kural dışı durumların işlenmesi
Kural dışı bu durumların işlemcinin düzgün şekilde çalışabilmesi için ayıklanması ya da düzeltilmesi gereklidir. Kural dışı durumlar karşısında işlemci kesmeleri yönettiği gibi bir uygulama izlemektedir. Bir kural dışı durum oluştuğunda;
# İşlemcinin durumu saklanır.
# Kural dışı durumla ilgili kesme vektörüne atlanır. 
# Kural dışı durumun çözümünü sağlayacak olan yordamın adresi alınır. 
# Yordamın adresine gidilerek kural dışı durumun çözümü ile ilgili işlemler yapılır. 
# Yordam tamamlandığında, duruma göre işlemci kaldığı yerden devam edilir ya da programı sonlandırılır.

## Önemli bazı kural dışı durumlar
# **Sıfıra bölme (INT 0)**: en iyi yöntem programı durdurmak
# **İzleme (trace) (INT 1)**: hata ayıklayıcılar tarafından her seferinden tek komut çalıştırılması için kullanılır.
# **Durma noktası(breakpoint) (INT 3)**: hata ayıklayıcılar tarafından kullanılır. Yazmaçların durumunu görmek için kullanılır
# **Taşma (INT 4/INTO)**: aritmetik işlemlerde taşma olduğunda tetiklenir.
# **Sınır (INT 5)**: yazmaç belirtilen sınırlar dışında ise oluşur
# **Hatalı İşlem Kodu (INT 6)**: 80286lardan itibaren işlem kodu x86 komut kümesinde değilse tetiklenir.
# **Yardımcı İşlemci Ulaşılamaz (INT 7)**: 80286lardan itibaren yardımcı işlemci (coprocessor) ulaşılamaz ise tetiklenir.
Kural dışı durumların çözümünde kullanılan yordamlar programcılar tarafından kesme vektörlerindeki adresler değiştirilerek kişiselleştirilebilir. Ayrıca yeni kural dışı durum tanımları eklenebilir. Bunun için yöntem kesmelerin kişiselleştirilmesindekinin aynısıdır.
## Kaynakça