Bölüm 3: Assembly

Bölüm 3: Assembly · Çalışma Soruları
Assembly diliSistem yoluBIU ve EUAH, AL ve AXXCHGFiziksel adresIPBayraklarİlk programHatalar
Sercan KÜLCÜ

Çoktan Seçmeli · Assembly Dili

Soru 1: MOV AX, BX

Aşağıdakilerden hangisi 8086'daki MOV AX, BX komutu için doğrudur?

C: MOV hiçbir bayrağı değiştirmez. Intel sözdiziminde hedef soldadır: BX → AX (A yanlış). İki işlenen de yazmaç olduğundan yazmaç adresleme kullanılır (B yanlış). Komut 2 bayttır (89 D8h): IP 0100h'den 0102h'ye ilerler (D yanlış).

Çoktan Seçmeli · Bilgisayar Modeli

Soru 2: Sistem Yolu

8086'nın sistem yolu için hangisi doğrudur?

B: Adresi yalnız CPU üretir: adres yolu tek yönlüdür ve 20 hat 2²⁰ = 1 MB adresler. Veri yolu 16 hatlı ve çift yönlüdür (okuma ve yazma). Okuma/yazma (RD, WR) ve bellek/G/Ç (M/IO) bilgisi kontrol yolundadır.

Kısa Cevap · Bilgisayar Modeli

Soru 3: Bellekten Okuma Sırası

MOV AL, [bellek] yürütülürken bellekten okuma şu adımlarla olur; doğru sırası nedir? Yazma döngüsünde ne farklıdır?
(1) Bellek, istenen baytı veri yoluna koyar.
(2) CPU adresi adres yoluna koyar.
(3) CPU veri yolundaki baytı AL'ye yazar.
(4) Kontrol yolunda RD etkin olur (M/IO = bellek).

Cevabı göster

Sıra: 2 → 4 → 1 → 3. Önce adres, sonra “oku” sinyali; bellek veriyi koyar, CPU alır. 8086'da bu bir yol döngüsüdür (T1–T4, 4 saat periyodu).

Yazma döngüsünde 1. adımda veriyi CPU veri yoluna koyar ve WR sinyali etkin olur; bellek baytı saklar.

Komutun kendisi de aynı yolla getirilir: CPU, CS:IP'deki baytları okur ve IP'yi komut uzunluğu kadar artırır (getir – çöz – yürüt).

Çoktan Seçmeli · CPU'nun İçi

Soru 4: Komut Kuyruğu

8086'da EU önceki komutu yürütürken sıradaki komut baytlarını bellekten okuyup 6 baytlık kuyruğa koyan birim hangisidir?

D: Bellekle ve yollarla yalnızca BIU konuşur: komutları önden getirir, adresleri (kesim × 10h + bağıl konum) hesaplar. EU kuyruktan aldığı komutları çözer ve yürütür; ALU onun içindedir. İkisinin aynı anda çalışması basit bir boru hattıdır.

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

Soru 5: 8 Bitlik Yazmaç Parçaları

Başlangıçta yazmaçlar 0. Kod çalışınca AX, BX ve CX ne olur? (b) İlk satır MOV AX, 0x4231, son satır MOV CH, AH olsaydı?

AX4321AHALBX0000BHBLCX0000CHCL

AX ← 4321h: AH = 43h, AL = 21h. 0x öneki onaltılık demektir.

AX4321AHALBX0021BHBLCX0000CHCL

BL ← AL = 21h. Yalnız BX'in düşük baytı yazılır; BH = 00h kalır → BX = 0021h.

AX4321AHALBX0021BHBLCX0043CHCL

CL ← AH = 43h → CX = 0043h. MOV hiçbir bayrağı etkilemez. (b) MOV AX, 0x4231 · MOV BL, AL · MOV CH, AH ile: AX = 4231h, BX = 0031h, CX = 4200h.

MOV AX, 0x4321
MOV BL, AL
MOV CL, AH

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

Soru 6: MOV Kopyalar

AL = 50h ve BL = 40h iken MOV AL, BL çalışıyor. AL ve BL ne olur?

