Bölüm 2: 8086 Yazmaçlar

Bölüm 2: 8086 Yazmaçlar · Çalışma Soruları
Yazmaç kümesiAH ve ALCX ve LOOPMUL / DIVSP ve yığınSI, DI ve DFDurum bayraklarıKontrol bayraklarıEtkin adresAdresleme modları
Sercan KÜLCÜ

Çoktan Seçmeli · Yazmaç Kümesi

Soru 1: Kesim Yazmaçlarının Görevi

8086'da CS, DS, SS ve ES kesim yazmaçları ne tutar?

A: Kesim yazmacı bir paragraf numarası tutar: kesim tabanı = yazmaç × 10h. DS = 2000h ise veri kesimi 20000h'de başlar ve 2FFFFh'ye kadar uzanır. Kesim içindeki bağıl konumları IP, SP, BP, SI, DI ve BX gibi yazmaçlar tutar; veri ve sonuçlar genel amaçlı yazmaçlardadır.

Çıktı Sorusu · Yazmaç Kümesi

Soru 2: AH ve AL

Her komuttan sonra AX ve CF kaçtır?

MOV AX, 12F0h
ADD AL, 20h
INC AH
ADD AX, 0F0h
Cevabı göster
KomutAXCF
MOV AX, 12F0h12F0h0
ADD AL, 20h1210h1
INC AH1310h1
ADD AX, 0F0h1400h0

F0h + 20h = 110h: 8 bitlik işlemde elde AH'ye geçmez, CF'ye gider; AL = 10h, AH değişmez. INC CF'ye dokunmaz. Son toplama 16 bitliktir: 1310h + 00F0h = 1400h, elde AH'ye geçer.

Çoktan Seçmeli · Genel Amaçlı Yazmaçlar

Soru 3: CX Yazmacı

CX yazmacının örtük (komutta yazılmadan) kullanıldığı görev hangisidir?

B: CX (count): LOOP önce CX'i azaltır, sıfır değilse atlar; REP dizgi komutunu CX kez tekrarlar; SHL AX, CL gibi çok bitlik kaydırmada sayı CL'dedir. Yüksek yarı ve port numarası DX'in, dizgi hedefi DI'nin, yığın çerçevesi tabanı BP'nin görevidir.

Çoktan Seçmeli · Genel Amaçlı Yazmaçlar

Soru 4: Adres Tutabilen Yazmaç

Aşağıdaki komutlardan hangisi 8086'da derlenmez?

C: Köşeli parantez içinde yalnızca BX, BP, SI ve DI (ve bir yer değiştirme) kullanılabilir. AX, CX ve DX adresleme yazmacı değildir; veri yazmaçlarından adres tutabilen tek yazmaç BX'tir. Doğrusu: MOV BX, CX + MOV AX, [BX].

Adım Adım Çalıştırma · Genel Amaçlı Yazmaçlar

Soru 5: MUL ve DIV ile DX:AX

Her komuttan sonra DX, AX, BX, CX kaçtır? MUL sonrasında CF ve OF neden 1 olur? DIV'in bölümü ve kalanı nereye yazılır?

DX0000hAX0300hBX0000hCX0000hCF0OF0DX:AX = 00000300h

AX = 0300h (768).

DX0000hAX0300hBX0200hCX0000hCF0OF0DX:AX = 00000300h

BX = 0200h (512).

DX0006hAX0000hBX0200hCX0000hCF1OF1DX:AX = 00060000h

16 bitlik MUL: DX:AX = AX × BX = 768 × 512 = 393 216 = 0006 0000h → DX = 0006h, AX = 0000h. Yüksek yarı sıfır değil → CF = OF = 1; SF, ZF, AF, PF tanımsız.

DX0006hAX0000hBX0200hCX0007hCF1OF1DX:AX = 00060000h

CX = 7. Bölünen olarak DX:AX'teki 32 bitlik değer kalır.

DX0005hAXDB6DhBX0200hCX0007hCF?OF?DX:AX = 0005DB6Dh

DIV CX: 393 216 / 7 = 56 173 kalan 5 → bölüm AX = DB6Dh, kalan DX = 0005h. Bölüm 16 bite sığdığı için bölme hatası yok; altı bayrak tanımsız (?).

mov ax, 0300h
mov bx, 0200h
mul bx
mov cx, 0007h
div cx

Çıktı Sorusu · Genel Amaçlı Yazmaçlar

Soru 6: LOOP Kaç Kez Döner?

Program bittiğinde AX kaçtır? Birinci satır MOV CX, 0 olsaydı döngü kaç kez döner, AX kaç olurdu?

MOV CX, 4
MOV AX, 1
D: ADD AX, AX
LOOP D
Cevabı göster

Gövde CX = 4, 3, 2, 1 için çalışır; her turda AX ikiye katlanır: 1 → 2 → 4 → 8 → 16. AX = 0010h, CX = 0.

