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.