Bölüm 4.1: Bellek Erişimi

Bölüm 4.1: Bellek Erişimi · Çalışma Soruları
Adresleme modlarıEtkin adresGeçersiz işlenenlerVarsayılan kesimAdres hatlarıFiziksel adresbyte ptrLittle-endianMOV kurallarıVideo belleğiDizi erişimi
Sercan KÜLCÜ · Giresun Üniversitesi · Bilgisayar Mühendisliği

Çoktan Seçmeli · Adresleme Modları

Soru 1: MOV AX, [BX]

MOV AX, [BX] komutu hangi adresleme modunu kullanır?

A: BX bir veri değil, bir bağıl konum (adres) tutar; işlemci DS:BX'teki sözcüğü AX'e alır. Karşılaştırma: doğrudan MOV AX, [1234h], yazmaç MOV AX, BX, tabanlı + yer değiştirme MOV AX, [BX+4], anlık MOV AX, 1234h.

Çoktan Seçmeli · Adresleme Modları

Soru 2: Varsayılan Kesim

DS = 2000h, SS = 3000h, BX = 1000h, BP = 0100h, SI = 0020h. MOV AX, [BP+SI+4] hangi fiziksel adresten okur?

D: EA = BP + SI + 4 = 0124h. Adreste BP olduğu için varsayılan kesim SS: 30000h + 0124h = 30124h. 20124h kesimi DS sanmaktır; 21024h ve 31024h BP yerine BX'i almaktır. 8086'da taban yazmaçları BX ve BP, indis yazmaçları SI ve DI'dır; [SP] adreslemede kullanılamaz.

Adım Adım Çalıştırma · Adresleme Modları

Soru 3: Ortak Veriyle Üç Soru

1) Sonraki komutun fiziksel adresi nedir? 2) MOV AX, CX sonrası AX? 3) MOV AX, [BX] sonrası AX? ([20151h] = 00h)

AX5000AHALBX0150BHBLCX5000CHCLDS2000bellek (fiziksel adres)201500820151000015080

1) Sonraki komut CS:IP'dedir: 34000h + 4050h = 38050h. 2) Yazmaçtan yazmaca kopya: AX = 5000h; CX ve bayraklar değişmez.

AX0008AHALBX0150BHBLCX5000CHCLDS2000bellek (fiziksel adres)2015008201510000150802000h × 10h + 0150h = 20150h

3) EA = BX = 0150h, kesim DS → 20150h. Sözcük okunur: AL ← 08h, AH ← [20151h] = 00h → AX = 0008h. [00150h] = 80h çeldiricidir (DS = 0 sanmak).

; CS=3400h IP=4050h DS=2000h
; BX=0150h CX=5000h
; [00150h]=80h [20150h]=08h
MOV AX, CX     ; 2. soru
MOV AX, [BX]   ; 3. soru

Çoktan Seçmeli · Adresleme Modları

Soru 4: MOV CL, [BX]

BX = 0050h, DS = 2000h, CX = 5000h, [00500h] = 80h, [20050h] = 08h. MOV CL, [BX] sonrası CX ne olur?

C: Fiziksel adres DS × 10h + BX = 20050h → CL ← 08h. Hedef 8 bit olduğundan tek bayt okunur; CH (50h) değişmez → 5008h. 5080h adresi BX × 10h sanmaktır; 0008h CH'nin sıfırlandığını sanmaktır; 0050h adresi veri sanmaktır.

Kod Okuma · Adresleme Modları

Soru 5: Taban + Yer Değiştirme

Kod çalışınca AX ve BX ne olur? (b) Veriler 8, 10, 12 olsaydı? (c) Veriler DW 5, 10, 15, 0 olup RET'ten önce MOV [SI+6], AX eklenseydi?

MOV SI, OFFSET SAYI1
MOV AX, [SI]
MOV BX, [SI+2]
ADD AX, BX
MOV BX, [SI+4]
ADD AX, BX
RET
SAYI1 DW 7
      DW 9
      DW 11
Cevabı göster
  • AX = 001Bh (7 + 9 + 11 = 27), BX = 000Bh
  • Etiketsiz DW satırları bir öncekinin arkasına yerleşir: 7 → SAYI1, 9 → SAYI1+2, 11 → SAYI1+4. Sözcükler 2 bayt olduğundan yer değiştirme 2'şer artar.
  • (b) AX = 001Eh, BX = 000Ch
  • (c) AX = 001Eh, BX = 000Fh, dördüncü sözcük [SI+6] = 001Eh

