Bilgisayar Mimarisi Kesme Uygulaması

Kesme; önceden belirlenmiş olan herhangi bir koşul oluştuğunda o anda yürütülmekte olan programın kesilerek bir kesme hizmet programına (interrupt handler) gidilmesi ve kesme hizmet programı sonlandıktan sonra ana programda kalınan yere dönülmesidir. Kesmeyi oluşturan koşul mikroişlemcinin iç yazılımından (Sıfıra bölme, taşma ya da TRAP komutu) veya dış donanımdan (IPL0,IPL1,IPL2 girişlerine bir işaret gelmesi) kaynaklanabilir.

Bir kesme oluştuğunda kesme kaynağına göre vektör tablosunun ilgili satırından o kesmeye ilişkin adres okunur. Bu adres kesme hizmet programının başlangıç adresidir. Kullanıcı kendi yazacağı kesme hizmet programlarının adreslerini bu tabloya yerleştirmelidir.

Örnek 1’de TRAP komutu ile oluşturulan yazılım kesmeleri (software interrupt) gösterilmiştir. Yazılım kesmeleri, genellikle kullanıcının doğrudan erişemediği sistem kaynaklarının (seri/paralel iletişim arabirimi, ekran, disk) kullanımını sağlamak ve kolaylaştırmak için sistemi tasarlayan kişi tarafından önceden yazılır. Örneğin derste kullanılan simulatör programında da 15 numaralı yazılım kesmesi sistem kaynaklarının kullanımı için önceden hazırlanmıştır. Bu yazılım kesmesinin sağladığı olanakları incelemek için simulatör programında (E68K) HELP TRAP#15 yazınız. TRAP #15 ile ekran, tuş takımı, disk, seri/paralel iletişim arabirimi üzerinde işlemler yapılabilmektedir. Hangi işlemin yapılmak istendiği D0 saklayıcısın sekiz bitlik kısmına yazılan bilgi ile belirtilir. Örneğin D0’a 0 (sıfır) değerinin atanması ekrana bir bilgi yazılmasını ve alt satıra geçilmesini sağlar. Ekrana çıkacak olan bilginin başlangıç adresi A1’de uzunluğu ise D1’de bulunmalıdır. D0’a 1 (bir) yazılırsa ekrana mesaj çıktıktan sonra aynı satırda kalınır. Tuş takımından değer okumak için ise D0’a 2 yazılır. Örnek 1’de ekrana iki mesaj yazılmaktadır. Ekrana önce ‘Birinci Örnek Program:’, alt satıra da ‘Merhaba dünya.’ yazılır. Simülatör programı çalıştırıldığında 15 numaralı yazılım kesmesinin başlangıç adresi vektör tablosuna yazılmaktadır. Bu nedenle kullanıcının bu işlemi ayrıca yapmasına gerek yoktur. Ancak diğer kesmeler için yazılan kesme hizmet programlarının başlangıç adresleri mutlaka vektör tablosuna yazılmalıdır.

[ads9]

opt     cre

org     $400

start  move.b  #0,d0       Ekrana yazılacak alt satıra geçilecek

lea     mesaj1,a1   Ekrana çıkacak mesajın adresi

move.b  uzun1,d1    Mesajın uzunluğu

trap    #15         Mesajı ekrana yaz

lea     mesaj2,a1   2.mesaj adresi

move.b  uzun2,d1    2.mesaj uzunluğu

trap    #15         Ekrana yaz

stop    #$2000

 

mesaj1 dc.b    ‘Birinci Örnek Program:’

uzun1  dc.b    22

mesaj2 dc.b    ‘Merhaba dünya.’

uzun2  dc.b    14

end     start

Örnek 1 TRAP #15 yazılım kesmesinin kullanılması

 