LOOP önce CX'i azaltır, sonra sınar. CX = 0 ile girilirse ilk LOOP CX'i FFFFh yapar; döngü 65 536 kez döner. 265536 16 bite sığmaz: 16. turdan sonra AX = 0 olur ve öyle kalır → AX = 0000h.

Bu tuzaktan korunmak için döngüden önce JCXZ ile CX = 0 durumu atlanır.

Çoktan Seçmeli · İşaretçi ve İndis Yazmaçları

Soru 7: Yığın İşaretçisi

Yığın işaretçisi (SP) için hangisi doğrudur?

D: SP 16 bittir ve SS kesimi içinde yığının tepesinin bağıl konumunu tutar. Yığın düşük adreslere doğru büyür: PUSH SP ← SP − 2, sonra yazma; POP önce okuma, sonra SP ← SP + 2. Yığındaki öğeler hep 16 bittir; POP eski hücreyi silmez, yalnızca geçersiz sayar.

Adım Adım Çalıştırma · İşaretçi ve İndis Yazmaçları

Soru 8: PUSH ve POP İzleme

.COM programında yığın başlangıçta boş (SP = FFFEh). Her komuttan sonra AX, BX, CX, SP ve yığın ne olur?

AX1234hBX0000hCX0000hSPFFFEhSS:FFFAFFFCFFFE←SP

AX = 1234h. Yığın boş: SP = FFFEh (.COM programı).

AX1234hBXABCDhCX0000hSPFFFEhSS:FFFAFFFCFFFE←SP

BX = ABCDh.

AX1234hBXABCDhCX0000hSPFFFChSS:FFFAFFFC1234←SPFFFE

PUSH AX: SP = FFFEh − 2 = FFFCh, [FFFCh] = 1234h (34h düşük adreste).

AX1234hBXABCDhCX0000hSPFFFAhSS:FFFAABCD←SPFFFC1234FFFE

PUSH BX: SP = FFFAh, [FFFAh] = ABCDh. Tepede ABCDh var.

AX1234hBXABCDhCXABCDhSPFFFChSS:FFFAABCDFFFC1234←SPFFFE

POP CX: tepedeki ABCDh CX'e, SP = FFFCh. FFFAh'deki değer silinmez, yalnızca geçersiz sayılır.

AX0000hBXABCDhCXABCDhSPFFFChSS:FFFAABCDFFFC1234←SPFFFE

AX = 0. Yığın değişmez.

AX1234hBXABCDhCXABCDhSPFFFEhSS:FFFAABCDFFFC1234FFFE←SP

POP AX: 1234h geri gelir, SP = FFFEh. Sonuç: AX = 1234h, BX = CX = ABCDh; SS:FFFAh'de hâlâ CDh AB baytları durur.

mov ax, 1234h
mov bx, 0ABCDh
push ax
push bx
pop cx
mov ax, 0
pop ax

Çıktı Sorusu · İşaretçi ve İndis Yazmaçları

Soru 9: Geriye Doğru Kopyalama

DS = ES ve DS:0200h–0204h'de "ABCDE" dizgisi var. Program bittiğinde SI, DI ve CX kaçtır? Hangi baytlar hangi sırayla kopyalanır? DS:0300h–0304h'de ne olur?

STD
MOV SI, 0204h
MOV DI, 0304h
MOV CX, 5
REP MOVSB
Cevabı göster

STD → DF = 1: her adımda SI ve DI 1 azalır. Kopyalama sondan başa yapılır: 0204h → 0304h ('E'), 0203h → 0303h ('D'), …, 0200h → 0300h ('A').

Sonuç: SI = 01FFh, DI = 02FFh, CX = 0; DS:0300h–0304h = "ABCDE", sıra korunur.

Geriye doğru kopyalama, hedef kaynağın biraz ilerisinde olan çakışan alanlarda gerekir; ileri yönde (CLD) kopyalasaydık kaynağın henüz okunmamış baytlarının üzerine yazardık.

Çoktan Seçmeli · İşaretçi ve İndis Yazmaçları

Soru 10: Dizgi Komutunun İşlenenleri

MOVSB komutunun kaynağı ve hedefi nedir?

A: Dizgi komutlarında kaynak hep DS:SI, hedef hep ES:DI'dir; işlenenler komutta yazılmaz (örtük). Her adımdan sonra SI ve DI, DF'ye göre 1 (bayt) ya da 2 (sözcük) artar ya da azalır. Dizgi komutu dışında [DI] sıradan bir adrestir ve DS kesimini kullanır.

Çoktan Seçmeli · Bayrak Yazmacı

Soru 11: Durum mu, Kontrol mü?

Aşağıdaki bayraklardan hangisi bir durum bayrağı değil, kontrol bayrağıdır?

B: Durum bayraklarını (CF, PF, AF, ZF, SF, OF) işlemci her aritmetik/mantık işleminden sonra sonuca göre kendisi kurar. Kontrol bayraklarını (TF, IF, DF) programcı ayarlar: TF = 1 iken her komuttan sonra INT 1 oluşur ve program tek adımda çalıştırılabilir.

Çoktan Seçmeli · Bayrak Yazmacı

Soru 12: BCD Toplama