Çoktan Seçmeli · Adresleme Modları

Soru 6: Adresleme Modunun Adı

MOV AX, [BX+DI+8] komutunun kaynak işleneni hangi adresleme modundadır?

D: Etkin adres taban yazmacı (BX), indis yazmacı (DI) ve sabit yer değiştirmenin (8) toplamıdır. Taban modunda yalnızca BX/BP + yer değiştirme ([BX+4]), indis modunda yalnızca SI/DI + yer değiştirme ([DI+8]) bulunur; yazmaç dolaylı modda ise tek bir yazmaç vardır ([BX]). Taban ve indis yazmacı birlikteyse mod taban indislidir; sabit de eklenince taban indisli yer değiştirme olur.

Hesap Sorusu · Adresleme Modları

Soru 7: Etkin ve Fiziksel Adres

DS = 2100h, SS = 3000h, ES = 5000h, BX = 0150h, BP = 0A00h, SI = 0034h, DI = 0010h. Her bellek işleneninin etkin adresini (EA) ve fiziksel adresini bulun.

  1. [BX+SI+12h]
  2. [BP+DI-4]
  3. [DI+0FFF8h]
  4. ES:[BX]
  5. DS:[BP+SI]
Cevabı göster
EAKesimFA
10150 + 0034 + 12 = 0196hDS21196h
20A00 + 0010 − 4 = 0A0ChSS30A0Ch
30010 + FFF8 = 1 0008 → 0008hDS21008h
40150hES50150h
50A00 + 0034 = 0A34hDS21A34h

BP içeren adres varsayılan olarak SS'yi kullanır (2); önek bunu değiştirir (5). EA 16 bitte sarar (3): FFF8h, −8 gibi davranır.

Hata Bulma · Adresleme Modları

Soru 8: Geçersiz İşlenenler

Aşağıdaki satırların her birindeki hatayı açıklayın ve aynı işi yapan geçerli kodu yazın.

MOV [SI], [DI]
MOV AX, [SI+DI]
MOV [BX], 5
MOV ES, DS
MOV AL, BX
Cevabı göster
HatalıNedenDoğrusu
MOV [SI], [DI]bellekten belleğe MOV yokMOV AL, [DI]
MOV [SI], AL
MOV AX, [SI+DI]iki indis birlikte olmazMOV BX, SI
MOV AX, [BX+DI]
MOV [BX], 5boyut belirsizMOV BYTE PTR [BX], 5
MOV ES, DSkesimden kesime MOV yokPUSH DS
POP ES
MOV AL, BX8 ve 16 bit uyuşmazMOV AL, BL

Bir bayt dizgisi için ilk satırın yerine MOVSB de kullanılabilir (ES:DI ← DS:SI; yön ters olur).

Adım Adım Çalıştırma · Adresleme Modları

Soru 9: Modlar Bir Arada

DS:0300h'den itibaren bellekte 11 22 33 44 55 66 77 baytları var. Her komutun adresleme modu ve etkin adresi nedir? Sonunda AX ve bellek ne olur?

030011030122030233030344030455030566030677AX0000hBX0300hSI0000hDI0000h

Anlık mod: BX = 0300h. Sabit komutun içindedir; bellek erişimi yok.

030011030122030233030344030455030566030677AX0000hBX0300hSI0003hDI0000h

SI = 0003h.

030011030122030233030344030455030566030677AX0022hBX0300hSI0003hDI0000hEA=0301

Doğrudan mod: EA = 0301h → AL = 22h.

030011030122030233030344030455030566030677AX4422hBX0300hSI0003hDI0000hEA=0303

Taban indisli: EA = BX + SI = 0303h → AH = 44h; AX = 4422h.

030011030122030233030344030455030566030677AX4477hBX0300hSI0003hDI0000hEA=0304

Taban indisli yer değiştirme: EA = 0300h + 3 + 1 = 0304h → AL = 22h + 55h = 77h.

030011030122030233030344030455030566030677AX4477hBX0300hSI0003hDI0004h

DI = 0004h.

030011030122030233030344030455030577030644AX4477hBX0300hSI0003hDI0004hEA=0305

