Bölüm 5: Kesmeler

Bölüm 5: Kesmeler · Çalışma Soruları
Yoklama ve kesmeKesme türleriVektör tablosuINT ve IRETYığınAlt fonksiyonlarINT 10hINT 16hINT 21hİkili yazdırmaINTR ve NMI
Sercan KÜLCÜ

Ç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 · Yazılım Kesmeleri

Soru 9: Alt Fonksiyon

INT 21h çağrılınca hangi DOS hizmetinin (karakter yaz, dizgi yaz, çık …) çalışacağını ne belirler?

D: Alt fonksiyon kesmeden önce AH'ye yazılır: 02h karakter yaz, 09h dizgi yaz, 4Ch çık. AL, DL, DS:DX gibi diğer yazmaçlar parametre taşır ya da sonuç döndürür. AH 8 bit olduğundan bir kesmenin en çok 256 alt fonksiyonu olabilir.

Çoktan Seçmeli · INT 10h: Ekran

Soru 10: İmleci Konumlandırma

İmleci 5. satır, 20. sütuna (0'dan sayılarak) taşımak için INT 10h'den önce hangi yazmaç değerleri kurulur?

C: INT 10h / AH = 02h imleci konumlandırır: BH = sayfa, DH = satır, DL = sütun. 0Eh teletype karakter yazar; 00h video modu seçer (ekranı temizler); 09h karakteri renkle yazar. D satır ve sütunu ters verir.

Adım Adım Çalıştırma · Örnek Program

Soru 11: TEST ve SHL ile İkili Yazdırma

BL = B5h. Program her turda BL'nin en anlamlı bitini test edip '0' ya da '1' yazıyor. Ekran çıktısı nedir?

BL10110101B5hCX = 8 CF = 0ekran:

BL = B5h = 1011 0101b. CX = 8: her bit için bir tur.

BL011010106AhCX = 7 CF = 1ekran:1

Tur 1: TEST bit 7 = 1 → ZF = 0, JZ atlamaz, DL = '1'. INT 21h '1' yazar; SHL çıkan biti CF'ye (1) atar. LOOP: CX = 7 ≠ 0 → print'e dön.

BL11010100D4hCX = 6 CF = 0ekran:10

Tur 2: TEST bit 7 = 0 → ZF = 1, JZ atlar, DL '0' kalır. INT 21h '0' yazar; SHL çıkan biti CF'ye (0) atar. LOOP: CX = 6 ≠ 0 → print'e dön.

BL10101000A8hCX = 5 CF = 1ekran:101

Tur 3: TEST bit 7 = 1 → ZF = 0, JZ atlamaz, DL = '1'. INT 21h '1' yazar; SHL çıkan biti CF'ye (1) atar. LOOP: CX = 5 ≠ 0 → print'e dön.

BL0101000050hCX = 4 CF = 1ekran:1011

Tur 4: TEST bit 7 = 1 → ZF = 0, JZ atlamaz, DL = '1'. INT 21h '1' yazar; SHL çıkan biti CF'ye (1) atar. LOOP: CX = 4 ≠ 0 → print'e dön.

BL10100000A0hCX = 3 CF = 0ekran:10110

Tur 5: TEST bit 7 = 0 → ZF = 1, JZ atlar, DL '0' kalır. INT 21h '0' yazar; SHL çıkan biti CF'ye (0) atar. LOOP: CX = 3 ≠ 0 → print'e dön.

BL0100000040hCX = 2 CF = 1ekran:101101

Tur 6: TEST bit 7 = 1 → ZF = 0, JZ atlamaz, DL = '1'. INT 21h '1' yazar; SHL çıkan biti CF'ye (1) atar. LOOP: CX = 2 ≠ 0 → print'e dön.

BL1000000080hCX = 1 CF = 0ekran:1011010

Tur 7: TEST bit 7 = 0 → ZF = 1, JZ atlar, DL '0' kalır. INT 21h '0' yazar; SHL çıkan biti CF'ye (0) atar. LOOP: CX = 1 ≠ 0 → print'e dön.

BL0000000000hCX = 0 CF = 1ekran:10110101

Tur 8: TEST bit 7 = 1 → ZF = 0, JZ atlamaz, DL = '1'. INT 21h '1' yazar; SHL çıkan biti CF'ye (1) atar. LOOP: CX = 0 → döngü biter.

BL0000000000hCX = 0 CF = 1ekran:10110101b

Sona 'b' eki yazılır: ekranda 10110101b. TEST BL'yi bozmaz; bitleri bilerek kaydıran SHL'dir. INT 21h/02h AL'yi değiştirir (AL = DL).

org 100h
mov bl, 0B5h
mov cx, 8
print:
mov ah, 2
mov dl, '0'
test bl, 10000000b
jz zero
mov dl, '1'
zero:
int 21h
shl bl, 1
loop print
mov dl, 'b'
int 21h
ret

Adım Adım Çalıştırma · INT 16h: Klavye

Soru 12: Tuşu Oku ve Büyük Harf Yaz

Program çalışırken kullanıcı k tuşuna basıyor. Ekrana ne yazılır?

AL00DL00

AH = 00h: “tuş bekle ve oku” alt fonksiyonu.

AL6BDL00

INT 16h, kullanıcı tuşa basana kadar bekler. k tuşuna basıldı: AL = 6Bh (ASCII), AH = tarama kodu. Ekrana bir şey yazılmaz (yankı yok).

AL4BDL00

AL = 6Bh − 20h = 4Bh = 'K': ASCII'de küçük ve büyük harf 20h farklıdır.

AL4BDL00

AH = 0Eh: teletype. AL zaten 'K'.

AL4BDL00

INT 10h ekrana K yazar, imleç ilerler.

AL4BDL00

AH = 02h: DOS karakter yaz.

AL4BDL4B

DL ← AL = 4Bh: INT 21h/02h karakteri DL'de bekler.

AL4BDL4B

INT 21h ikinci K'yı yazar. Ekranda KK.

org 100h
mov ah, 0
int 16h          ; tuş bekle
sub al, 20h
mov ah, 0Eh
int 10h
mov ah, 2
mov dl, al
int 21h
ret

Çoktan Seçmeli · INT 21h: DOS

Soru 13: AL Ne Oldu?

Program ekrana ne yazar?

org 100h
mov al, 'X'
mov ah, 2
mov dl, 'A'
int 21h
mov dl, al
int 21h
ret

A: INT 21h / AH = 02h, DL'deki karakteri yazar ve dönüşte AL = DL yapar. İlk çağrıdan sonra AL = 'A' olur; 'X' kaybolur. İkinci çağrı da 'A' yazar. AL'de saklanan bir değer varsa çağrıdan önce korunmalıdır.

Kod Yazma · INT 21h: DOS

Soru 14: Dizgi, Tuş ve Çıkış

Ekrana INT 21h/09h ile Tamam yazan, bir tuşa basılmasını bekleyen ve INT 21h/4Ch ile dönüş kodu 0 vererek biten .COM programını yazın.

Cevabı göster
org 100h
mov ah, 9
lea dx, msg
int 21h          ; dizgi yaz
mov ah, 0
int 16h          ; tuş bekle
mov ah, 4Ch
mov al, 0
int 21h          ; programı bitir
msg db 'Tamam$'

09h, DS:DX'teki dizgiyi '$' görene kadar yazar; '$' unutulursa ardındaki baytlar da yazılır. .COM'da DS hazırdır. 4Ch programı AL'deki dönüş koduyla bitirir; veri RET/çıkıştan sonra durduğu için yürütülmez.

Çoktan Seçmeli · Donanım Kesmeleri

Soru 15: 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 16: 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.

Son

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