Bölüm 3: Assembly
Ç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ı?
AX ← 4321h: AH = 43h, AL = 21h. 0x öneki onaltılık demektir.
BL ← AL = 21h. Yalnız BX'in düşük baytı yazılır; BH = 00h kalır → BX = 0021h.
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?
AX ← 2B00h. Kesim yazmacına sabit doğrudan yazılamadığı için değer önce AX'e alınır.
DS ← AX = 2B00h. Artık bellek işlenenleri 2B000h'den başlayan kesimdedir.
SI ← 1A35h: bir bağıl konum (adres), veri değil.
[SI]: DS × 10h + SI = 2B000h + 1A35h = 2CA35h. Bayt okunur → AL = 77h.
BX ← SI = 1A35h. Yazmaçtan yazmaca kopya; bellek okunmaz.
[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?
IP 0100h'den başlar; 2 baytlık komuttan sonra IP = 0102h, AL = 7Fh (+127). MOV bayrakları değiştirmez.
7Fh + 1 = 80h: iki pozitif sayının toplamı negatif çıktı → OF = 1, SF = 1. İşaretsiz 128 sığar → CF = 0. IP = 0104h.
BX ← 1234h; 3 bayt → IP = 0107h. Bayraklar önceki işlemden kalır.
80h − 80h = 00h → ZF = 1, SF = 0, OF = 0; ödünç yok → CF = 0. IP = 0109h.
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, BLMOV DS, 0B800h: kesime sabit atanamaz →MOV AX, 0B800h·MOV DS, AXMOV 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, 0FFhMOV AH, 300: 300 > 255, 8 bite sığmaz → 16 bitlik yazmaç:MOV AX, 300