Bölüm 9: Aygıt Kontrolü

Bölüm 9: Aygıt Kontrolü · Çalışma Soruları
IN / OUTDMA8255 PPITrafik ışıklarıBeklemeStep motorLED ekranTermometreYazıcıRobot
Sercan KÜLCÜ

Çoktan Seçmeli · G/Ç Temelleri

Soru 1: IN ve OUT Kuralları

Aşağıdakilerden hangisi 8086'da geçerli bir G/Ç komut dizisidir?

B: Port numarası 0–255 ise komuta sabit olarak yazılabilir (OUT 4, AL); 255'ten büyükse DX'te verilmelidir, bu yüzden OUT 300h, AL geçersizdir. Veri yalnızca AL (bayt) ya da AX (sözcük) ile aktarılır; BX kullanılamaz. Sözdizimi OUT port, AL ve IN AL, port biçimindedir; son seçenek işlenenleri ters yazmıştır.

Çoktan Seçmeli · G/Ç Temelleri

Soru 2: İşlemcisiz Aktarım

Diskten belleğe büyük bir bloğun, CPU her baytı tek tek taşımadan aktarılmasını sağlayan yöntem ve bu işi yapan yonga hangisidir?

A: Doğrudan bellek erişiminde (DMA) denetleyici yolu işlemciden HOLD ile ister, HLDA ile alır ve veriyi aygıt ile bellek arasında kendisi taşır. Yoklamada CPU durum bitini döngüde okur; kesmede aygıt hazır olunca CPU'yu uyarır ama veriyi yine CPU taşır. 8255 paralel G/Ç, 8259A kesme denetleyicisi, 8253/8254 sayaç/zamanlayıcıdır; 8279 ise klavye/ekran denetleyicisidir.

Çoktan Seçmeli · G/Ç Temelleri

Soru 3: Bellek Eşlemeli G/Ç

Aşağıdakilerden hangisi bellek eşlemeli G/Ç örneğidir?

C: Metin ekranının belleği B800:0000'dan başlar; oraya MOV, ADD gibi her komutla yazılabilir ve yazılan bayt ekranda görünür. Diğer üçü port eşlemeli G/Ç'dir: ayrı 64 K'lık G/Ç adres uzayına yalnızca IN ve OUT ile erişilir (M/IO̅ pini G/Ç döngüsünü belirtir).

Hesap Sorusu · G/Ç Temelleri

Soru 4: 8255 Kontrol Sözcüğü

8255 kontrol sözcüğü: D7 = 1 mod seçimi, D6 D5 A grubu modu, D4 port A, D3 C üst yarı, D2 B grubu modu, D1 port B, D0 C alt yarı (1 = giriş).

  1. Mod 0'da A giriş, B çıkış, C üst yarı giriş, C alt yarı çıkış için kontrol sözcüğü nedir?
  2. Kontrol yazmacına 8Ah yazılırsa portların yönleri ne olur?
  3. Bit kur/sil (BSR) ile PC5'i 1, PC2'yi 0 yapan sözcükler nedir?
Cevabı göster
  1. 1 00 1 1 0 0 0b = 98h.
  2. 8Ah = 1 00 0 1 0 1 0b: mod 0; A çıkış, C üst giriş, B giriş, C alt çıkış.
  3. BSR'de D7 = 0, D3–D1 bit numarası, D0 yeni değer: PC5 = 1 → 0000 1011b = 0Bh; PC2 = 0 → 0000 0100b = 04h. Diğer C bitleri değişmez.

Port adresi 255'ten büyük olduğu için (ör. kontrol yazmacı 313h) yazma MOV DX, 313h · OUT DX, AL ile yapılır.

Adım Adım Çalıştırma · Trafik Işıkları

Soru 5: Lamba Bitlerini Değiştirmek

Her direkte bit 3k kırmızı (K), 3k+1 sarı (S), 3k+2 yeşil (Y). Port 4'e hangi değer yazılır, hangi lambalar yanar?

AX0249hsağ alt012sağ üst345sol üst678sol alt9AB001001001001

AX = 0249h = 0010 0100 1001b: bit 0, 3, 6, 9 → dört direğin kırmızısı.

AX024Chsağ alt012sağ üst345sol üst678sol alt9AB001001001100

XOR ile bit 0 ve 2 terslenir: sağ alt kırmızı söner, yeşil yanar → AX = 024Ch.

AX025Chsağ alt012sağ üst345sol üst678sol alt9AB001001011100

OR ile bit 4 kurulur: sağ üstte kırmızıya sarı eklenir ("hazırlan") → AX = 025Ch.

