9 Ağustos 2010 Pazartesi

Assembly Bölüm 4

Bölüm 4 : Kesme (Interrupt) Kullanımı
Normal olarak işlemci, kod segment içerisindeki komutları sırası ile işletir. Bazı durumlarda
bilgisayara ait çevre aygıtlar ile işlem yapmak üzere, RAM veya BIOS üzerindeki belirli
rutinleri kullanmak üzere yada bazı geçersiz sonuçların oluşması durumunda işlemci tarafından
kesme (interrupt) adı verilen rutinler çalıştırılır.
Benim burada kısaca değineceğim RAM yada BIOS üzerinde tanımlı alt rutinlerin programlar
tarafından çağırılması ile oluşan kesmelerdir. Bu alt rutinler bir çok işi programcının yerine
yapmaktadır. Bu alt rutinleri yüksek seviyeli dillerdeki hazır kütüphane fonksiyonları ile
eşleştirmek yanlış olmaz.
Kullanılabilecek her kesmenin önceden tanımlı bir numarası vardır. Kesmenin kullanımı bu
numaranın “INT” komutuna parametre olarak aktarılması ve gerekli register’lara değerlerin
atanması ile gerçekleştirilir. Örnek olarak DOS altında çok sık kullanılan INT 21 verilebilir.
Bir DOS kesmesi olan INT 21’in AH = 01 numaralı fonksiyonunu kullanalım.
41
İşlem için AH register’ının değeri 01h olmalı ve ardından “INT 21” komutu ile kesme
çağırılmalıdır. INT 21 komutu ile kesme çağırıldığı zaman AH içerisindeki değere bakılır. AH
içerisinde bulunan değere göre çalıştırılacak alt rutin belleğe yüklenir.
C:\WINDOWS\Desktop>debug
-a 100
1E27:0100 mov ah,01
1E27:0102 int 21
1E27:0104 cmp al,41
1E27:0106 jnz 100
1E27:0108 mov ah,4c
1E27:010A int 21
1E27:010C
-g
ssdfaA
C:\WINDOWS\Desktop>
Yukarıdaki program AH içerisine 01h değerini atadıktan sonra INT 21 komutu ile gerekli
komutları belleğe yüklüyor. Program klavyeden girilen tuşları okur, okunan her tuş değerinin
ASCII kodu AL içerisine yazılır (INT 21 AH=01h gereği). CMP komutu ile okunan tuşun
değeri 41h (A) olana kadar programın çalıştırmasını sağlıyoruz. Daha sonra yeni bir INT 21 alt
rutini ile karşılaşıyoruz. AH = 4Ch alt rutini çalıştırılmakta olan programdan çıkıp kontrolü
tekrar DOS işletim sistemine bırakmaktadır.
Aynı şekilde, UNIX ve benzeri işletim sistemlerinde de sistem çağrıları (system calls) denen
alt rutinler INT 80 ile belleğe yüklenip icraları gerçekleştirilmektedir.
Bu dokümanda sekmelerin fonksiyonları tek tek ele alınmayacaktır. Konu hakkında
edinilebilecek en ayrıntılı kaynak “Ralf Brown’s Interrupt List” adlı dokümandır.
Dokümanların yanında “RBILViewer” adlı yardımcı program da size uzun kesme listelerini
düzenli bir şekilde görüntüleme olanağı sağlayacaktır.

Hiç yorum yok:

Yorum Gönder