Bölüm 4.1: Bellek Erişimi
Ç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)
1) Sonraki komut CS:IP'dedir: 34000h + 4050h = 38050h. 2) Yazmaçtan yazmaca kopya: AX = 5000h; CX ve bayraklar değişmez.
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.
[BX+SI+12h][BP+DI-4][DI+0FFF8h]ES:[BX]DS:[BP+SI]
Cevabı göster
| EA | Kesim | FA | |
|---|---|---|---|
| 1 | 0150 + 0034 + 12 = 0196h | DS | 21196h |
| 2 | 0A00 + 0010 − 4 = 0A0Ch | SS | 30A0Ch |
| 3 | 0010 + FFF8 = 1 0008 → 0008h | DS | 21008h |
| 4 | 0150h | ES | 50150h |
| 5 | 0A00 + 0034 = 0A34h | DS | 21A34h |
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ı | Neden | Doğrusu |
|---|---|---|
MOV [SI], [DI] | bellekten belleğe MOV yok | MOV AL, [DI]MOV [SI], AL |
MOV AX, [SI+DI] | iki indis birlikte olmaz | MOV BX, SIMOV AX, [BX+DI] |
MOV [BX], 5 | boyut belirsiz | MOV BYTE PTR [BX], 5 |
MOV ES, DS | kesimden kesime MOV yok | PUSH DSPOP ES |
MOV AL, BX | 8 ve 16 bit uyuşmaz | MOV 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?
Anlık mod: BX = 0300h. Sabit komutun içindedir; bellek erişimi yok.
SI = 0003h.
Doğrudan mod: EA = 0301h → AL = 22h.
Taban indisli: EA = BX + SI = 0303h → AH = 44h; AX = 4422h.
Taban indisli yer değiştirme: EA = 0300h + 3 + 1 = 0304h → AL = 22h + 55h = 77h.
DI = 0004h.
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?
AX = 1234h: AH = 12h, AL = 34h.
BX = 0200h: veri kesiminde bir bağıl konum.
Sözcük yazma, little-endian: [0200h] ← AL = 34h, [0201h] ← AH = 12h.
SI = 1.
EA = BX + SI = 0201h → CL ← 12h; CH = 00h → CX = 0012h.
Sözcük okuma: DL ← [0200h] = 34h, DH ← [0201h] = 12h → DX = 1234h (baytlar yeniden birleşir).
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?
BX ← num1'in adresi (bağıl konum): kod 21 bayt olduğundan 0100h + 15h = 0115h. Dört sözcük: 5, 10, 15, 0.
AX ← [BX] = 0005h.
[BX+6] ← AX: dördüncü sözcük artık 0005h.
AX ← [BX+2] = 000Ah.
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.
AX ← [BX+4] = 000Fh.
[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.