MOV AL, 38h / ADD AL, 29h / DAA çalışıyor (paketli BCD: 38 + 29). ADD'den sonraki bayrak durumu ve DAA'nın sonucu için hangisi doğrudur?

C: 8h + 9h = 11h: bit 3'ten bit 4'e elde → AF = 1; ikili sonuç 61h, BCD olarak yanlıştır. DAA, AF = 1 olduğu için düşük basamağa 6 ekler: 61h + 06h = 67h; 38 + 29 = 67 ✓. Yüksek basamak 9'u aşmadığı ve elde çıkmadığı için CF = 0 kalır.

Adım Adım Çalıştırma · Bayrak Yazmacı

Soru 13: Bayrak İzleme

Her komuttan sonra AL ve CF, ZF, SF, OF, PF, AF kaçtır? (Başlangıçta bayraklar 0.)

AL64h= 0110 0100bişaretli: 100CF0ZF0SF0OF0PF0AF0

AL = 64h (+100). MOV bayrakları değiştirmez.

AL96h= 1001 0110bişaretli: −106CF0ZF0SF1OF1PF1AF0

64h + 32h = 96h: +100 + 50 = 150 > 127 → OF = 1, SF = 1. İşaretsiz 150 doğru → CF = 0. 4 + 2 nibble eldesi yok → AF = 0; 1001 0110'da dört 1 → PF = 1.

ALFFh= 1111 1111bişaretli: −1CF1ZF0SF1OF0PF1AF1

96h − 97h = FFh: küçükten büyük çıkarıldı → CF = 1; AF = 1. İşaretli −106 − (−105) = −1 doğru → OF = 0.

AL00h= 0000 0000bişaretli: 0CF1ZF1SF0OF0PF1AF1

FFh + 1 = 00h → ZF = 1. INC CF'yi değiştirmez: CF = 1 kaldı.

AL00h= 0000 0000bişaretli: 0CF1ZF0SF1OF0PF1AF1

CMP AL, 1: 00h − 01h hesaplanır ama AL'ye yazılmaz. Ödünç → CF = 1, sonuç FFh → SF = 1, ZF = 0. AL hâlâ 00h.

mov al, 64h
add al, 32h
sub al, 97h
inc al
cmp al, 1

Hesap Sorusu · Bayrak Yazmacı

Soru 14: Bayrakları Elle Hesaplamak

Her işlemden sonra sonucu ve CF, ZF, SF, OF, PF, AF bayraklarını bulun.

  1. MOV AX, 7FF8h / ADD AX, 0009h
  2. MOV BX, 0005h / SUB BX, 0007h
Cevabı göster
SonuçCFZFSFOFPFAF
18001h001101
2FFFEh101001
  1. +32760 + 9 = 32769 > 32767 → OF = 1, MSB = 1 → SF = 1; işaretsiz toplam sığdı → CF = 0. 8h + 9h nibble eldesi → AF = 1. PF yalnız düşük bayta bakar: 01h'de bir tane 1 → PF = 0.
  2. 5 − 7: ödünç → CF = 1; işaretli 5 − 7 = −2 doğru → OF = 0. 5h − 7h nibble ödüncü → AF = 1. Düşük bayt FEh'de yedi tane 1 → PF = 0.

Kod Yazma · Bayrak Yazmacı

Soru 15: Tuzak Bayrağını Kurmak

TF'yi (bit 8) doğrudan kuran bir komut yoktur. Diğer bayrakları değiştirmeden TF'yi 1 yapan kısa bir kod yazın. TF = 1 olduktan sonra her komutun ardından ne olur? IF ve DF için neden böyle bir koda gerek yoktur?

Cevabı göster
PUSHF            ; FLAGS yığına
POP AX           ; AX = FLAGS
OR AX, 0100h     ; bit 8 = TF ← 1
PUSH AX
POPF             ; FLAGS = AX

OR yalnızca bit 8'i 1 yapar, diğer bitler korunur. Silmek için AND AX, 0FEFFh kullanılır.

TF = 1 iken her komuttan sonra tip 1 kesme (INT 1) oluşur; hata ayıklayıcı programı komut komut yürütür. IF ve DF'nin kendi komutları vardır: STI/CLI ve STD/CLD.

Çoktan Seçmeli · Adresleme Modları

Soru 16: 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 17: 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 18: 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 19: 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

Çoktan Seçmeli · Adresleme Modları

Soru 20: Göreceli Atlama

0120h adresindeki 2 baytlık JNZ komutunun makine kodu 75 F4. ZF = 0 iken atlama sonrası IP kaç olur?

B: Uzaklık, atlama komutundan sonraki komutun adresine eklenir: IPsonraki = 0120h + 2 = 0122h. F4h işaretli olarak −12'dir (ikiye tümleyen): 0122h − 0Ch = 0116h. 0114h uzaklığı komutun kendi adresine eklemekten, 012Ch işareti yok saymaktan gelir; 0122h ise ZF = 1 iken (atlama yokken) IP'nin değeridir.

Son

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