AX025Chsağ alt012sağ üst345sol üst678sol alt9AB001001011100

OUT 4, AX: lambalar yeni duruma geçer. Bit 12–15 kullanılmaz; XOR/OR yalnızca seçilen bitleri değiştirir.

ORG 100h
mov ax, 0249h    ; all_red
xor ax, 0005h    ; bit 0 ve 2'yi tersle
or  ax, 0010h    ; bit 4'ü kur
out 4, ax
ret

Hesap Sorusu · Trafik Işıkları

Soru 6: INT 15h ile Bekleme Süresi

INT 15h, AH = 86h, CX:DX mikrosaniye bekler.

  1. 0,75 saniyelik bekleme için CX ve DX ne olmalıdır?
  2. 12 saniyelik bekleme için?
  3. Bu işlevle tek çağrıda en uzun kaç dakika beklenebilir?
Cevabı göster
  1. 750 000 µs = 000B71B0h → CX = 000Bh, DX = 71B0h.
  2. 12 000 000 µs = 00B71B00h → CX = 00B7h, DX = 1B00h.
  3. CX = DX = FFFFh: 4 294 967 295 µs ≈ 4 295 s ≈ 71,6 dakika.

Onluk değer onaltılığa çevrilir (ardışık 16'ya bölme), 32 bitlik sonuç ikiye ayrılır: yüksek sözcük CX'e, düşük sözcük DX'e.

Çoktan Seçmeli · Trafik Işıkları

Soru 7: LOOP ile Gecikme

4,77 MHz'lik bir 8086'da mov cx, 1000 (4 tur) ardından bekle: loop bekle (atlarsa 17, atlamazsa 5 tur) çalışıyor. Gecikme yaklaşık ne kadardır?

D: Toplam 4 + 17 · 999 + 5 = 17N − 8 = 16 992 saat turu. 1 saat turu 1 / 4,77 MHz ≈ 0,2096 µs olduğundan süre 16 992 ÷ 4,77 ≈ 3 562 µs ≈ 3,56 ms. 3,56 µs birimi, 17,0 ms ise turları mikrosaniye sanmayı yansıtır. Bu süre saat hızına bağlıdır; emu8086 komut zamanlamasını modellemez.

Adım Adım Çalıştırma · Step Motor

Soru 8: Step Motoru Yoklamak

Port 7 sırasıyla 00h, 80h, 00h, 00h, 80h döndürüyor. Program bitince DX kaç olur? Porta hangi baytlar yazılır?

AX0000hSI0000hDX0000hZF0AL0706050403020100mıknatıslar210

BX = 0102h: CCW tam adım tablosu (veriler 0102h–0105h).

AX0000hSI0000hDX0000hZF0AL0706050403020100mıknatıslar210

IN AL, 7 → 00h.

AX0000hSI0000hDX0001hZF1AL0706050403020100mıknatıslar210

INC DX: 1. okuma. TEST AL, 80h: bit 7 = 0 → ZF = 1, motor meşgul.

AX0000hSI0000hDX0001hZF1AL0706050403020100mıknatıslar210

JZ: ZF = 1 → tekrar oku (yoklama).

AX0080hSI0000hDX0001hZF1AL1706050403020100mıknatıslar210

IN AL, 7 → 80h: hazır.

AX0080hSI0000hDX0002hZF0AL1706050403020100mıknatıslar210

TEST: ZF = 0. DX = 2.

AX0004hSI0000hDX0002hZF0AL0706050403120100mıknatıslar210

AL ← [BX+SI] = [0102h] = 100b.

AX0004hSI0000hDX0002hZF0AL0706050403120100mıknatıslar210

OUT 7, AL: yalnızca mıknatıs 2 açılır.

AX0004hSI0001hDX0002hZF0AL0706050403120100mıknatıslar210

JB: SI = 1 < 2 → sonraki bayt. Port bu kez 00h, 00h, 80h döndürüyor.

AX0080hSI0001hDX0005hZF0AL1706050403020100mıknatıslar210

Üçüncü deneme 80h getirdi: DX = 5 okuma.

AX0006hSI0001hDX0005hZF0AL0706050403121100mıknatıslar210

AL ← [0103h] = 110b.

AX0006hSI0001hDX0005hZF0AL0706050403121100mıknatıslar210

OUT 7, AL: mıknatıs 2 ve 1 açık. İki bayt gönderildi; motor meşgulken 3 okuma boşa gitti.

ORG 100h
jmp start
tablo db 100b, 110b, 011b, 000b
start:
mov bx, offset tablo
mov si, 0
mov dx, 0          ; okuma sayacı
adim:
bekle: in al, 7
inc dx
test al, 80h       ; bit 7: hazır
jz bekle
mov al, [bx+si]
out 7, al
inc si
cmp si, 2
jb adim
ret

Çoktan Seçmeli · Step Motor

Soru 9: Kaç Derece Döner?

emu8086 step motorunda yarım adım 11,25°'dir. Yarım adım tablosunun 4 baytı 32 tur boyunca (her tur 4 bayt) gönderiliyor. Mil toplam kaç derece döner?

C: 32 × 4 = 128 yarım adım; 128 × 11,25° = 1440° = 4 tam tur. 2880° her baytı 22,5°'lik tam adım sayar; 360° ise 32 adımı tek tur sanmaktır.

Kod Okuma · Step Motor

Soru 10: Döndürmeyle Uyarma Dizisi

Döngü boyunca DL'ye sırayla hangi değerler yazılır? Bu dizi gerçek bir unipolar step motor için hangi sürüşe karşılık gelir? Motoru ters çevirmek için ne değişmelidir?

ORG 100h
mov al, 33h
mov cx, 5
don:
mov bl, al
and bl, 0Fh     ; alt 4 bit
mov dl, bl      ; port A'ya gidecek
rol al, 1
loop don
ret
Cevabı göster

DL: 03h, 06h, 0Ch, 09h, 03h

AL = 33h = 0011 0011b; ROL her turda iki 1'li grubu bir sola kaydırır: 66h, CCh, 99h, 33h … Alt 4 bit her an iki komşu sargıyı seçer: iki faz, tam adım sürüş (03h 06h 0Ch 09h).

Üst nibble alt nibble'ın kopyası olduğu için 8 bitlik döndürme 4 bitlik bir halka gibi davranır. Ters yön için rol yerine ror al, 1: 03h, 09h, 0Ch, 06h.

Çoktan Seçmeli · LED Ekran

Soru 11: LED Ekranda −300

Port 199'daki LED ekranda -300 görmek için OUT 199, AX öncesinde AX hangi değeri taşımalıdır?

A: Ekran sözcüğü ikiye tümleyen işaretli sayı olarak yorumlar: −300 = 10000h − 012Ch = FED4h (mov ax, -300 bunu derleyiciye yaptırır). 812Ch işaret-büyüklük, FED3h birler tümleyeni gösterimidir; 012Ch ise +300'dür.

Çıktı Sorusu · LED Ekran

Soru 12: Bölüt Kodu Tablosu

XLAT ve NOT sonrası AL ne olur? Hangi bölütler yanar? Gösterge ortak katotlu olsaydı NOT satırı gerekir miydi?

mov bx, offset kod
mov al, 6
xlat            ; AL = [BX + AL]
not al          ; ortak anot
mov dx, 310h    ; 8255 port A
out dx, al
...
kod db 3Fh,06h,5Bh,4Fh,66h
    db 6Dh,7Dh,07h,7Fh,6Fh
Cevabı göster

XLAT: AL ← [kod + 6] = 7Dh = 0111 1101b (dp g f e d c b a). NOT: AL = 82h = 1000 0010b.

Ortak anotta bölüt 0 ile yanar: a, c, d, e, f, g yanar, b ve dp söner → 6 rakamı.

Ortak katotta bit = 1 bölütü yaktığı için tablo değeri (7Dh) doğrudan gönderilir; NOT gerekmez.

Adım Adım Çalıştırma · Termometre

Soru 13: Termostat ve Eksi Sıcaklık

Port 125 sırasıyla 85, F6h ve 65 döndürüyor. Isıtıcıya hangi değerler gönderilir? JL/JLE/JG yerine JB/JBE/JA yazılsaydı −10 °C'de ne olurdu?

AL55hZF0SF0OF0CF0Sıcaklık: 85 °CIsıtıcı: ?

IN AL, 125 → 85 = 55h.

AL55hZF0SF0OF0CF0Sıcaklık: 85 °CIsıtıcı: ?

CMP AL, 60: 85 − 60 = 25 → SF = 0, OF = 0, CF = 0.

AL55hZF0SF0OF0CF0Sıcaklık: 85 °CIsıtıcı: ?

JL atlamadı. CMP AL, 80: 85 − 80 = 5 → ZF = 0, SF = OF.

AL55hZF0SF0OF0CF0Sıcaklık: 85 °CIsıtıcı: ?

JLE de atlamadı; JG: ZF = 0 ve SF = OF → yuksek.

AL00hZF0SF0OF0CF0Sıcaklık: 85 °CIsıtıcı: kapalı

OUT 127, 0: ısıtıcı kapandı.

ALF6hZF0SF0OF0CF0Sıcaklık: -10 °CIsıtıcı: kapalı

Yeni ölçüm: AL = F6h = −10 °C.

ALF6hZF0SF1OF0CF0Sıcaklık: -10 °CIsıtıcı: kapalı

CMP AL, 60: −10 − 60 = −70 → SF = 1, OF = 0. İşaretsiz yorumda 246 > 60 olduğundan CF = 0.

ALF6hZF0SF1OF0CF0Sıcaklık: -10 °CIsıtıcı: kapalı

JL: SF ≠ OF → −10 < 60, dusuk.

AL01hZF0SF1OF0CF0Sıcaklık: -10 °CIsıtıcı: açık

OUT 127, 1: ısıtıcı açıldı.

AL41hZF0SF1OF0CF0Sıcaklık: 65 °CIsıtıcı: açık

Yeni ölçüm: 65 °C.

AL41hZF0SF1OF0CF1Sıcaklık: 65 °CIsıtıcı: açık

CMP AL, 80: 65 < 80 → SF = 1, OF = 0, ZF = 0.

AL41hZF0SF1OF0CF1Sıcaklık: 65 °CIsıtıcı: açık

JLE: atlar → tamam; 60 ≤ 65 ≤ 80, ısıtıcıya dokunulmaz.

ALF6hZF0SF1OF0CF0Sıcaklık: -10 °CIsıtıcı: kapalı

JB/JBE/JA kullanılsaydı: −10 = F6h = 246 işaretsiz olarak 80'den büyük sayılır, JA atlar ve ısıtıcı −10 °C'de kapatılırdı. Eksi olabilen sıcaklıklar işaretli atlamalarla karşılaştırılır.

ORG 100h
basla:
in al, 125
cmp al, 60
jl dusuk
cmp al, 80
jle tamam
jg yuksek
dusuk:
mov al, 1
out 127, al     ; ısıtıcı açık
jmp tamam
yuksek:
mov al, 0
out 127, al     ; ısıtıcı kapalı
tamam:
jmp basla

Çıktı Sorusu · Yazıcı

Soru 14: Yazıcıya Kaç Karakter?

CX hangi değeri alır? Yazdırma döngüsü (mov dl, [si] · mov ah, 5 · int 21h · inc si · loop) bittiğinde kâğıtta ne görünür?

msg     db "Not: 85", 0Dh, 0Ah
        db "Tarih", 09h, "2026"
msg_end db 0
...
mov si, offset msg
mov cx, offset msg_end - offset msg
Cevabı göster

7 + 2 + 5 + 1 + 4 = 19 = 13h. Fark derleme zamanında hesaplanır; msg_end'deki 0 yalnızca bir işarettir, yazdırılmaz.

Not: 85
Tarih   2026

CR (0Dh) satır başına döner, LF (0Ah) bir satır aşağı iner. HT (09h) bir sonraki 8 sütunluk sekmeye, yani 9. sütuna atlar. Sayfayı çıkarmak için ayrıca DL = 0Ch (FF) gönderilir.

Çoktan Seçmeli · Yazıcı

Soru 15: Yeni Sayfa Kodu

INT 21h, AH = 05h ile yazıcıyı yeni sayfaya geçirmek için DL'ye hangi kod konur?

D: Form feed (FF, 12) kâğıdı sayfa sonuna kadar ilerletir. LF bir satır aşağı iner, CR satır başına döner, HT yatay sekmeye gider. Yazıcı programı başta ve sonda FF göndererek temiz bir sayfa kullanır.

Çoktan Seçmeli · Robot

Soru 16: Korunmayan AL

Robot programında gonder yolundaki PUSH AX / POP AX silindi. Robot önündeki duvarı gördü ve AL = 3 (sağa dön) ile gonder'e gelindi. hazir_bekle port 11'i önce 03h, sonra 01h okuyarak döndü. Port 9'a hangi komut gider?

B: hazir_bekle, AL'ye durum baytını okur ve meşgul biti (bit 1) 0 olana kadar döner: çıkışta AL = 01h (yeni veri biti). Komut kaybolmuş, yerine durum baytı gönderilmiştir: robot duvara doğru ileri gitmeye çalışır ve hata biti (bit 2) kurulur. Bu yüzden komut değeri yordamdan önce yığına atılıp sonra geri alınır.

Son

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