A: MOV kaynağı (BL) hedefe (AL) kopyalar; kaynak değişmez. Takas değildir (D, XCHG'nin sonucudur); hedef soldadır (C, yönü ters okumaktır).

Kod Okuma · Genel Amaçlı Yazmaçlar

Soru 7: XCHG ile Takas

Kod çalışınca CX ve DX ne olur? (b) İlk iki satır MOV CX, 07h ve MOV DX, 13h olsaydı? XCHG olmadan aynı takas nasıl yapılır?

MOV CX, 5h
MOV DX, 15h
XCHG CX, DX
Cevabı göster
  • CX = 0015h, DX = 0005h. 15h onaltılıktır (onluk 21); sonuç da onaltılık yazılır.
  • (b) CX = 0013h, DX = 0007h.
  • XCHG iki işleneni tek komutta değiştirir, bayrakları etkilemez. Olmasaydı geçici bir yazmaç gerekirdi:
MOV AX, CX   ; yedek
MOV CX, DX
MOV DX, AX

Hesap Sorusu · Kesim Yazmaçları

Soru 8: Fiziksel Adres

a) DS = 4A3Fh, SI = 0F2Ch ise [SI] hangi fiziksel adrestir?
b) Bu adresin normalize (bağıl konum 0–Fh) kesim:bağıl konum biçimi nedir?
c) FFFF:0020 hangi fiziksel adrese erişir?

Cevabı göster
  • a) DS × 10h = 4A3F0h; + 0F2Ch → 4B31Ch
  • b) Son onaltılık basamak bağıl konum olur: 4B31:000C (4B310h + Ch)
  • c) FFFF0h + 0020h = 100010h: 21 bit. 8086'nın adres yolu 20 bit olduğundan adres başa sarar → 00010h

Kesimler 16 baytta bir başladığından aynı adrese birçok çift karşılık gelir: 4B00:031C, 4A3F:0F2C …

Çoktan Seçmeli · Kesim Yazmaçları

Soru 9: Aynı Adres, Farklı Çiftler

Aşağıdaki kesim:bağıl konum çiftlerinden hangisi 2A3F0h fiziksel adresini göstermez?

A: 2A30:0F00 → 2A300h + 0F00h = 2B200h. Diğerleri: 2A3F0h + 0 · 2A000h + 3F0h · 20000h + A3F0h, hepsi 2A3F0h. Kesim değeri sağa bir 0 eklenerek (× 10h) bağıl konumla toplanır; bağıl konum kaydırılmaz.

Adım Adım Çalıştırma · Kesim Yazmaçları

Soru 10: Kesim ve Bağıl Konum

Fiziksel 2CA35h adresinde 77h, 2CA36h adresinde 88h var. Her bellek erişiminde hangi fiziksel adres okunur? Sonunda AX nedir?

AX2B00AHALDS0700SI0000BX0000BHBL

AX ← 2B00h. Kesim yazmacına sabit doğrudan yazılamadığı için değer önce AX'e alınır.

AX2B00AHALDS2B00SI0000BX0000BHBL

DS ← AX = 2B00h. Artık bellek işlenenleri 2B000h'den başlayan kesimdedir.

AX2B00AHALDS2B00SI1A35BX0000BHBL

SI ← 1A35h: bir bağıl konum (adres), veri değil.

AX2B77AHALDS2B00SI1A35BX0000BHBL2B000h + 1A35h = 2CA35h

[SI]: DS × 10h + SI = 2B000h + 1A35h = 2CA35h. Bayt okunur → AL = 77h.

AX2B77AHALDS2B00SI1A35BX1A35BHBL2B000h + 1A36h = 2CA36h

BX ← SI = 1A35h. Yazmaçtan yazmaca kopya; bellek okunmaz.

AX8877AHALDS2B00SI1A35BX1A35BHBL2B000h + 1A36h = 2CA36h

[BX+1]: etkin adres 1A36h, kesim yine DS → 2CA36h. AH = 88h → AX = 8877h.

MOV AX, 2B00h
MOV DS, AX
MOV SI, 1A35h
MOV AL, [SI]
MOV BX, SI
MOV AH, [BX+1]

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

Soru 11: IP ve Bayraklar

Program 0100h'den başlıyor. Her komuttan sonra IP, AL, BX ve CF, ZF, SF, OF ne olur?

AX007FAHALBX0000BHBLIP0102CF0ZF0SF0OF0

IP 0100h'den başlar; 2 baytlık komuttan sonra IP = 0102h, AL = 7Fh (+127). MOV bayrakları değiştirmez.

AX0080AHALBX0000BHBLIP0104CF0ZF0SF1OF1