EA = 0300h + 4 + 1 = 0305h ← AX: [0305h] = 77h (AL), [0306h] = 44h (AH). Little-endian: düşük bayt düşük adrese.

mov bx, 0300h
mov si, 3
mov al, [0301h]
mov ah, [bx+si]
add al, [bx+si+1]
mov di, 4
mov [bx+di+1], ax

Hesap Sorusu · Kesim ve Bağıl Konum

Soru 10: Adres Hatları

a) 20 bitlik adres yolu kaç farklı bellek konumu adresler?
b) 4 KB RAM için kaç adres hattı gerekir?
c) 50 GB ve 90 GB bellek için en az kaç hat gerekir?
d) 8086'da bir kesim neden en çok 64 KB'tır?

Cevabı göster
  • a) 2²⁰ = 1 048 576 konum; 8086'da her konum bir bayt → 1 MB (00000h–FFFFFh)
  • b) 4 × 1024 = 4096 = 2¹² → 12 hat (A0–A11)
  • c) 2³⁵ = 32 GB < 50 GB ≤ 64 GB = 2³⁶ → 36 hat; 2³⁶ = 64 GB < 90 GB ≤ 128 GB → 37 hat. Kural: 2ⁿ ≥ kapasite olan en küçük n.
  • d) Bağıl konum 16 bittir: 2¹⁶ = 64 KB. Kesimler 16 baytlık paragraf sınırlarında başlar ve üst üste binebilir.

Çoktan Seçmeli · Kesim ve Bağıl Konum

Soru 11: Bellek Kapasitesi

Bir bellek yongasının 20 adres hattı ve 16 veri hattı var. Kapasitesi nedir?

D: Konum sayısı 2²⁰ = 1 M; her konum 16 bit = 2 bayt → 1 M × 2 B = 2 MB (= 16 Mbit). 16 MB, bitleri bayt saymaktan doğar. 8086 belleği bayt adreslidir; orada 20 hat 1 MB demektir.

Çoktan Seçmeli · Kesim ve Bağıl Konum

Soru 12: Fiziksel Adres

CS = 348Ah ve IP = 4214h ise sıradaki komutun 20 bitlik fiziksel adresi nedir?

A: CS × 10h + IP = 348A0h + 4214h = 38AB4h. 0769Eh kaydırmadan toplamaktır; 455CAh kesim yerine IP'yi kaydırmaktır; 390B4h bir toplama hatasıdır (doğru toplamda hiç elde oluşmaz).

Çoktan Seçmeli · Kesim ve Bağıl Konum

Soru 13: Hangi Bağıl Konum?

CS = 4042h; BX = 2025h, IP = 0580h, DI = 4247h. CS:IP'nin gösterdiği bellek konumunun fiziksel adresi nedir?

B: CS her zaman IP ile eşleşir: 40420h + 0580h = 409A0h. 42445h BX'i, 44667h DI'yı kullanmaktır; BX ve DI varsayılan olarak DS ile (DI dizgi hedefinde ES ile) eşleşir. 40A20h bir toplama hatasıdır (420h + 580h = 9A0h).

Hesap Sorusu · Kesim ve Bağıl Konum

Soru 14: İki Yönde Hesap

a) CS = 5500h, IP = 1200h ise fiziksel adres?
b) CS = 4321h, IP = 1000h ise?
c) Fiziksel 12345h adresine erişmek için DS ve SI ne olabilir? DS en küçük ve en büyük kaç olabilir; kaç farklı DS:SI çifti vardır?

Cevabı göster
  • a) 55000h + 1200h = 56200h (17500h IP'yi kaydırmak, 67000h 55000h + 12000h demektir)
  • b) 43210h + 1000h = 44210h
  • c) Örneğin DS = 1230h, SI = 0045h (12300h + 45h); ya da 1234:0005, 1000:2345. SI 16 bit olduğundan DS en küçük 0235h (SI = FFF5h), en büyük 1234h (SI = 0005h) → 1234h − 0235h + 1 = 4096 çift.

Çoktan Seçmeli · Veri Tipi

Soru 15: Boyut Belirsizliği

Aşağıdakilerden hangisi BYTE PTR ya da WORD PTR eklenmeden derlenemez?

