Bölüm 3.2: Assembly

Bölüm 3.2: Assembly · Çalışma Soruları
Assembly diliSatır yapısıDirektiflerAdlarMOV ve XCHGÖrtük işlenenlerKomut süreleriIP ve bayraklarİlk programHatalar
Sercan KÜLCÜ · Giresun Üniversitesi · Bilgisayar Mühendisliği

Ç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.

  1. İki durumda sayaç artırma kaç saat turu tutar?
  2. Fark kaç mikrosaniyedir?
  3. INC sayac neden daha uzun sürer?
Cevabı göster
  1. Bellekte: 500 × 21 = 10 500 tur; CX'te: 500 × 2 = 1000 tur.
  2. Fark 9500 tur. 5 MHz'te bir tur 1 / 5 MHz = 0,2 µs → 9500 × 0,2 = 1900 µs (1,9 ms).
  3. 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?

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 · İ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, 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

Ç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).

Son

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