Bölüm 1: 8086 Mimarisi

Bölüm 1: 8086 Mimarisi · Çalışma Soruları
Yollar ve bellekBIU ve EUBoru hattıÖnden getirme kuyruğuKomut uzunluğuIP ve bayraklarKesim yazmaçlarıFiziksel adresNormalleştirmeVarsayılan kesim
Sercan KÜLCÜ

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

  1. Bellek adreslerinin onaltılık aralığı nedir? Kaç bayt eder?
  2. G/Ç adresleri 16 bittir. En çok kaç port adreslenir?
  3. Bir okuma yol döngüsünde veri yolundan en çok kaç bayt gelir?
  4. 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
  1. 20 bit = 5 onaltılık basamak: 00000h – FFFFFh, 220 = 1 048 576 bayt.
  2. 216 = 65 536 port (0000h – FFFFh). G/Ç erişiminde A19–A16 = 0 olur.
  3. Veri yolu 16 bit → 2 bayt (bir sözcük, çift adreste tek döngü).
  4. 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:

  1. BIU ve EU sırayla çalışsaydı (boru hattı yok) toplam süre ne olurdu?
  2. 8086'daki gibi EU yürütürken BIU sonraki komutu getirirse süre ne olur?
  3. 3. komut bir JMP ise ve kuyruk boşaltılırsa süre ne olur?
Cevabı göster
  1. 5 × (2 + 2) = 20 birim.
  2. İlk getirme 2 birim, sonra her 2 birimde bir komut biter: 2 + 5 × 2 = 12 birim.
  3. 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?

Kuyruk (6 bayt) →BIU sıradaki:0100hEU: bekliyor (kuyruk boş)AL00hBL00h

Başlangıçta kuyruk boş; EU ilk baytı bekler. BIU 0100h'den sözcük sözcük getirmeye başlar.

Kuyruk (6 bayt) →B30702C3EB02BIU sıradaki:0108hEU: MOV AL, 5 (B0 05)AL05hBL00h

BIU üç sözcükle kuyruğu doldurdu. EU B0 05'i aldı (AL = 05h); 2 bayt boşalınca BIU EB 02'yi getirdi.

Kuyruk (6 bayt) →02C3EB029090BIU sıradaki:010AhEU: MOV BL, 7 (B3 07)AL05hBL07h

EU B3 07'yi aldı (BL = 07h); BIU 90 90'ı getirdi. EU hiç beklemedi.

Kuyruk (6 bayt) →EB029090F490BIU sıradaki:010ChEU: ADD AL, BL (02 C3)AL0ChBL07h

AL = 05h + 07h = 0Ch. BIU 010Ah'deki F4 90'ı da getirdi; kuyruk yine dolu.

Kuyruk (6 bayt) →9090F490BIU sıradaki:010AhEU: JMP SHORT (EB 02)AL0ChBL07hkuyruk boşaltıldı

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.

Kuyruk (6 bayt) →90BIU sıradaki:010ChEU: HLT (F4)AL0ChBL07h

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?

IP0103hAX7FF0hBL00hCF0ZF0SF0OF0PF0AF0

AX = 7FF0h. Komut 3 bayt → IP = 0103h. MOV bayrakları değiştirmez.

IP0106hAX8000hBL00hCF0ZF0SF1OF1PF1AF0

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.

IP0108hAX8000hBLF0hCF0ZF0SF1OF1PF1AF0

BL = F0h. 8 bitlik MOV, 2 bayt → IP = 0108h.

IP010BhAX8000hBL10hCF1ZF0SF0OF0PF0AF0

F0h + 20h = 110h → BL = 10h, CF = 1. İşaretli −16 + 32 = 16 doğru → OF = 0. 10h'de tek bir 1 → PF = 0.

IP010DhAX8000hBL0FhCF1ZF0SF0OF0PF1AF1

10h − 1 = 0Fh: bit 4'ten ödünç → AF = 1. DEC, CF'yi değiştirmez: CF = 1 kaldı.

IP0110hAX7FFFhBL0FhCF0ZF0SF0OF1PF1AF1

8000h − 1 = 7FFFh: −32768 − 1 sığmaz → OF = 1. İşaretsiz 32768 − 1 doğru → CF = 0.

IP0110hAX7FFFhBL0FhCF0ZF0SF0OF1PF1AF1

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ıNedenDoğrusu
MOV DS, 1000hkesim yazmacına anlık değer yüklenemezMOV AX, 1000h
MOV DS, AX
MOV ES, DSkesimden kesime MOV yokPUSH DS
POP ES
MOV CS, AXCS, MOV ile değişmezuzak JMP/CALL, RETF, INT, IRET
MOV IP, 0100hIP programcıya kapalıJMP ile 0100h'deki etikete atla
MOV AL, BX8 bit ← 16 bit uyuşmazMOV 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.

  1. CS = 1A2Bh, IP = 0C30h
  2. DS = 7000h, BX = FFF0h
  3. B800h:0FA0h (metin ekranı belleği)
  4. FF00h:1200h
Cevabı göster
kesim × 10h+ bağılFA
11A2B0h0C30h1AEE0h
270000hFFF0h7FFF0h
3B8000h0FA0hB8FA0h
4FF000h1200h100200h → 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?

DS3000hbağıl—FA—bayt—veri kesimi: 30000h – 3FFFFh

Kesim yazmacına sabit yüklenemediği için önce AX'e, sonra DS'ye: DS = 3000h. Veri kesimi 30000h'de başlar.

DS3000hbağıl0020hFA30020hbayt5AhFA = DS × 10h + bağıl = 30000h + 0020hveri kesimi: 30000h – 3FFFFh

FA = 30000h + 0020h = 30020h; oraya 5Ah yazılır.

DS3002hbağıl—FA—bayt—veri kesimi: 30020h – 4001Fh

DS = 3002h: kesim tabanı 2 paragraf (32 bayt = 20h) ileri kaydı → 30020h.

DS3002hbağıl0000hFA30020hbayt5AhFA = DS × 10h + bağıl = 30020h + 0000hveri kesimi: 30020h – 4001Fh

FA = 30020h + 0000h = 30020h → AL = 5Ah. 3000h:0020h ile 3002h:0000h aynı bayttır.

DS3002hbağılFFFFhFA4001Fhbayt5AhFA = DS × 10h + bağıl = 30020h + FFFFhveri kesimi: 30020h – 4001Fh

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.

  1. Bağıl konumu 0–Fh aralığında olan (normalleştirilmiş) kesim:bağıl konum yazımı nedir?
  2. DS = 4000h ise bu bayta erişmek için bağıl konum ne olmalıdır?
  3. DS = 3000h iken bu bayta DS ile erişilebilir mi?
  4. Bu fiziksel adresin kaç farklı kesim:bağıl konum yazımı vardır?
Cevabı göster
  1. İlk 4 basamak kesim, son basamak bağıl konum: 4B7Ch:0009h.
  2. 4B7C9h − 40000h = B7C9h → 4000h:B7C9h.
  3. Hayır: 4B7C9h − 30000h = 1B7C9h, 16 bite (FFFFh) sığmaz. 3000h kesimi 30000h–3FFFFh'yi kapsar.
  4. 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.

Son

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