B: Bellek işleneni ile sabit arasında boyut belli değildir: 5 bir bayt mı (05) yoksa sözcük mü (05 00) yazılacak? MOV BYTE PTR [BX], 5 ya da MOV WORD PTR [BX], 5 gerekir. Diğerlerinde yazmaç işleneni boyutu belirler (AL, CL: 8 bit; AX: 16 bit).

Adım Adım Çalıştırma · Veri Tipi

Soru 16: Little-Endian ve XCHG

Başlangıçta CX = DX = 0, DS = 0700h. Kod çalışınca [0200h], [0201h], CX ve DX ne olur?

AX1234AHALBX0000BHBLCX0000CHCLDX0000DHDLSI0000DS:0200 … DS:0201020000020100

AX = 1234h: AH = 12h, AL = 34h.

AX1234AHALBX0200BHBLCX0000CHCLDX0000DHDLSI0000DS:0200 … DS:0201020000020100

BX = 0200h: veri kesiminde bir bağıl konum.

AX1234AHALBX0200BHBLCX0000CHCLDX0000DHDLSI0000DS:0200 … DS:0201020034020112

Sözcük yazma, little-endian: [0200h] ← AL = 34h, [0201h] ← AH = 12h.

AX1234AHALBX0200BHBLCX0000CHCLDX0000DHDLSI0001DS:0200 … DS:0201020034020112

SI = 1.

AX1234AHALBX0200BHBLCX0012CHCLDX0000DHDLSI0001DS:0200 … DS:0201020034020112

EA = BX + SI = 0201h → CL ← 12h; CH = 00h → CX = 0012h.

AX1234AHALBX0200BHBLCX0012CHCLDX1234DHDLSI0001DS:0200 … DS:0201020034020112

Sözcük okuma: DL ← [0200h] = 34h, DH ← [0201h] = 12h → DX = 1234h (baytlar yeniden birleşir).

AX1234AHALBX0200BHBLCX0012CHCLDX3412DHDLSI0001DS:0200 … DS:0201020034020112

XCHG yarıları takas eder → DX = 3412h. MOV ve XCHG bayrakları etkilemez.

MOV AX, 1234h
MOV BX, 0200h
MOV [BX], AX
MOV SI, 1
MOV CL, [BX+SI]
MOV DX, [BX]
XCHG DL, DH

Çoktan Seçmeli · MOV Komutu

Soru 17: MOV: Geçerli mi?

Aşağıdaki komutlardan hangisi geçerlidir?

C: CS kaynak olarak okunabilir: MOV AX, CS geçerlidir. CS hedef olamaz (A); iki kesim yazmacı arasında doğrudan MOV yoktur, değer bir genel yazmaçtan geçer (B); BX ve BP aynı adreste bir arada kullanılamaz (D).

Kod Okuma · Program Örneği

Soru 18: Video Belleği

80×25 metin ekranında her hücre 2 bayttır (karakter + renk). a) Kod hangi satır ve sütuna hangi karakteri yazar? b) Hangi fiziksel adreslere ne yazılır? c) Neden DS'ye doğrudan MOV DS, 0B800h yazılmadı?

ORG 100h
MOV AX, 0B800h
MOV DS, AX
MOV BX, 338h
MOV CX, 1E41h
MOV [BX], CX
RET
Cevabı göster
  • a) Bağıl adres = (satır × 80 + sütun) × 2 → 338h = 824 = 412 × 2 → 412 = 5 × 80 + 12: satır 5, sütun 12 (0'dan sayılarak). CL = 41h = 'A'.
  • b) B8000h + 338h = B8338h ← 41h (karakter), B8339h ← 1Eh (renk: mavi zemin, sarı yazı). Sözcük little-endian yazılır.
  • c) Kesim yazmacına sabit yüklenemez; değer önce AX'e alınır.

Hesap Sorusu · MOV Örnekleri

Soru 19: Doğrudan Adresleme

.COM programında DS = 0700h. MOV AX, [0x1000] ve MOV [0x2000], BX hangi fiziksel adreslere erişir? (b) MOV BX, [0x1500] ve MOV [0x2200], AX için?

