Bölüm 5.1: Kesmeler
Çoktan Seçmeli · Kesme Kavramı
Soru 1: Yoklama mı, Kesme mi?
Klavye gibi seyrek veri gönderen bir aygıt için kesmenin yoklamaya (polling) göre üstünlüğü nedir?
B: Kesmede CPU kendi işine devam eder; aygıt bir sinyalle haber verince ISR çalışır, IRET ile kaldığı komuttan dönülür. A ve C yoklamanın özellikleridir (ek donanım gerekmez, olay geç algılanır). Program baştan başlamaz, kaldığı yerden sürer.
Kısa Cevap · Kesme Kavramı
Soru 2: Kesme Nedir?
Kesme (interrupt) nedir? ISR bitince ne olur? 8086'daki üç kesme kaynağına birer örnek verin.
Cevabı göster
Kesme, işlemcinin yürüttüğü programı geçici olarak bırakıp bir olaya hizmet eden özel bir yordamı, kesme hizmet yordamını (ISR), çalıştırmasıdır. ISR IRET ile bitince program kaldığı komuttan devam eder.
- Donanım: INTR (maskelenebilir; klavye, zamanlayıcı) ve NMI (maskelenemez; bellek eşlik hatası, güç kaybı) pinleri
- Yazılım:
INT nkomutu (INT 10h, INT 21h), INT 3 kesme noktası, INTO - İç (istisna): sıfıra bölme / bölüm taşması → INT 0, TF = 1 iken tek adım → INT 1
Çoktan Seçmeli · Kesme Kavramı
Soru 3: Kesme Türü
BL = 0 iken DIV BL çalışınca işlemci hangi kesmeyi üretir?
A: Sıfıra bölme (ya da bölümün hedefe sığmaması) işlemcinin kendi ürettiği tip 0 kesmesidir. INT 2 NMI pinine, INT 4 OF = 1 iken INTO'ya aittir; INT 21h DOS hizmetlerini programın kendisi çağırır.
Çoktan Seçmeli · Kesme Vektör Tablosu
Soru 4: Vektör Adresi
INT 21h'nin kesme vektörü bellekte hangi fiziksel adreste başlar?
D: Kesme vektör tablosu 00000h–003FFh'dedir: 256 vektör × 4 bayt = 1 KB. Her vektör 4 bayttır (önce IP, sonra CS) → adres n × 4 = 21h × 4 = 84h. 00042h n × 2 almaktır; 00021h n'nin kendisidir.
Hesap Sorusu · Kesme Vektör Tablosu
Soru 5: Tablodan Adrese
Bellekte 0000:004Ch adresinden başlayarak 59 EC 00 F0 baytları var. a) Bu hangi kesmenin vektörüdür? b) ISR'nin CS:IP değeri ve fiziksel adresi nedir? c) Tip 09h'nin vektörü hangi adreslerdedir?
Cevabı göster
- a) n × 4 = 4Ch → n = 13h: INT 13h (BIOS disk hizmeti)
- b) Düşük sözcük IP, yüksek sözcük CS; ikisi de little-endian: IP = EC59h, CS = F000h → F0000h + EC59h = FEC59h
- c) 09h × 4 = 24h → IP: 00024h–00025h, CS: 00026h–00027h
Çoktan Seçmeli · INT ve IRET
Soru 6: INT n Sırası
INT n yürütülürken işlemcinin yaptıkları doğru sırayla hangisidir?
B: Önce bayraklar saklanır, sonra IF ve TF sıfırlanır (ISR başka INTR ile kesilmesin, tek adım çalışmasın); dönüş adresi için CS ve IP itilir; en son vektör tablosundan yeni CS:IP yüklenir. Vektör önce yüklenirse dönüş adresi kaybolur (C). IRET tersini yapar: IP, CS ve FLAGS geri alınır.
Adım Adım Çalıştırma · INT ve IRET
Soru 7: Kendi Kesme Yordamımız
INT 90h ve IRET sırasında SP, IP, IF ve yığın nasıl değişir? Ekrana ne yazılır?
AX = 0. Kesim yazmacına sabit yazılamadığı için ES, AX üzerinden 0 yapılır.
ES = 0000h: vektör tablosu 0000 kesimindedir.
CLI: IF = 0. Vektör yarım yazılmışken bir donanım kesmesi gelmemelidir.
Tip 90h'nin vektörü 90h × 4 = 0240h'tedir; IP olarak isr'nin bağıl konumu (0116h) yazılır.
0242h'ye CS (0700h) yazılır. Vektör artık 0700:0116'yı gösterir.
STI: IF = 1, kesmelere yeniden izin verildi.
INT 90h: FLAGS (F202h; 8086'da üst 4 bit hep 1), CS ve dönüş IP'si (0115h) itilir → SP = FFF8h; IF = 0. CS:IP ← 0700:0116.
ISR içinde: AH = 0Eh (teletype).
AL = '*'.
INT 10h ekrana * yazar (BIOS yığını kendisi kullanıp geri bırakır).
IRET: IP ← 0115h, CS ← 0700h, FLAGS ← F202h (IF yeniden 1) → SP = FFFEh. Yığındaki değerler silinmez, yalnızca SP geri çekilir.
Program INT 90h'den sonraki RET ile devam eder ve DOS'a döner.
org 100h mov ax, 0 mov es, ax cli mov word ptr es:[90h*4], offset isr mov word ptr es:[90h*4+2], cs sti int 90h ret isr: mov ah, 0Eh mov al, '*' int 10h iret
Kısa Cevap · INT ve IRET
Soru 8: INT 21h Çalışınca
SP = FFFEh iken INT 21h çalışıyor. a) Vektör hangi adreslerden okunur? b) Yığına ne itilir, ISR içinde SP kaçtır? c) ISR hangi komutla döner; RET ile dönerse ne olur?
Cevabı göster
- a) 21h × 4 = 84h → IP ← [0000:0084h], CS ← [0000:0086h]
- b) Sırayla FLAGS, CS, IP itilir (6 bayt) → SP = FFF8h: [FFF8h] = dönüş IP'si, [FFFAh] = CS, [FFFCh] = FLAGS. Ardından IF = TF = 0.
- c)
IRET: IP, CS ve FLAGS'ı geri alır. Yakın RET yalnız IP'yi alır: CS ve FLAGS yığında kalır, SP 4 bayt kayar, IF = 0 olarak kalır ve sonraki dönüşler yanlış adresi alır.
Çoktan Seçmeli · INT ve IRET
Soru 9: INTO ile Taşma
AL = 70h, BL = 30h iken ADD AL, BL ve ardından INTO çalışıyor. Ne olur?
A: 70h + 30h = A0h. İşaretli yorumda 112 + 48 = 160 > 127 → OF = 1; işaretsiz 160 ≤ 255 olduğu için CF = 0. INTO yalnız OF'ye bakar: OF = 1 ise INT 4'ü çağırır, OF = 0 ise hiçbir şey yapmaz. AL'deki A0h değişmez; düzeltme INT 4 yordamının işidir.
Kısa Cevap · INT ve IRET
Soru 10: Tek Adım ve Kesme Noktası
a) TF'yi 1 yapan komut dizisi nedir? b) INT 1 yordamının kendi komutları neden tek adım kesmesi üretmez? c) Hata ayıklayıcı kesme noktası için neden INT 3'ün tek baytlık kodlamasını (CCh) kullanır?
Cevabı göster
- a) TF'yi doğrudan değiştiren komut yoktur; FLAGS yığın üzerinden düzenlenir:
PUSHF·POP AX·OR AH, 01h(bit 8) ·PUSH AX·POPF. - b) INT, FLAGS'ı yığına ittikten sonra TF = 0 yapar; yordam tek adımsız çalışır.
IRETyığındaki TF = 1'i geri yükler ve izleme sürer. - c) Tek bayt, en kısa komutun ilk baytının yerine bile sığar.
INT 03hiki baytlık CD 03 olurdu ve tek baytlık bir komutta sonraki komutu bozardı.
Çoktan Seçmeli · Donanım Kesmeleri
Soru 11: NMI
8086'nın NMI girişi için hangisi yanlıştır?
C: NMI maskelenemez (IF'ye bakılmaz), yükselen kenarla tetiklenir ve sabit olarak tip 2'dir: vektörü 00008h'dedir, INTA döngüsü gerekmez. Tip numarasını iki INTA darbesiyle veri yolundan okuyan INTR'dir (8259A tip numarasını D0–D7'ye koyar). 8085'te NMI'ın karşılığı TRAP'tir.
Kısa Cevap · Donanım Kesmeleri
Soru 12: INTR Kabul Süreci
Klavyeye basıldı: IRQ1 etkin, 8259A INTR'yi 1 yaptı. a) IF = 0 ise ne olur? b) IF = 1 ise işlemci tip numarasını nasıl öğrenir; PC'de bu tip ve vektör adresi nedir? c) ISR sonunda ne yapılır? d) Programın çağırdığı INT 16h ile ilişkisi nedir?
Cevabı göster
- a) İstek bekletilir; IF = 1 olunca (STI) kabul edilir. 8086 kesmeyi zaten yürüttüğü komut bitince kabul eder.
- b) İki INTA darbesi üretilir; ikincisinde 8259A tip numarasını veri yoluna koyar: klavye 09h → vektör 09h × 4 = 00024h. Sonrası INT n ile aynıdır: FLAGS, CS, IP yığına; IF = TF = 0.
- c) ISR 8259A'ya EOI (kesme sonu) gönderir ve
IRETile döner. - d) INT 09h tuşu klavye tamponuna koyar; INT 16h bu tampondan okur.
Hesap Sorusu · Donanım Kesmeleri
Soru 13: IMR ile Maskeleme
IMR (port 21h) = B8h. a) Hangi IRQ'lar maskeli? b) IRQ6'yı (disket) maskeleyen ve sonra yeniden açan komutlar nelerdir, IMR hangi değerleri alır? c) Bu yöntemin CLI'dan farkı nedir?
Cevabı göster
- a) B8h = 1011 1000b → IRQ3, 4, 5 ve 7 maskeli.
- b) Oku–değiştir–yaz:
IN AL, 21h·OR AL, 40h·OUT 21h, AL→ IMR = F8h. Açmak içinIN AL, 21h·AND AL, 0BFh·OUT 21h, AL→ yeniden B8h. Diğer bitlere dokunulmaz. - c) CLI bütün INTR girişini kapatır (IF = 0). IMR yalnız seçilen aygıtı bekletir; gelen istek IRR'de kalır, hat açılınca hizmet görür.
Çoktan Seçmeli · Donanım Kesmeleri
Soru 14: Ertelenen Kesme
INTR = 1 ve IF = 1. Hangi komut bittiğinde kesme hemen kabul edilmez, bir sonraki komut da bitene kadar beklenir?
B: Kesim yazmacı (MOV SS, POP SS) yüklendikten sonra 8086 kesmeyi bir komut erteler; böylece ardından gelen MOV SP, … da tamamlanır. Aksi hâlde FLAGS, CS ve IP yeni SS ile eski SP'nin gösterdiği yanlış yere itilirdi. Diğer komutlarda kesme, komut biter bitmez kabul edilir.
Hesap Sorusu · Donanım Kesmeleri
Soru 15: Kesme Gecikmesi
5 MHz'lik bir 8086'da INTR geldiğinde 16 bitlik IDIV (en çok 184 tur) yeni başlamıştır. a) INTR kabulü 61 tur sürüyorsa en kötü gecikme kaç tur, kaç µs'dir? b) Program o sırada kesmeleri CLI ile 100 µs kapalı tutuyorsa gecikme ne olur?
Cevabı göster
- a) 184 + 61 = 245 tur; bir tur 1 / 5 MHz = 200 ns → 245 × 200 ns ≈ 49 µs.
- b) CLI ile kapalı geçen süre doğrudan eklenir: en kötü durumda ≈ 100 + 49 ≈ 149 µs. Bu yüzden CLI–STI arası kısa tutulur.