Örnek 2’de ise sıfıra bölme sonucu oluşan kesmenin kullanımı gösterilmiştir. Bu örnekte div_zero adlı bir kesme hizmet programı (service routine) hazırlanmıştır. Hizmet programında hata adresli bellek gözüne ‘1’ yazılmakta ve ekrana ‘Sıfıra bölme’ mesajı çıkarılmaktadır. Böylece ana programda bölme işlemlerinden sonra hata adresli bellek gözüne bakılarak sıfıra bölme olup olmadığı anlaşılabilir. Anaprogramın başında $14 adresine (sıfıra bölme kesmesinin vektör tablosundaki yeri) kesme hizmet programının başlangıç adresi yazılmaktadır. Aynı işlem, move komutunu kullanmak yerine programın başında aşağıda gösterildiği gibi assembler direktifi ile de yapılabilir:

org   $14

dc.l   div_zero

Anaprogramda iki adet dizi tanımlanmıştır. Birinci dizinin elemanları sırasıyla ikinci dizi­nin elemanlarına bölünmekte ve sonuç sonuc adresinden itibaren belleğe yazılmaktadır. Eğer sıfıra bölme olmuşsa sonuç olarak $ffff değeri yazılmaktadır.

opt     cre

org     $400

div_zero movem.l d0-d1/a1,-(a7)   Kesme Hizmet Programı(Service routine)

move.b  #1,hata          Hata gözü 1 yapıldı

move.b  #0,d0            Ekrana mesaj yazılacak

lea     mesaj,a1         Mesajın adresi

move.b  #12,d1           Mesajın uzunluğu

trap    #15              Yazılım kesmesi çağırılıyor

movem.l (a7)+,d0-d1/a1   Saklayıcılar yığından geri alındı

rte                      Hizmet programından geri dönülüyor

 

org     $500             Anaprogram

main     move.l  #div_zero,($14)  Kesme vektörü yazıldı

lea     dizi1,a0         Dizilerin adresleri yükleniyor

lea     dizi2,a1

lea     sonuc,a2

move.w  uzunluk,d0

sub.w   #1,d0

clr.b   hata             Hata gözü sıfırlandı

tekrar   move.l  (a0)+,d2

divs    (a1)+,d2

tst.b   hata             Sıfıra bölme varsa 1 olacak

beq     devam            Hata yoksa devam

move.w  #$ffff,d2        Sıfıra bölme olduysa sonuç:$ffff

clr.b   hata             Bir sonraki bölme için hata sıfırlandı

devam    move.w  d2,(a2)+         Sonuç yazılıyor

dbf     d0,tekrar

stop    #$2000

 

mesaj    dc.b    ‘Sıfıra bölme’

hata     ds.b    1

dizi1    dc.l    15,-36,89,0,100,77

dizi2    dc.w    3,9,0,-6,-5,0

sonuc    ds.w    6

uzunluk  dc.w    6

end    main

 

Örnek 2 Sıfıra Bölme Kesmesi

Örnek 3’te donanım kesmelerinin otovektörlü çalışması gösterilmiştir. Örnek olarak 1. düzey ve 3.düzey için kesme hizmet programları yazılmıştır. Ana programın başında kesme hizmet programlarının başlangıç adreslerinin vektör tablosuna yerleşmesi sağlan­maktadır. $64’te 1.düzeyden kesmelere ilişkin kesme hizmet programının başlangıç adresi, $6C’de ise 3.düzeyden kesmelere ilişkin kesme hizmet programının başlangıç adresi, bu­lunmalıdır. Daha sonra bir döngü içinde sayac değeri test edilmekte ve bu sayaç sıfır olana kadar ana programın içinde aynı test işlemine devam edilmektedir. Sayacın değeri 3. düzeye ait olan kesme hizmet programında (Kesme3) bir azaltılmaktadır. Sayacın başlangıç değeri örnekte 5 olarak verilmiştir. Buna göre 3. düzeyden 5 kere kesme geldiğinde ana program sonlanacaktır. Kesme hizmet programları (Kesme1 ve Kesme3) ekrana KESME 1 ve KESME 3 (hangisi çağrıldıysa) mesajlarını yazmaktadır. Ayrıca Kesme3  programı yukarıda da belirtilidiği gibi sayacı 1 azaltmaktadır. Mikroişlemcinin IPL0, IPL1, IPL2 hatlarından gelen kesme isteğinin mikroişlemci tarafından kabul edilme­si için durum saklayıcısı (status register) SR’de bulunan kesme maskesinde uygun değerin bulunması gerekir. Kesme maskesi SR’nin 8., 9. ve 10. bitlerinde (I0,I1,I2) bulunur. Bura­ya yazılan değer kabul edilecek olan kesme düzeylerini belirler. Örneğin maskeye 2 yazılırsa sadece 3 ve daha yüksek düzeyden gelen istekler kabul edilir. Simulatör programı çalıştığında maskelerde sıfır değeri bulunduğundan tüm düzeylerden gelen kesme istekleri kabul edilir.