Cevabı göster
  • Köşeli parantezdeki sayı bir bağıl konumdur (doğrudan adresleme); veri için varsayılan kesim DS.
  • MOV AX, [0x1000]: 07000h + 1000h = 08000h; AL ← [08000h], AH ← [08001h]
  • MOV [0x2000], BX: 07000h + 2000h = 09000h; BL → 09000h, BH → 09001h
  • (b) BX ← 08500h–08501h sözcüğü; AX → 09200h (AL) ve 09201h (AH)

.COM programında CS = DS olduğundan aynı sonuç CS ile hesaplansa da çıkar; ama veri erişiminin kesimi DS'dir (BP'li adreslerde SS).

Çoktan Seçmeli · MOV Örnekleri

Soru 20: Adres mi, Değer mi?

MASM/emu8086 söz diziminde mov si, num1 SI'ya ne yükler?

mov si, num1
mov ax, [si]
ret
num1 dw 5, 10, 15, 0

B: MASM söz diziminde veri tanımlı bir ad değişkendir: mov si, num1 içeriği (0005h) yükler. [si] artık DS:0005'teki ilgisiz baytları okur. Adres için mov si, offset num1 ya da lea si, num1 yazılır (NASM'da ise ad doğrudan adres demektir).

Adım Adım Çalıştırma · MOV Örnekleri

Soru 21: Toplamı Bellekte Biriktirmek

ORG 100h ile başlayan .COM programında kod çalışınca num1'in dört sözcüğü ve AX ne olur? Neden her sayı önce AX'e alınıyor?

AX0000AHALBX0115BHBLnum1 (bayt bayt)+005+100+20A+300+40F+500+600+700

BX ← num1'in adresi (bağıl konum): kod 21 bayt olduğundan 0100h + 15h = 0115h. Dört sözcük: 5, 10, 15, 0.

AX0005AHALBX0115BHBLnum1 (bayt bayt)+005+100+20A+300+40F+500+600+700

AX ← [BX] = 0005h.

AX0005AHALBX0115BHBLnum1 (bayt bayt)+005+100+20A+300+40F+500+605+700

[BX+6] ← AX: dördüncü sözcük artık 0005h.

AX000AAHALBX0115BHBLnum1 (bayt bayt)+005+100+20A+300+40F+500+605+700

AX ← [BX+2] = 000Ah.

AX000AAHALBX0115BHBLnum1 (bayt bayt)+005+100+20A+300+40F+500+60F+700

ADD'in hedefi bellek olabilir ama iki işlenen birden bellek olamaz; bu yüzden sayı önce AX'e alındı: [BX+6] = 0005h + 000Ah = 000Fh.

AX000FAHALBX0115BHBLnum1 (bayt bayt)+005+100+20A+300+40F+500+60F+700

AX ← [BX+4] = 000Fh.

AX000FAHALBX0115BHBLnum1 (bayt bayt)+005+100+20A+300+40F+500+61E+700

[BX+6] = 000Fh + 000Fh = 001Eh (30). Toplam bellektedir; AX = 000Fh.

mov bx, offset num1
mov ax, [bx]      ; 1. sayı
mov [bx+6], ax    ; sonuca yaz
mov ax, [bx+2]    ; 2. sayı
add [bx+6], ax    ; sonuca ekle
mov ax, [bx+4]    ; 3. sayı
add [bx+6], ax
ret
num1 dw 5, 10, 15, 0

Kod Okuma · MOV Örnekleri

Soru 22: Bayt Dizisi

ORG 100h ile başlayan .COM programında kod çalışınca AL, DL ve num1 ne olur? Yer değiştirmeler neden 1'er artıyor? 2. sayı DL yerine BL'ye okunsaydı ne olurdu?

mov bx, offset num1
mov al, [bx]      ; 1. sayı
mov dl, [bx+1]    ; 2. sayı
add al, dl
mov dl, [bx+2]    ; 3. sayı
add al, dl
mov [bx+3], al
ret
num1 db 5, 10, 15, 0
Cevabı göster
  • AL = 1Eh, DL = 0Fh, num1 = 05 0A 0F 1E
  • DB elemanları 1 bayttır: [BX], [BX+1], [BX+2], [BX+3]. Yazmaçlar da 8 bitlik seçilir (AL, DL).
  • BL, BX'in düşük baytıdır: okunan 0Ah adresin düşük baytının üzerine yazılır (BX = 010Ah olur); sonraki [bx+2] ve [bx+3] yanlış yere erişir, toplam num1+3'e yazılmaz.

Son

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