Bölüm 5: 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 · 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?
BL = B5h = 1011 0101b. CX = 8: her bit için bir tur.
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.
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.
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.
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.
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.
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.
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.
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.
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?
AH = 00h: “tuş bekle ve oku” alt fonksiyonu.
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).
AL = 6Bh − 20h = 4Bh = 'K': ASCII'de küçük ve büyük harf 20h farklıdır.
AH = 0Eh: teletype. AL zaten 'K'.
INT 10h ekrana K yazar, imleç ilerler.
AH = 02h: DOS karakter yaz.
DL ← AL = 4Bh: INT 21h/02h karakteri DL'de bekler.
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
IRETile döner. - d) INT 09h tuşu klavye tamponuna koyar; INT 16h bu tampondan okur.