Bölüm 1: 8086 Mimarisi
Çoktan Seçmeli · Genel Bakış
Soru 1: 8086'nın Yolları
8086 için hangisi doğrudur?
A: 8086'nın yazmaçları, ALU'su ve veri yolu 16 bittir: tek seferde 2 bayt taşır. 20 hatlı adres yolu 220 = 1 048 576 baytı (1 MB) seçer. 16 bitlik adres ve 64 KB 8080/8085'e, 24 bitlik adres ve 16 MB 80286'ya aittir. Veri yolu ile adres yolu ayrı şeyleri ölçer: biri bir seferde ne kadar veri, öteki ne kadar bellek.
Hesap Sorusu · Genel Bakış
Soru 2: Adres Alanları
8086 sistemi için hesaplayın.
- Bellek adreslerinin onaltılık aralığı nedir? Kaç bayt eder?
- G/Ç adresleri 16 bittir. En çok kaç port adreslenir?
- Bir okuma yol döngüsünde veri yolundan en çok kaç bayt gelir?
- Kesim tabanları 16 baytlık paragraf sınırlarında başlar. 1 MB'ta kaç olası kesim başlangıcı vardır?
Cevabı göster
- 20 bit = 5 onaltılık basamak: 00000h – FFFFFh, 220 = 1 048 576 bayt.
- 216 = 65 536 port (0000h – FFFFh). G/Ç erişiminde A19–A16 = 0 olur.
- Veri yolu 16 bit → 2 bayt (bir sözcük, çift adreste tek döngü).
- 1 048 576 / 16 = 65 536: 16 bitlik kesim yazmacının alabileceği her değer bir paragrafı gösterir.
Çoktan Seçmeli · İç Yapı
Soru 3: BIU'nun Görevi
8086'daki yol arayüz biriminin (BIU) görevi hangisidir?
C: BIU dış dünyayla konuşan birimdir: kesim × 10h + bağıl konum ile 20 bitlik adresi hesaplar, 6 baytlık önden getirme kuyruğunu doldurur ve yol döngülerini yürütür. Kesim yazmaçları ve IP BIU'dadır. Komutu çözüp yürütmek ve bayrakları güncellemek EU'nun, kesme önceliklendirme ise 8259A gibi bir kesme denetleyicisinin işidir.
Çoktan Seçmeli · İç Yapı
Soru 4: EU'nun İçinde
Aşağıdakilerden hangisi yürütme biriminin (EU) içinde yer alır?
B: EU; genel amaçlı yazmaçları, işaretçi/indis yazmaçlarını, ALU'yu, bayrak yazmacını ve kontrol sistemini içerir. Kesim yazmaçları, IP, adres toplayıcı ve önden getirme kuyruğu BIU'dadır. EU dış yollara doğrudan bağlı değildir; bellekte bir işlenen gerekirse BIU'dan ister.
Hesap Sorusu · İç Yapı
Soru 5: Getirme ile Yürütme Örtüşünce
Her komutun getirilmesi (G, BIU) 2, çözülüp yürütülmesi (Y, EU) 2 zaman birimi sürüyor. 5 komut için:
- BIU ve EU sırayla çalışsaydı (boru hattı yok) toplam süre ne olurdu?
- 8086'daki gibi EU yürütürken BIU sonraki komutu getirirse süre ne olur?
- 3. komut bir JMP ise ve kuyruk boşaltılırsa süre ne olur?
Cevabı göster
- 5 × (2 + 2) = 20 birim.
- İlk getirme 2 birim, sonra her 2 birimde bir komut biter: 2 + 5 × 2 = 12 birim.
- Y3 sırasında önden getirilen 4. komut yanlış yoldadır. Hedef ancak Y3 bitince (8. birim) getirilir: G4 8–10, Y4 10–12, Y5 12–14 → 14 birim. Dallanma, kazancın bir kısmını geri alır.
Adım Adım Çalıştırma · İç Yapı
Soru 6: Kuyruk İzleme
Program 0100h'den başlıyor. BIU kuyrukta en az 2 bayt yer açılınca bir sözcük getiriyor. JMP yürütülürken kuyrukta hangi baytlar vardır ve onlara ne olur? Sonuçta AL ve BL kaçtır?
Başlangıçta kuyruk boş; EU ilk baytı bekler. BIU 0100h'den sözcük sözcük getirmeye başlar.
BIU üç sözcükle kuyruğu doldurdu. EU B0 05'i aldı (AL = 05h); 2 bayt boşalınca BIU EB 02'yi getirdi.
EU B3 07'yi aldı (BL = 07h); BIU 90 90'ı getirdi. EU hiç beklemedi.
AL = 05h + 07h = 0Ch. BIU 010Ah'deki F4 90'ı da getirdi; kuyruk yine dolu.
JMP: IP = 0108h + 2 = 010Ah. Kuyruktaki 4 bayt (90 90 F4 90) sıralı adreslerden geldiği için geçersizdir ve atılır.
BIU 010Ah'den yeniden getirir (F4 90); EU bu sürede bekledi. F4 = HLT. Sonuç: AL = 0Ch, BL = 07h.
org 100h mov al, 5 ; B0 05 mov bl, 7 ; B3 07 add al, bl ; 02 C3 jmp short son ; EB 02 nop ; 90 nop ; 90 son: hlt ; F4 nop ; 90
Çoktan Seçmeli · İç Yapı
Soru 7: Üç Baytlık Komut
8086 komutları değişken uzunluktadır. Aşağıdakilerden hangisi bellekte 3 bayt yer kaplar?
D: MOV BX, 4050h = BB 50 40: işlem kodu + 16 bitlik anlık değer (little-endian). INC CX = 41 (1 bayt), MOV AX, BX = 8B C3 (işlem kodu + ModR/M, 2 bayt), son komut ise C7 87 34 12 78 56: ModR/M, 16 bitlik yer değiştirme ve 16 bitlik anlık değerle 6 bayttır.
Çoktan Seçmeli · Yazmaçlar
Soru 8: Komut İşaretçisi
Komut işaretçisi (IP) için hangisi doğrudur?
A: IP 16 bitlik bir bağıl konumdur; fiziksel adres CS × 10h + IP ile BIU'da üretilir. MOV IP, … diye bir komut yoktur: IP'yi yalnızca JMP, Jcc, CALL, RET, LOOP, INT ve IRET değiştirir. Yığının tepesini SP gösterir; işlem kodu programcıya görünmeyen komut yazmacında tutulur.
Çoktan Seçmeli · Yazmaçlar
Soru 9: Bayrak Yazmacı
16 bitlik bayrak yazmacı (FLAGS) için hangisi doğrudur?
D: Durum bayrakları CF, PF, AF, ZF, SF, OF son aritmetik/mantık işleminin sonucunu anlatır ve donanımca kurulur. Kontrol bayrakları TF, IF, DF ise işlemcinin davranışını yönetir; programcı STD/CLD, STI/CLI ya da PUSHF/POPF ile ayarlar. Kalan 7 bit kullanılmaz.
Adım Adım Çalıştırma · Yazmaçlar
Soru 10: Bayraklar ve IP
.COM programı 0100h'den başlıyor; yazmaçlar ve bayraklar 0. Her komuttan sonra IP, AX, BL ve CF, ZF, SF, OF, PF, AF ne olur?
AX = 7FF0h. Komut 3 bayt → IP = 0103h. MOV bayrakları değiştirmez.
7FF0h + 0010h = 8000h. İşaretli +32752 + 16 = +32768 16 bite sığmaz → OF = 1, SF = 1. Elde yok: CF = 0. Düşük bayt 00h (sıfır tane 1) → PF = 1.
BL = F0h. 8 bitlik MOV, 2 bayt → IP = 0108h.
F0h + 20h = 110h → BL = 10h, CF = 1. İşaretli −16 + 32 = 16 doğru → OF = 0. 10h'de tek bir 1 → PF = 0.
10h − 1 = 0Fh: bit 4'ten ödünç → AF = 1. DEC, CF'yi değiştirmez: CF = 1 kaldı.
8000h − 1 = 7FFFh: −32768 − 1 sığmaz → OF = 1. İşaretsiz 32768 − 1 doğru → CF = 0.
RET: .COM programı DOS'a döner. IP 0100h'den komut uzunluklarına göre 0110h'ye ilerlemişti.
org 100h mov ax, 7FF0h add ax, 0010h mov bl, 0F0h add bl, 20h dec bl sub ax, 1 ret
Hata Bulma · Yazmaçlar
Soru 11: Derlenmeyen Komutlar
Aşağıdaki satırların her biri 8086 assembler'ında hata verir. Nedenini yazın ve aynı işi yapan doğru kodu verin.
MOV DS, 1000h MOV ES, DS MOV CS, AX MOV IP, 0100h MOV AL, BX
Cevabı göster
| Hatalı | Neden | Doğrusu |
|---|---|---|
MOV DS, 1000h | kesim yazmacına anlık değer yüklenemez | MOV AX, 1000hMOV DS, AX |
MOV ES, DS | kesimden kesime MOV yok | PUSH DSPOP ES |
MOV CS, AX | CS, MOV ile değişmez | uzak JMP/CALL, RETF, INT, IRET |
MOV IP, 0100h | IP programcıya kapalı | JMP ile 0100h'deki etikete atla |
MOV AL, BX | 8 bit ← 16 bit uyuşmaz | MOV AL, BL |
Hesap Sorusu · Kesimli Bellek
Soru 12: Fiziksel Adres Hesabı
Aşağıdaki kesim:bağıl konum çiftlerinin 8086'daki 20 bitlik fiziksel adreslerini bulun.
- CS = 1A2Bh, IP = 0C30h
- DS = 7000h, BX = FFF0h
- B800h:0FA0h (metin ekranı belleği)
- FF00h:1200h
Cevabı göster
| kesim × 10h | + bağıl | FA | |
|---|---|---|---|
| 1 | 1A2B0h | 0C30h | 1AEE0h |
| 2 | 70000h | FFF0h | 7FFF0h |
| 3 | B8000h | 0FA0h | B8FA0h |
| 4 | FF000h | 1200h | 100200h → 00200h |
Son toplam 1 MB'ı aşar; 8086'da A20 hattı olmadığından en üst bit düşer ve adres 00200h'ye sarar. 2. örnekte sonuç kesimin sınırına yakındır: 7000h kesimi 70000h–7FFFFh aralığını kapsar.
Adım Adım Çalıştırma · Kesimli Bellek
Soru 13: Kesim:Bağıl Konum İzleme
Her bellek erişiminin fiziksel adresi nedir? Program bittiğinde AL kaçtır ve 5Ah değeri hangi fiziksel adreslere yazılmıştır?
Kesim yazmacına sabit yüklenemediği için önce AX'e, sonra DS'ye: DS = 3000h. Veri kesimi 30000h'de başlar.
FA = 30000h + 0020h = 30020h; oraya 5Ah yazılır.
DS = 3002h: kesim tabanı 2 paragraf (32 bayt = 20h) ileri kaydı → 30020h.
FA = 30020h + 0000h = 30020h → AL = 5Ah. 3000h:0020h ile 3002h:0000h aynı bayttır.
SI = FFFFh, kesimin en büyük bağıl konumu: FA = 30020h + FFFFh = 4001Fh. Kesimin son baytına 5Ah yazılır.
mov ax, 3000h mov ds, ax mov bx, 0020h mov byte ptr [bx], 5Ah mov ax, 3002h mov ds, ax mov al, [0000h] mov si, 0FFFFh mov [si], al
Hesap Sorusu · Kesimli Bellek
Soru 14: Normalleştirme
Fiziksel adres 4B7C9h veriliyor.
- Bağıl konumu 0–Fh aralığında olan (normalleştirilmiş) kesim:bağıl konum yazımı nedir?
- DS = 4000h ise bu bayta erişmek için bağıl konum ne olmalıdır?
- DS = 3000h iken bu bayta DS ile erişilebilir mi?
- Bu fiziksel adresin kaç farklı kesim:bağıl konum yazımı vardır?
Cevabı göster
- İlk 4 basamak kesim, son basamak bağıl konum: 4B7Ch:0009h.
- 4B7C9h − 40000h = B7C9h → 4000h:B7C9h.
- Hayır: 4B7C9h − 30000h = 1B7C9h, 16 bite (FFFFh) sığmaz. 3000h kesimi 30000h–3FFFFh'yi kapsar.
- Kesim 16'şar bayt kaydırılarak bağıl konum 0000h–FFFFh içinde tutulabildiği sürece: 4096 yazım (3B7Dh:FFF9h … 4B7Ch:0009h).
Çoktan Seçmeli · Kesimli Bellek
Soru 15: Varsayılan Kesim
Kesim öneki yazılmamışsa aşağıdaki komutlardan hangisi belleğe SS kesimi üzerinden erişir?
B: BP içeren her adres varsayılan olarak SS kesimini kullanır; BP yığın çerçevesindeki parametre ve yerel değişkenlere erişmek içindir. BX, SI, DI ve doğrudan adres DS kesimini kullanır. Varsayılan, öneki yazarak değiştirilebilir: MOV AL, DS:[BP+2].
Çoktan Seçmeli · Kesimli Bellek
Soru 16: Aynı Anda Erişilebilen Bellek
Kesim yazmaçları hiç değiştirilmeden bir 8086 programı en çok ne kadar belleğe doğrudan erişebilir?
C: Aynı anda dört kesim etkindir: CS, DS, SS ve ES; her biri 16 bitlik bağıl konumla en çok 64 KB kapsar. Kesimler ayrık yerleştirilirse 4 × 64 KB = 256 KB'a erişilir; çakışırlarsa daha azına. 1 MB'ın geri kalanı için bir kesim yazmacına yeni değer yüklemek gerekir.