Bölüm 5.1: Kesmeler

Bölüm 5.1: Kesmeler · Çalışma Soruları
Yoklama ve kesmeKesme türleriVektör tablosuINT ve IRETYığınİstisnalarINTR ve NMI8259A ve IMRKesme gecikmesi
Sercan KÜLCÜ · Giresun Üniversitesi · Bilgisayar Mühendisliği

Ç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 n komutu (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?

SPFFFEIP0103yığın (SS = 0700h)IF = 1FFF80000FFFA0000FFFC0000FFFE0000▲ SP

AX = 0. Kesim yazmacına sabit yazılamadığı için ES, AX üzerinden 0 yapılır.

SPFFFEIP0105yığın (SS = 0700h)IF = 1FFF80000FFFA0000FFFC0000FFFE0000▲ SP

ES = 0000h: vektör tablosu 0000 kesimindedir.

SPFFFEIP0106yığın (SS = 0700h)IF = 0FFF80000FFFA0000FFFC0000FFFE0000▲ SP

CLI: IF = 0. Vektör yarım yazılmışken bir donanım kesmesi gelmemelidir.

SPFFFEIP010Dyığın (SS = 0700h)IF = 0FFF80000FFFA0000FFFC0000FFFE0000▲ SP

Tip 90h'nin vektörü 90h × 4 = 0240h'tedir; IP olarak isr'nin bağıl konumu (0116h) yazılır.

SPFFFEIP0112yığın (SS = 0700h)IF = 0FFF80000FFFA0000FFFC0000FFFE0000▲ SP

0242h'ye CS (0700h) yazılır. Vektör artık 0700:0116'yı gösterir.

SPFFFEIP0113yığın (SS = 0700h)IF = 1FFF80000FFFA0000FFFC0000FFFE0000▲ SP

STI: IF = 1, kesmelere yeniden izin verildi.

SPFFF8IP0116yığın (SS = 0700h)IF = 0FFF80115FFFA0700FFFCF202FFFE0000▲ SP

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.

SPFFF8IP0118yığın (SS = 0700h)IF = 0FFF80115FFFA0700FFFCF202FFFE0000▲ SP

ISR içinde: AH = 0Eh (teletype).

SPFFF8IP011Ayığın (SS = 0700h)IF = 0FFF80115FFFA0700FFFCF202FFFE0000▲ SP

AL = '*'.

SPFFF8IP011Cyığın (SS = 0700h)IF = 0FFF80115FFFA0700FFFCF202FFFE0000▲ SP

INT 10h ekrana * yazar (BIOS yığını kendisi kullanıp geri bırakır).

SPFFFEIP0115yığın (SS = 0700h)IF = 1FFF80115FFFA0700FFFCF202FFFE0000▲ SP

IRET: IP ← 0115h, CS ← 0700h, FLAGS ← F202h (IF yeniden 1) → SP = FFFEh. Yığındaki değerler silinmez, yalnızca SP geri çekilir.

SP0000IP0000yığın (SS = 0700h)IF = 1FFF80115FFFA0700FFFCF202FFFE0000

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. IRET yığı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 03h iki 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 IRET ile 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çin IN 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.

Son

Bölüm 5.1: Kesmeler: Çalışma Soruları
Konu anlatımı: Kesmeler sunumu · Terim sözlüğü
1 / 1 Sercan KÜLCÜ, Tüm hakları saklıdır.