Bölüm 3.2: 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öz diziminde 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 (8B C3; 89 D8 de geçerli bir kodlamadır): IP 0100h'den 0102h'ye ilerler (D yanlış).
Çoktan Seçmeli · Assembly Dili
Soru 2: Satırın Parçaları
fark: SUB CX, AX ; CX − AX satırında hedef işlenen hangisidir?
B: Satır [etiket:] komut hedef, kaynak [; açıklama] düzenindedir. fark etikettir ve bu satırın adresini adlandırır (A); AX kaynaktır (C); ; sonrası açıklamadır, makine koduna çevrilmez (D). SUB çalışınca CX ← CX − AX olur; AX değişmez.
Çoktan Seçmeli · Assembly Dili
Soru 3: Makine Kodu Üretmeyen Satır
Aşağıdaki assembly satırlarından hangisi makine kodu üretmez?
C: ORG bir direktiftir: assembler'a "sonraki baytları 100h bağıl konumundan yerleştir" der, belleğe hiçbir bayt yazmaz. .COM programlarında ilk 256 bayt PSP'ye ayrıldığı için kod 100h'den başlar. Diğer üçü komuttur: B4 09, CD 21 ve C3.
Çoktan Seçmeli · Assembly Dili
Soru 4: Geçerli Ad
emu8086 kaynak kodunda aşağıdakilerden hangisi değişken ya da etiket adı olarak kullanılabilir?
C: Ad harfle ya da alt çizgiyle başlar; devamında harf, rakam ve alt çizgi olabilir. 2toplam rakamla başlar (A). son-deger içindeki − bir işleçtir; assembler bunu son eksi deger diye okur (B). cx yazmaç adıdır ve büyük-küçük harf ayrılmadığı için CX ile aynıdır (D).
Çoktan Seçmeli · Yazmaçlarla Çalışma
Soru 5: 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 · Yazmaçlarla Çalışma
Soru 6: 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
Çoktan Seçmeli · Yazmaçlarla Çalışma
Soru 7: MUL BL Neyi Değiştirir?
AX = 1234h ve BL = 10h iken MUL BL çalışıyor. Sonra AX ne olur?
B: 8 bitlik MUL'de çarpılan örtük olarak AL'dir, sonuç örtük olarak bütün AX'e yazılır: 34h × 10h = 52 × 16 = 832 = 0340h. AH'deki eski 12h silinir. 2340h, AX'in tamamını 10h ile çarpıp 16 bite kırpmaktır (A); 1240h yalnız AL'yi değiştirmektir (C); komutta yazılan BL yalnız çarpandır (D).
Hesap Sorusu · Yazmaçlarla Çalışma
Soru 8: Komut Süreleri
5 MHz'lik bir 8086'da bir döngü 500 kez dönüyor; döngü sayacı her turda bir kez artırılıyor. Sayaç bellekteki bir sözcükse INC sayac 21, CX'teyse INC CX 2 saat turu sürer.
- İki durumda sayaç artırma kaç saat turu tutar?
- Fark kaç mikrosaniyedir?
INC sayacneden daha uzun sürer?
Cevabı göster
- Bellekte: 500 × 21 = 10 500 tur; CX'te: 500 × 2 = 1000 tur.
- Fark 9500 tur. 5 MHz'te bir tur 1 / 5 MHz = 0,2 µs → 9500 × 0,2 = 1900 µs (1,9 ms).
- Bellek işleneni önce okunur, sonra yazılır: iki yol döngüsü ve etkin adres hesabı gerekir. Yazmaç işleneni işlemcinin içindedir; yol döngüsü gerekmez.
Adım Adım Çalıştırma · IP ve Bayraklar
Soru 9: 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 · İlk Program
Soru 10: 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 11: Değişkenin Adresi
ORG 100h ile başlayan .COM programında sırayla MOV AX, 5 (3 bayt), MOV BX, 3 (3 bayt), ADD AX, BX (2 bayt), RET (1 bayt) ve sayi DB 0 var. sayi değişkeninin bağıl konumu nedir?
A: ORG 100h ilk baytı 0100h'ye yerleştirir ve kendisi bayt üretmez. Komutlar 3 + 3 + 2 + 1 = 9 bayttır; sayi hemen arkalarında, 0100h + 9 = 0109h konumundadır. 0009h ORG'u unutmaktır (B); 010Ah bir bayt fazla saymaktır (C); 0100h ilk komutun adresidir (D).
Çoktan Seçmeli · İlk Program
Soru 12: 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 13: 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 14: 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
Çoktan Seçmeli · İlk Program
Soru 15: Mantık Hatası
Aşağıdakilerden hangisi assembler'ın bulamayacağı, program çalışınca ortaya çıkan bir mantık hatasıdır?
C: ADD de geçerli bir komuttur; program derlenir ve çalışır ama ilk bayttan gelen elde kaybolur, sonuç yanlış çıkar. Böyle bir hata ancak tek adım çalıştırmada beklenen yazmaç değerleriyle karşılaştırarak bulunur. Diğer üçü söz dizimi hatasıdır ve assembler satır numarasıyla bildirir: boyut uyuşmazlığı (A), tanımsız etiket (B), 8 bite sığmayan sabit (D).