Bölüm 2: 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 · Genel Bakış
Soru 3: Sistem Yolu
8086'nın sistem yolu için hangisi doğrudur?
B: Adresi yalnız CPU üretir: adres yolu tek yönlüdür ve 20 hat 2²⁰ = 1 MB adresler. Veri yolu 16 hatlı ve çift yönlüdür (okuma ve yazma). Okuma/yazma (RD, WR) ve bellek/G/Ç (M/IO) bilgisi kontrol yolundadır.
Kısa Cevap · Genel Bakış
Soru 4: Bellekten Okuma Sırası
MOV AL, [bellek] yürütülürken bellekten okuma şu adımlarla olur; doğru sırası nedir? Yazma döngüsünde ne farklıdır?
(1) Bellek, istenen baytı veri yoluna koyar.
(2) CPU adresi adres yoluna koyar.
(3) CPU veri yolundaki baytı AL'ye yazar.
(4) Kontrol yolunda RD etkin olur (M/IO = bellek).
Cevabı göster
Sıra: 2 → 4 → 1 → 3. Önce adres, sonra “oku” sinyali; bellek veriyi koyar, CPU alır. 8086'da bu bir yol döngüsüdür (T1–T4, 4 saat periyodu).
Yazma döngüsünde 1. adımda veriyi CPU veri yoluna koyar ve WR sinyali etkin olur; bellek baytı saklar.
Komutun kendisi de aynı yolla getirilir: CPU, CS:IP'deki baytları okur ve IP'yi komut uzunluğu kadar artırır (getir – çöz – yürüt).
Çoktan Seçmeli · İç Yapı
Soru 5: 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 6: 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 7: 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 8: 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 9: Üç 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 10: 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.
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: Aynı Adres, Farklı Çiftler
Aşağıdaki kesim:bağıl konum çiftlerinden hangisi 2A3F0h fiziksel adresini göstermez?
A: 2A30:0F00 → 2A300h + 0F00h = 2B200h. Diğerleri: 2A3F0h + 0 · 2A000h + 3F0h · 20000h + A3F0h, hepsi 2A3F0h. Kesim değeri sağa bir 0 eklenerek (× 10h) bağıl konumla toplanır; bağıl konum kaydırılmaz.
Adım Adım Çalıştırma · Kesimli Bellek
Soru 16: Gerçek Modda Sarma
Gerçek modda FFFFh:0020h mantıksal adresi 8086'da hangi fiziksel adrese karşılık gelir? A20 hattı açık bir 80286'da ne değişir?
Mantıksal adres FFFFh:0020h. İki parça da 16 bit, yani 4 onaltılık basamak.
× 10h = sağa bir 0 eklemek: taban FFFF0h. Kesim tabanı hep 16'nın katıdır.
FFFF0h + 00020h = 100010h: toplam 21 bit oldu, 1 MB'ı (FFFFFh) aştı.
8086'da A20 hattı yoktur: en üst bit düşer, adres 00010h'ye sarar. A20 hattı açık bir 80286 ise 100010h'ye, 1 MB'ın hemen üstüne erişir.
kesim = 0FFFFh
bağıl = 0020h
taban = kesim × 10h
fa = taban + bağıl
fa = fa AND 0FFFFFh ; 20 hatÇoktan Seçmeli · Kesimli Bellek
Soru 17: 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 18: 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.