Simülatör programında dış donanımdan gelen kesme isteklerini simule etmek için

INT no ALARM ^süre ifadesi kullanılır. Bunun anlamı, no ile belirtilen düzeyden süre ile belirtilen aralıklarla kesme isteği gelecektir. Süre 1/100 saniye cinsindendir. INT ifadesi ile ilgili daha fazla bilgi almak için simulatörde HELP INT yazınız.

Buna göre Örnek 3’teki programı derleyip simülatöre yükledikten sonra

INT 1 ALARM ^200

INT 3 ALARM ^500

GO

yazılırsa her 2 saniyede 1. düzeyden, her 5 saniyede 3. düzeyden kesme isteği gelecektir.

opt     cre

org     $400                Ana program

start  lea     stack,a7

adda.l  #60,a7              30 Word = 60 Byte

move.l  #Kesme1,($64)       1. düzey kesme vektörü

move.l  #Kesme3,($6C)       3. düzey kesme vektörü

test   tst.b   sayac               Sayaç sıfır mı?

bne     test                Değilse devam.

stop    #$2000

 

Kesme1 movem.l d0-d1/a1,-(a7)      1. Kesme Hizmet programı

move.b  #0,d0

lea     k1,a1               Mesajın adresi

move.b  #7,d1               uzunluk

trap    #15

movem.l (a7)+,d0-d1/a1      Saklayıcıları yığından geri al

rte                         Geri dön

Kesme3 movem.l d0-d1/a1,-(a7)      3. Düzey Kesme Hizmet programı

move.b  #0,d0

lea     k3,a1               Mesajın adresi

move.b  #7,d1               uzunluk

trap    #15

subq.b  #1,sayac            Sayac 1 azaltıldı

movem.l (a7)+,d0-d1/a1      Saklayıcıları yığından geri al

rte                         Geri dön

 

k1     dc.b   ‘KESME 1’

k3     dc.b   ‘KESME 3’

sayac  dc.b   5

stack  ds.w   30                   Yığın için 30 sözcüklük(word) yer

end    start

Please follow and like us:
0

Bir yorum

  • Lear

    Asus N55 woaw dedirtmedi bana, aslında henrahgi bir xtreme yanınıda gf6remedim. Bence Asus fcstfcne basa basa bu bir multimedya laptopu demektense, ofis ortamında kullanılabilinir, hem iş hem de film izleyip mfczik dinlemek ie7in iyi bir model diyebilirdi. Fiyatının yfcksek olması bekleniyor şayet olursa bfcyfck handicaplar yaratıcaktır. Ayrıca Levent Bey disk kapasitesini belirtirken dili sfcrtmfcş sanırım 640 kb olarak iletti bize Kulaklık ise film haricinde oyun ve mfczik dinlemek ie7in gfczel bir kulaklık, ayrıca modfcler kablo sistemi e7ok iyi dfcşfcnfclmfcş, bu sayede 2 ucu stereo 3,5mm jack ile mp3 ve mobil cihazlar ile kullanılabilinir. Kontrol dfcğmeleri ve dış mekanda işinize yaramayacak olan kulaklık kablosunun dağınıklığı ortadan kalkmış olur. Ses değerleri ve ağırlığı hakkında bildi olsaydı inceleme, unboxing incelemeden biraz uzaklaşırdı.Ayrıca Murat Bey’in f6nfcndeki teknoseyir kupasının ie7indeki siyah nesne nedir?

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir