180 likes | 546 Views
Mikroişlemciler. Kesmeler (Interrupts). İçerik. Kesmeler. Örnek. Bir odada bulunan bir kişi düşünün. Örneğin ders notu hazırlayan bir öğretim üyesi olsun. Bu kişi, çalışırken kesmelere maruz kalabilir:
E N D
Mikroişlemciler Kesmeler (Interrupts)
İçerik • Kesmeler
Örnek • Bir odada bulunan bir kişi düşünün. Örneğin ders notu hazırlayan bir öğretim üyesi olsun. Bu kişi, çalışırken kesmelere maruz kalabilir: • Kesmelere maruz kaldığında, işi gerçekleştirecek, sonra kaldığı yerden ders notu hazırlamaya devam edecektir. • Bazı kesmeleri ihmal etmeyi veya ertelemeyi seçebilir. • Örneğin, bir yazılım için gelen öğrencilere sonra gelmelerini söyleyebilir. • Telefon çalabilir. Eğer çok meşgul ise, cevap vermeyebilir. • Bazı kesmelere mutlaka cevap verilmelidir. Yangın alarmı gibi. • Kesmelere, akıllı bir cevap mekanizması uygulanmalıdır.
Örnek: Otobüs sürücüsü • Otobüs sürücüsü, normal olarak otobüsü sürmektedir. Eğer, bir yolcu tarafından durma tuşuna basıldığında sürücü, • Bir sonraki durağa doğru yaklaş ve dur • Kapıyı aç • Yolcuların çıkması için bekle • Kapıyı kapat • Devam et • Sürücü, kesme geldiğinde, önceden belirlenmiş bir dizi işlemi gerçekleştirecektir. • İşlemci mimarisinin önemli bir bölümü, kesmelerin karşılanması içindir.
8086’daki kesmeler • 8086’da bir kesme, intr pin’i 0’dan 1’e geçtiğinde gerçekleşir. • Bu kesme, CLIkomutu kullanılarak Interrupt Flagkesme bayrağının temizlenmesi ile kullanım dışı bırakılır. • Kesmeler, STIkomutu kullanılarak tekrar kullanım içine alınır. • Ayrıca, gerçek acil durumlar için NMI (Non Maskable Interrupt) de bulunur. • Kesmeler, genellikle I/O aygıtları tarafından başlatılırlar.
8086’daki kesmeler • Bir kesme oluştuğu zaman, mikroişlemci: • Kesmenin durumu stack’e atılır. • Kesmenin gerektirdiği fonksiyon olan ISR (Interrupt Service Routine) gerçekleştirilir. • Kesmeden önceki durum stack’ten IRETkomutu ile geri yüklenir. • ISR, özel bir fonksiyon çeşididir.
8086’daki kesmeler • Kesme oluştuğu zaman, CPU, mevcut komutu tamamladıktan sonra: • Maskelenebilir Kesmeleri, CLI komutu ile devre dışı bırakır. Bu sayede, kesmede iken kesmeye maruz kalınmasına engel olunur. Programcı, ISR içerisinde STI komutunu çağırarak, bu özelliği kaldırabilir. • IP, CS register’ları ile bayrak register’ı, stack’te saklanır. • N, kesme sayısı olmak üzere 4*N hafıza adresine atlama yapılır. • Bu adreste bulunan ISR çalıştırılır. • ISR’nin sonunda, IRET komutu kullanılarak IP, CS ve bayrak register’larının ilk durumları geri çağrılır.
Kesme Atlama Tablosu • 20 bitlik 8086 hafıza haritasının en altında Kesme Atlama Tablosu bulunur. ISR’nin bulunduğu yerin tam adresi
Emülatördeki kesmeler • Kesmeler, fonksiyon olarak görülebilir. • Bu fonksiyonlar, programlamayı kolaylaştırır. Bir karakteri yazan bir kod yazmaktansa, ilgili kesme kullanılabilir.
INT Komutu • Kodun içerisinde Kesme yapmak için INT komutu kullanılır. Basit bir yapısı vardır: INT deger • Deger: 0-255 arası (0-0FFh) bir sayıdır. Genellik ile heksadesimal sayılar kullanılır.
Alt fonksiyonlar • 256 tane fonksiyondan fazla fonksiyon kullanılabilir. Her kesmenin alt fonksiyonları olabilir. • Alt fonksiyon tanımlamak için AH register’ına, kesme yapmadan önce bir değer atanır. • Her kesmenin 256 tane alt fonksiyonu olabilir. Yani 256*256 = 65536 fonksiyon gerçeklenebilir. • Genellikle AH register’ı kullanılır. Genellikle, diğer register’lar, alt fonksiyonlara parametre veya veri göndermek için kullanılır. Ancak bazı özel durumlarda, alt fonksiyon tanımlamak için diğer register’lar da kullanılabilir.
INT 10h • INT 10h kesmesi: 0Eh alt fonksiyonu, ekrana tek bir karakter yazdırmak için kullanılır. • Ekrana yazılacak olan karakter AL register’ında bulunur. • AH register’ındaki değer değişmez. • EMU8086 Emülatörü üzerindeki kodlar hakkında bilgi verdiğimizi unutmayın. Farklı laboratuvar kitlerinde, farklı tanımlamalar yapılmış olabilir.
Örnek: Hello World ORG 100h MOV AH, 0Eh ; alt fonksiyon seç. MOV AL, 'H' INT 10h ; Harfi yazdır! MOV AL, 'e' INT 10h ; Harfi yazdır! MOV AL, 'l' INT 10h ; Harfi yazdır! MOV AL, 'l' INT 10h ; Harfi yazdır! MOV AL, 'o' INT 10h ; Harfi yazdır! MOV AL, '!' INT 10h ; Harfi yazdır! RET
İmleç pozisyonunu değiştirmek • INT 10h / AH = 02h • Girdiler: • DH = satır • DL = sütun • BH = sayfa sayısı (0..7) • Örnek: mov dh, 10 mov dl, 20 movbh, 0 mov ah, 2 int 10h
Karakter ve özellik okuma • INT 10h / AH = 08h - imleç pozisyonundaki karakteri ve özelliği okuma. • Girdi: • BH = Sayfa sayısı. • Dönüt: • AH = özellik. • AL = karakter.
Karakter ve özellik yazma • INT 10h / AH = 09h - İmleç pozisyonuna karakter ve özellik yazmak. • Girdi: • AL = Yazılacak karakter. • BH = Sayfa sayısı. • BL = özellik. • CX = Karakterin kaç defa yazılacağı.
Özellikler • Karakter özellikleri 8 bitlik değerlerdir. Düşük olan 4 karakterde yazı rengi, yüksek olan 4 bitte ise arka plan rengi tanımlıdır.
Karakter yazma • INT 10h / AH = 0Ah - Sadece imleç pozisyonuna karakter yazmak. • Girdi: • AL = Yazılacak karakter. • BH = Sayfa sayısı. • CX = Karakterin kaç defa yazılacağı.