Bölüm 4: Bellek Erişimi

Bölüm 4: Bellek Erişimi · Çalışma Soruları
Adresleme modlarıEtkin adresVarsayılan kesimAdres hatlarıFiziksel adresbyte ptrLittle-endianMOV kurallarıVideo belleğiDizi erişimi
Sercan KÜLCÜ

Ç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

Hesap Sorusu · Kesim ve Bağıl Konum

Soru 6: 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 7: 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 8: 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 toplamada eldeyi yanlış taşımaktır.

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

Soru 9: 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 kesimi kaydırmadan yazmaktır.

Hesap Sorusu · Kesim ve Bağıl Konum

Soru 10: İ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 Türü

Soru 11: 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 Türü

Soru 12: 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 13: 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 14: 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 15: 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 16: Adres mi, Değer mi?

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

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

B: MASM sözdiziminde 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 17: Toplamı Bellekte Biriktirmek

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). 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: [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 18: Bayt Dizisi

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