7Fh + 1 = 80h: iki pozitif sayının toplamı negatif çıktı → OF = 1, SF = 1. İşaretsiz 128 sığar → CF = 0. IP = 0104h.

AX0080AHALBX1234BHBLIP0107CF0ZF0SF1OF1

BX ← 1234h; 3 bayt → IP = 0107h. Bayraklar önceki işlemden kalır.

AX0000AHALBX1234BHBLIP0109CF0ZF1SF0OF0

80h − 80h = 00h → ZF = 1, SF = 0, OF = 0; ödünç yok → CF = 0. IP = 0109h.

AX0000AHALBX1235BHBLIP010ACF0ZF0SF0OF0

INC BX → 1235h; sonuç sıfır değil → ZF = 0. INC tek bayttır: IP = 010Ah.

ORG 100h
MOV AL, 7Fh     ; 2 bayt
ADD AL, 1       ; 2 bayt
MOV BX, 1234h   ; 3 bayt
SUB AL, 80h     ; 2 bayt
INC BX          ; 1 bayt

Çoktan Seçmeli · Özel Amaçlı Yazmaçlar

Soru 12: Bayrakları Okuma

AL = 80h iken ADD AL, 80h çalışıyor. Sonra bayraklar ne olur?

C: 80h + 80h = 100h → AL = 00h, dışarı taşan 1 → CF = 1; sonuç sıfır → ZF = 1; MSB 0 → SF = 0. İşaretli yorumda −128 + (−128) = −256 sığmaz ve iki negatifin toplamı pozitif (0) çıktı → OF = 1.

Çoktan Seçmeli · İlk Program

Soru 13: ORG Direktifi

______ direktifi, sonraki kod ve veriyi belirtilen bağıl konumdan başlayarak yerleştirmesini assembler'a bildirir. Boşluğa ne gelir?

B: ORG 100h: .COM programlarında kod 0100h'den başlar (ilk 256 bayt PSP'dir) ve değişken adresleri buna göre hesaplanır. GROUP birden çok kesimi tek ad altında toplar; OFFSET bir adın bağıl konumunu verir; LABEL bir ada tür (BYTE, WORD, NEAR) verir.

Çoktan Seçmeli · İlk Program

Soru 14: Geçerli MOV

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

D: Genel yazmaçtan kesim yazmacına MOV geçerlidir. A: kesim yazmacına sabit yüklenemez (önce MOV AX, 1234h, sonra MOV DS, AX). B: iki bellek işleneni olamaz. C: 8 bitlik AL'ye 16 bitlik BX yazılamaz.

Kod Yazma · İlk Program

Soru 15: Bellekten Belleğe

MOV ile bellekteki bir sözcüğü başka bir bellek konumuna nasıl kopyalarsınız? kaynak değişkenini hedef'e kopyalayan .COM programını yazın.

Cevabı göster

Tek MOV ile yapılamaz: 8086'da bir komutun iki işleneni birden bellek olamaz (MOV [hedef], [kaynak] geçersiz). Veri bir yazmaç üzerinden iki adımda taşınır:

ORG 100h
MOV AX, kaynak
MOV hedef, AX
RET
kaynak DW 1234h
hedef  DW 0

Sonunda hedef = 1234h. Değişkenler RET'ten sonra durur ki komut olarak yürütülmesin. İstisna: dizgi komutları (MOVSB/MOVSW) ile PUSH/POP bellekten belleğe aktarım yapabilir.

Hata Bulma · İlk Program

Soru 16: Sık Yapılan Hatalar

Programın 2.–6. satırlarının her biri assembler hatası verir. Hataların nedeni nedir, nasıl düzeltilir?

ORG 100h
MOV AL, BX
MOV DS, 0B800h
MOV AL, [AX]
MOV CL, FFh
MOV AH, 300
RET
Cevabı göster
  • MOV AL, BX: boyutlar farklı (8 ↔ 16 bit) → MOV AL, BL
  • MOV DS, 0B800h: kesime sabit atanamaz → MOV AX, 0B800h · MOV DS, AX
  • MOV AL, [AX]: adreslemede yalnız BX, SI, DI, BP → MOV BX, AX · MOV AL, [BX]
  • MOV CL, FFh: harfle başlayan onaltılık bir ad sanılır → MOV CL, 0FFh
  • MOV AH, 300: 300 > 255, 8 bite sığmaz → 16 bitlik yazmaç: MOV AX, 300

Son

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