Bölüm 11: Kesme Fonksiyonları

Bölüm 11: Kesme Fonksiyonları · Çalışma Soruları
BIOS ve DOSVektörlerINT 10hÖznitelikEkran belleğiINT 16hINT 21hTamponlu girişINT 1AhBIOS veri alanıSonlandırma
Sercan KÜLCÜ

Ç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?

  1. Klavyeden yankılı tek karakter oku
  2. DL'deki karakteri ekrana yaz
  3. $ ile biten dizgiyi yaz
  4. Programı sonlandır
  5. BIOS: teletype karakter yaz
  6. BIOS: tuşa basılmasını bekle
Cevabı göster
İşKesme / AHGiriş / sonuç
1INT 21h / 01hAL ← ASCII
2INT 21h / 02hDL = karakter
3INT 21h / 09hDS:DX = dizgi
4INT 21h / 4ChAL = çıkış kodu
5INT 10h / 0EhAL = karakter
6INT 16h / 00hAL ← 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.

  1. Kahverengi zemin üzerine açık yeşil yazı?
  2. 1Fh nasıl görünür?
  3. CEh nasıl görünür?
  4. Açık yeşil (A) zemin neden doğrudan seçilemez?
Cevabı göster
  1. 6 × 16 + Ah = 6Ah.
  2. Mavi zemin, beyaz yazı.
  3. 1100 1110b: bit 7 = 1 → yanıp sönen, zemin 100b = kırmızı, yazı E = sarı.
  4. 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.

  1. Sağ alt köşe (24, 79) hücresinin karakter ve öznitelik baytları nerededir?
  2. (12, 40) hücresi?
  3. Mod 13h'te son piksel (319, 199)?
  4. 80 × 25 metin ekranı kaç bayt tutar?
Cevabı göster
  1. (1920 + 79) × 2 = 3998 = 0F9Eh → karakter B800:0F9Eh, öznitelik B800:0F9Fh.
  2. (960 + 40) × 2 = 2000 = 07D0h.
  3. 63 680 + 319 = 63 999 = A000:F9FFh, belleğin son baytı.
  4. 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?

AX0E41hsatır 0 0 1 2 3 4 5imleç: 0

AH = 0Eh (teletype), AL = 'A'.

AX0E41hsatır 0A0 1 2 3 4 5imleç: 1

'A' imlecin bulunduğu sütun 0'a yazılır, imleç 1'e ilerler.

AX0E42hsatır 0A0B1 2 3 4 5imleç: 2

'B' sütun 1'e; imleç 2.

AX0E08hsatır 0A0B1 2 3 4 5imleç: 1

08h (BS) basılmaz, komut olarak yorumlanır: imleç bir geri, sütun 1. 'B' silinmez.

AX0E43hsatır 0A0C1 2 3 4 5imleç: 2

'C' sütun 1'e, 'B'nin üzerine yazılır: AC, imleç 2.

AX0E0Dhsatır 0A0C1 2 3 4 5imleç: 0

0Dh (CR): imleç satır başına (sütun 0) döner, satır değişmez.

AX0E44hsatır 0D0C1 2 3 4 5imleç: 1

'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 dx konum 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 da mov 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?

AL00hCX0000hZF1CF0Tuş bekleniyor

CX = 0. XOR kendisiyle sıfırlar (ZF = 1).

AL61hCX0000hZF1CF0Son tuş: a (61h)

'a' basıldı: AL = 61h. (Tarama kodu AH'ye yazılır; öykünücü 0 verir.)

AL61hCX0000hZF0CF0Son tuş: a (61h)

Esc değil; CMP AL, '0': 61h ≥ 30h → CF = 0, JB atlamaz.

AL61hCX0000hZF0CF0Son tuş: a (61h)

CMP AL, '9': 61h > 39h → CF = 0, ZF = 0 → JA atlar: rakam değil, sayılmaz.

AL37hCX0000hZF0CF0Son tuş: 7 (37h)

'7' basıldı: AL = 37h.

AL37hCX0000hZF0CF1Son tuş: 7 (37h)

37h − 39h ödünç ister: CF = 1 → JA atlamaz.

AL37hCX0001hZF0CF1Son tuş: 7 (37h)

INC CX: CX = 1.

AL3AhCX0001hZF0CF1Son tuş: : (3Ah)

':' basıldı: AL = 3Ah, '9'dan hemen sonraki karakter.

AL3AhCX0001hZF0CF0Son tuş: : (3Ah)

3Ah > 39h → JA atlar; sınır doğru denetlendi.

AL33hCX0002hZF0CF1Son tuş: 3 (33h)

'3': rakam, CX = 2.

AL1BhCX0002hZF0CF1Son tuş: Esc (1Bh)

Esc: AL = 1Bh.

AL1BhCX0002hZF1CF0Son tuş: Esc (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?

AX0000hBX0000hDX011Ah06h+000h+100h+200h+300h+400h+500h+600h+7

DS:DX tampona: DX = 011Ah. Bayt 0 = 6: Enter dahil en çok 6 karakter.

AX0A00hBX0000hDX011Ah06h+005h+1'M'+2'i'+3'k'+4'r'+5'o'+60Dh+7

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.

AX0A00hBX0005hDX011Ah06h+005h+1'M'+2'i'+3'k'+4'r'+5'o'+60Dh+7

BL ← [tampon+1] = 5: okunan karakter sayısı.

AX0A00hBX0005hDX011Ah06h+005h+1'M'+2'i'+3'k'+4'r'+5'o'+60Dh+7

BX = 0005h: adres hesabında kullanılacak.

AX0A00hBX0005hDX011Ah06h+005h+1'M'+2'i'+3'k'+4'r'+5'o'+624h+7

[tampon + 5 + 2] = +7: 0Dh yerine '$' yazılır; metin artık 09h ile yazılabilir.

AX0A00hBX0005hDX011Ch06h+005h+1'M'+2'i'+3'k'+4'r'+5'o'+624h+7

DX = tampon + 2: metnin başı.

AX0924hBX0005hDX011Ch06h+005h+1'M'+2'i'+3'k'+4'r'+5'o'+624h+7

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?

  1. INT 1Ah/02h'den gelen CL, AAM kullanan yaz2 yordamıyla (aam · add ax, 3030h · iki kez 02h) yazdırılıyor.
  2. INT 21h/2Ch'den gelen CL, paketli BCD yazan yordamla (shr dl, cl ile üst, and dl, 0Fh ile alt basamak) yazdırılıyor.
Cevabı göster
  1. RTC paketli BCD verir: CL = 23h. AAM bunu ikili 35 sayar: AH = 3, AL = 5 → ekranda 35.
  2. 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.

Son

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