Bölüm 4: 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
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?
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 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?
BX ← num1'in adresi (bağıl konum). 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: [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 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.