Bölüm 11: Kesme Fonksiyonları
Çoktan Seçmeli · Giriş
Soru 1: Neden INT n?
Programlar BIOS ve DOS hizmetlerine neden bir adresle CALL yerine INT n ile ulaşır?
B: Hizmetin gerçek adresi BIOS sürümüne ve yüklü DOS'a göre değişir; kesme vektör tablosu (0000:0000–03FFh) her numara için güncel adresi tutar. Program yalnızca numarayı bilir. INT, FLAGS'ı da yığına attığı için CALL'dan daha yavaştır; uzak adrese uzak CALL ile de gidilebilirdi.
Kısa Cevap · Giriş
Soru 2: BIOS ve DOS Hizmetleri
Aşağıdaki işler için hangi kesme ve hangi AH değeri kullanılır? Giriş ya da sonuç hangi yazmaçtadır?
- Klavyeden yankılı tek karakter oku
- DL'deki karakteri ekrana yaz
- $ ile biten dizgiyi yaz
- Programı sonlandır
- BIOS: teletype karakter yaz
- BIOS: tuşa basılmasını bekle
Cevabı göster
| İş | Kesme / AH | Giriş / sonuç |
|---|---|---|
| 1 | INT 21h / 01h | AL ← ASCII |
| 2 | INT 21h / 02h | DL = karakter |
| 3 | INT 21h / 09h | DS:DX = dizgi |
| 4 | INT 21h / 4Ch | AL = çıkış kodu |
| 5 | INT 10h / 0Eh | AL = karakter |
| 6 | INT 16h / 00h | AL ← ASCII, AH ← tarama kodu |
INT 10h BIOS ekran, INT 16h BIOS klavye, INT 21h DOS hizmetleridir.
Çoktan Seçmeli · Giriş
Soru 3: Vektörün Yeri
INT 16h yürütülürken işlemci yeni IP ve CS değerlerini hangi adreslerden okur?
C: Her vektör 4 bayttır: vektör adresi = 16h × 4 = 58h. Önce bağıl konum (IP, 0058h), sonra kesim (CS, 005Ah) saklanır. 0016h numarayı 4 ile çarpmayı unutur; 0040h vektörü onluk 16 × 4 ile hesaplar; son seçenek sırayı ters çevirir.
Hesap Sorusu · INT 10h Video
Soru 4: Öznitelik Baytı
Öznitelik = arka plan × 16 + ön plan; bit 7 yanıp sönme. Renkler: 0 siyah, 1 mavi, 2 yeşil, 4 kırmızı, 6 kahve, 7 açık gri, A açık yeşil, E sarı, F beyaz.
- Kahverengi zemin üzerine açık yeşil yazı?
- 1Fh nasıl görünür?
- CEh nasıl görünür?
- Açık yeşil (A) zemin neden doğrudan seçilemez?
Cevabı göster
- 6 × 16 + Ah = 6Ah.
- Mavi zemin, beyaz yazı.
- 1100 1110b: bit 7 = 1 → yanıp sönen, zemin 100b = kırmızı, yazı E = sarı.
- Arka plana yalnızca 3 bit (0–7) ayrılmıştır; A = 1010b yazılırsa en üst bit 7. bite düşer ve yanıp sönme açılır (BIOS ayarına göre parlak zemin olarak da gösterilebilir).
Hesap Sorusu · INT 10h Video
Soru 5: Ekran Belleğinde Adres
Mod 03h'te hücre (satır, sütun) için bağıl konum = (satır × 80 + sütun) × 2; mod 13h'te piksel (x, y) için y × 320 + x.
- Sağ alt köşe (24, 79) hücresinin karakter ve öznitelik baytları nerededir?
- (12, 40) hücresi?
- Mod 13h'te son piksel (319, 199)?
- 80 × 25 metin ekranı kaç bayt tutar?
Cevabı göster
- (1920 + 79) × 2 = 3998 = 0F9Eh → karakter B800:0F9Eh, öznitelik B800:0F9Fh.
- (960 + 40) × 2 = 2000 = 07D0h.
- 63 680 + 319 = 63 999 = A000:F9FFh, belleğin son baytı.
- 80 × 25 × 2 = 4000 bayt; mod 13h ise 320 × 200 = 64 000 bayt.
Karakter çift, öznitelik tek bağıl konumdadır; bir sözcük yazılırken düşük bayt (karakter) küçük adrese gider.
Adım Adım Çalıştırma · INT 10h Video
Soru 6: Teletype ve Kontrol Karakterleri
Ekran boş, imleç (0, 0)'da. INT 10h/0Eh ile sırayla A, B, BS, C, CR, D gönderiliyor. Ekranın ilk satırında ne görünür, imleç nerede kalır?
AH = 0Eh (teletype), AL = 'A'.
'A' imlecin bulunduğu sütun 0'a yazılır, imleç 1'e ilerler.
'B' sütun 1'e; imleç 2.
08h (BS) basılmaz, komut olarak yorumlanır: imleç bir geri, sütun 1. 'B' silinmez.
'C' sütun 1'e, 'B'nin üzerine yazılır: AC, imleç 2.
0Dh (CR): imleç satır başına (sütun 0) döner, satır değişmez.
'D', 'A'nın üzerine yazılır. Ekran: DC, imleç sütun 1. AH = 09h olsaydı 08h ve 0Dh sembol olarak basılırdı.
ORG 100h mov ah, 0Eh mov al, 'A' int 10h mov al, 'B' int 10h mov al, 08h ; BS int 10h mov al, 'C' int 10h mov al, 0Dh ; CR int 10h mov al, 'D' int 10h ret
Çoktan Seçmeli · INT 10h Video
Soru 7: 09h Sonrası İmleç
İmleç (3, 10)'dayken INT 10h, AH = 09h ile AL = '*', BL = 1Eh, CX = 5 yazıldı. İmleç şimdi nerededir?
A: AH = 09h karakteri öznitelikle CX kez yazar ama imleci ilerletmez: beş yıldız (3, 10)–(3, 14)'e yazılır, imleç yerinde kalır. Sonraki yazı ilk yıldızın üzerine gelir; imleç AH = 02h ile elle taşınır. 0Eh ise her karakterde imleci bir ilerletir.
Hata Bulma · INT 10h Video
Soru 8: Renkli Dizgi Çağrısı
Satır 10, sütun 16'ya mavi zemin üzerine sarı "Merhaba" yazılmak isteniyor. Koddaki hataları bulun ve düzeltin.
mov ah, 13h
mov al, 01h
mov bl, 1Eh
mov dx, 0A10h ; satır 10, sütun 16
mov dx, offset mesaj
int 10h
ret
mesaj db 'Merhaba$'Cevabı göster
- Dizginin adresi ES:BP'de beklenir, DS:DX'te değil:
lea bp, mesaj(.COM'da ES = DS). - İkinci
mov dxkonum bilgisini (DH = 10, DL = 16) ezmiştir; DX yalnızca konum için kullanılır. - Uzunluk CX'te verilmelidir:
mov cx, 7. AH = 13h '$' gibi bir bitiş işareti tanımaz; '$' sayılırsa o da basılır. - Sayfa BH ayarlanmamış:
mov bh, 0(ya damov bx, 001Eh).
mov ax, 1301h ; AH=13h, AL=01h mov bx, 001Eh ; BH=0, BL=1Eh mov cx, 7 mov dx, 0A10h lea bp, mesaj ; ES:BP int 10h
Çoktan Seçmeli · INT 16h Klavye
Soru 9: F1 Tuşu
INT 16h, AH = 00h çağrısı sırasında kullanıcı F1 tuşuna bastı. Dönüşte AH ve AL nedir?
D: AH tarama kodunu (tuşun fiziksel konumu), AL ASCII kodunu döndürür. F1'in ASCII karşılığı olmadığı için AL = 00h olur; tuş AH'deki 3Bh'den tanınır (F1 … F10 = 3Bh … 44h). Ok tuşları da AL = 00h döndürür.
Adım Adım Çalıştırma · INT 16h Klavye
Soru 10: Rakam Sayan Klavye Döngüsü
Kullanıcı sırayla a, 7, :, 3 ve Esc tuşlarına basıyor. Program bitince CX kaç olur?
CX = 0. XOR kendisiyle sıfırlar (ZF = 1).
'a' basıldı: AL = 61h. (Tarama kodu AH'ye yazılır; öykünücü 0 verir.)
Esc değil; CMP AL, '0': 61h ≥ 30h → CF = 0, JB atlamaz.
CMP AL, '9': 61h > 39h → CF = 0, ZF = 0 → JA atlar: rakam değil, sayılmaz.
'7' basıldı: AL = 37h.
37h − 39h ödünç ister: CF = 1 → JA atlamaz.
INC CX: CX = 1.
':' basıldı: AL = 3Ah, '9'dan hemen sonraki karakter.
3Ah > 39h → JA atlar; sınır doğru denetlendi.
'3': rakam, CX = 2.
Esc: AL = 1Bh.
CMP AL, 1Bh → ZF = 1, JE son: döngü biter. Sonuç CX = 2. INT 16h tuşları ekrana yansıtmaz.
ORG 100h xor cx, cx ; rakam sayacı oku: mov ah, 0 int 16h ; AL = ASCII cmp al, 1Bh ; Esc? je son cmp al, '0' jb oku cmp al, '9' ja oku inc cx jmp oku son: ret
Çıktı Sorusu · INT 21h DOS
Soru 11: INT 21h ile Ekrana Yazmak
Program çalışınca ekranda ne görünür? MESAJ'ın sonundaki $ neden gereklidir?
ORG 100h MOV DX, OFFSET MESAJ MOV AH, 09h INT 21h MOV DL, 'B' MOV AH, 02h INT 21h RET MESAJ DB 'Merhaba $'
Cevabı göster
Ekran: Merhaba B
AH = 09h, DS:DX'teki dizgiyi $ (24h) karakterine kadar yazar; $ yazılmaz, ondan önceki boşluk yazılır. $ unutulursa DOS bellekte ilk 24h baytına kadar ne bulursa yazar (ekranda çöp).
AH = 02h, DL'deki tek karakteri ('B' = 42h) yazar. DX'e OFFSET MESAJ (adres) yüklenmelidir, MESAJ'ın içeriği değil.
Adım Adım Çalıştırma · INT 21h DOS
Soru 12: Tamponlu Satır Girişi
Kullanıcı Mikro12 yazıp Enter'a basıyor. Tamponun baytları ne olur? Ekranda ne görünür?
DS:DX tampona: DX = 011Ah. Bayt 0 = 6: Enter dahil en çok 6 karakter.
Kullanıcı Mikro12⏎ yazdı. 5 karakterden sonra tampon dolar: '1' ve '2' kabul edilmez (zil). Bayt 1 = 5 (CR sayılmaz), metin +2'den başlar, sonuna 0Dh yazılır.
BL ← [tampon+1] = 5: okunan karakter sayısı.
BX = 0005h: adres hesabında kullanılacak.
[tampon + 5 + 2] = +7: 0Dh yerine '$' yazılır; metin artık 09h ile yazılabilir.
DX = tampon + 2: metnin başı.
Ekrana Mikro yazılır (Enter imleci satır başına almıştı). Tampona sığmayan "12" hiç okunmadı.
ORG 100h mov dx, offset tampon mov ah, 0Ah int 21h mov bl, tampon+1 mov bh, 0 mov tampon[bx+2], '$' mov dx, offset tampon+2 mov ah, 09h int 21h ret tampon db 6, ?, 6 dup(0)
Çoktan Seçmeli · INT 21h DOS
Soru 13: Dizgi Ortasında $
m db 'Fiyat: 5$ TL$' dizgisi DS:DX = m ile INT 21h, AH = 09h kullanılarak yazdırılıyor. Ekranda ne görünür?
C: Hizmet ilk $ (24h) karakterinde durur ve $'ı yazmaz; " TL$" kısmı hiç okunmaz. $ işaretini ekrana basmak için AH = 02h ve DL = 24h kullanılır ya da metin INT 10h/0Eh ile karakter karakter yazılır.
Çıktı Sorusu · INT 1Ah ve BIOS Verileri
Soru 14: BCD mi, İkili mi?
Saat 14:23. Dakika iki kaynaktan okunuyor ve yanlış yordamla yazdırılıyor. Ekranda ne görünür?
- INT 1Ah/02h'den gelen CL, AAM kullanan
yaz2yordamıyla (aam·add ax, 3030h· iki kez 02h) yazdırılıyor. - INT 21h/2Ch'den gelen CL, paketli BCD yazan yordamla (
shr dl, clile üst,and dl, 0Fhile alt basamak) yazdırılıyor.
Cevabı göster
- RTC paketli BCD verir: CL = 23h. AAM bunu ikili 35 sayar: AH = 3, AL = 5 → ekranda 35.
- DOS ikili verir: CL = 23 = 17h. BCD yordamı onaltılık basamakları ayırır → ekranda 17.
Doğrusu: RTC değeri SHR/AND ile, DOS değeri AAM (ya da 10'a bölme) ile yazdırılır. Her iki yordam da 0–9 arasındaki değerlerde aynı sonucu verdiği için hata ancak 10 ve üstünde görünür.
Çoktan Seçmeli · INT 1Ah ve BIOS Verileri
Soru 15: Tık Sayacıyla 10 Saniye
0040:006Ch'deki tık sayacı saniyede yaklaşık 18,2 kez artar. 10 saniyelik bekleme için başlangıç değerine kaç tık eklenmelidir?
A: 8253/8254 zamanlayıcısı 1 193 182 Hz'i 65 536'ya böler: 18,2065 Hz. 10 × 18,2065 ≈ 182 tık. Bir tık ≈ 54,9 ms olduğundan 549 tık yaklaşık 30 saniyedir; 18 tık yaklaşık 1 saniye.
Çoktan Seçmeli · INT 1Ah ve BIOS Verileri
Soru 16: Klavye Tamponunda Bekleyen Tuşlar
BIOS veri alanında 0040:001Ah (tampon başı) = 0024h ve 0040:001Ch (tampon sonu) = 0028h. Klavye tamponunda okunmayı bekleyen kaç tuş vardır?
B: Her tuş tamponda bir sözcük tutar (ASCII + tarama kodu): (0028h − 0024h) ÷ 2 = 2 tuş. Baş = son olsaydı tampon boştu. Tampon 16 sözcüklük dairesel bir alandır; en çok 15 tuş tutar. 0040:001Ah'nin fiziksel adresi 0041Ah'dir.
Çoktan Seçmeli · Program Sonlandırma
Soru 17: Sonlandırma ve Çıkış Kodu
Aşağıdaki çağrılardan hangisi programı sonlandırır ve AL'deki çıkış kodunu DOS'a verir?
D: AH = 4Ch hem .COM hem .EXE programlarında çalışır, açık dosyaları kapatır ve AL'yi çıkış kodu olarak bırakır (toplu iş dosyasında ERRORLEVEL). INT 16h/00h tuş bekler, INT 21h/09h dizgi yazar, INT 10h/AX = 0003h video modunu seçip ekranı temizler. RET yalnızca yığını dengeli .COM programında, INT 20h ise CS PSP'yi gösterirken sonlandırır.
Hata Bulma · Uygulama
Soru 18: Kaybolan Tuş
Program okunan tuşu yeni satırda yeniden yazmak istiyor. Kullanıcı k bastı. Ekranda ne görünür? Hata nerede?
mov ah, 01h int 21h ; AL = tuş mov dl, 0Dh ; CR mov ah, 02h int 21h mov dl, 0Ah ; LF int 21h mov dl, al ; tuşu yeniden yaz int 21h ret
Cevabı göster
Ekranda yalnızca yankılanan k görünür, imleç iki satır aşağı iner; ikinci 'k' yazılmaz.
INT 21h/02h dönüşte AL = DL yapar: son çağrıdan sonra AL = 0Ah. mov dl, al tuşu değil LF'yi alır ve bir LF daha basılır.
Düzeltme: okunan tuş hemen başka bir yazmaçta saklanır (mov bl, al), sonra mov dl, bl yazılır. Hizmetlerin değiştirdiği yazmaçlarda sonra gerekecek değer tutulmaz.