Bölüm 1: Programlama Dilleri
Çoktan Seçmeli · Yazılım
Soru 1: Dil Seviyeleri
Makine dilinden assembly diline, oradan yüksek seviyeli dillere çıkıldıkça ne olur?
B: Yüksek seviyeli dilde değişkenin hangi yazmaçta ya da adreste duracağına derleyici karar verir; aynı kaynak kod farklı işlemciler için yeniden derlenebilir. Bedeli, donanım üzerindeki doğrudan denetimin azalmasıdır. Kaynak kodun yine de bir derleyici ya da yorumlayıcıyla makine diline çevrilmesi gerekir; elle adres ve yazmaç seçimi assembly'nin özelliğidir.
Kod Yazma · Yazılım
Soru 2: Üç Seviyede Aynı İşlem
C'deki y = a - b + c; satırını 8086 assembly ile yazın (16 bitlik değişkenler: a = 0200h, b = 0202h, c = 0204h, y = 0206h adreslerinde). Ardından aşağıdaki kodları kullanarak makine kodunu çıkarın. a = 50, b = 8, c = 3 ise y kaç olur?
| Komut | Kod |
|---|---|
MOV AX, [adr] | A1 + adr |
SUB AX, [adr] | 2B 06 + adr |
ADD AX, [adr] | 03 06 + adr |
MOV [adr], AX | A3 + adr |
Cevabı göster
MOV AX, [0200h] ; A1 00 02 SUB AX, [0202h] ; 2B 06 02 02 ADD AX, [0204h] ; 03 06 04 02 MOV [0206h], AX ; A3 06 02
Adres baytları little-endian yazılır: 0202h → 02 02, 0204h → 04 02. Kod toplam 3 + 4 + 4 + 3 = 14 bayttır.
y = 50 − 8 + 3 = 45 (002Dh). Her assembly satırı tek bir makine komutuna karşılık gelir; C satırının hangi yazmacı kullanacağına derleyici karar verir.
Çoktan Seçmeli · Makine Dili
Soru 3: Makine Dili
Makine dili için hangisi doğrudur?
D: Makine dili, işlemcinin kontrol biriminin doğrudan çözebildiği ikili komut kodlarıdır: işlem kodu ve işlenen alanları. Her işlemci ailesinin kendi komut kümesi vardır; 8086'da B0 05 "AL'ye 5 yükle" demektir, ARM'da aynı iş başka bir 32 bitlik sözcükle kodlanır. Onaltılık gösterim yalnızca insanların okuması içindir; bellekte bitler durur.
Hesap Sorusu · Makine Dili
Soru 4: Kodla ve Çöz
Örnek makine dili: 8 bitlik komut = 4 bit işlem kodu | 2 bit hedef | 2 bit kaynak; HALT 0000, ADD 0001, SUB 0010, AND 0011, OR 0100; R0 = 00 … R3 = 11; hedef ← hedef işlem kaynak.
AND R1, R3veOR R2, R0komutlarını ikili ve onaltılık kodlayın.- 1Eh ve 2Dh baytlarını çözün.
- R2 = 7, R3 = 4 ise 1Eh'den sonra R3 kaç olur?
Cevabı göster
- AND R1, R3 = 0011 01 11 = 37h; OR R2, R0 = 0100 10 00 = 48h.
- 1Eh = 0001 11 10 → ADD R3, R2; 2Dh = 0010 11 01 → SUB R3, R1.
- R3 ← R3 + R2 = 4 + 7 = 11. Kaynak R2 değişmez.
Onaltılık yazımda ilk basamak işlem kodudur; ikinci basamak hedef ve kaynak alanlarını birlikte taşır.
Adım Adım Çalıştırma · Makine Dili
Soru 5: Makine Programı İzleme
Örnek makine dilinde (4 bit işlem | 2 bit hedef | 2 bit kaynak) yazılmış program 0. adresten çalışıyor. Başlangıçta R0 = 6, R1 = 9, R2 = 12, R3 = 5. HALT'te yazmaçlar kaçtır?
Başlangıç: R0 = 6, R1 = 9, R2 = 12 (1100b), R3 = 5 (0101b). PC = 0.
24h = 0010 01 00 → SUB R1, R0: R1 = 9 − 6 = 3.
4Bh = 0100 10 11 → OR R2, R3: 1100 OR 0101 = 1101 → R2 = 13.
12h = 0001 00 10 → ADD R0, R2: R0 = 6 + 13 = 19. R2'nin yeni değeri kullanılır.
3Dh = 0011 11 01 → AND R3, R1: 0101 AND 0011 = 0001 → R3 = 1.
00h → HALT. Sonuç: R0 = 19, R1 = 3, R2 = 13, R3 = 1.
0: 0010 0100 ; 24h 1: 0100 1011 ; 4Bh 2: 0001 0010 ; 12h 3: 0011 1101 ; 3Dh 4: 0000 0000 ; 00h
Çoktan Seçmeli · Makine Dili
Soru 6: Sekiz Yazmaçlı Biçim
Örnek makine dilinde komut 4 bit işlem kodu ve iki 2 bitlik yazmaç alanından oluşuyor. İşlem kodu alanı korunup yazmaç sayısı 8'e çıkarılırsa bir komut kaç bit olur?
A: 8 yazmaçtan birini seçmek için log2 8 = 3 bit gerekir; iki yazmaç alanı 3 + 3 = 6 bit, işlem koduyla birlikte 4 + 6 = 10 bit eder. Komut 8 bitte kalacaksa işlem kodu 2 bite iner ve yalnızca 4 işlem tanımlanabilir.
Çoktan Seçmeli · Assembly Dilleri
Soru 7: Programdan Belleğe
Kaynak koddan çalışan programa giden araç zincirinde hangi eşleştirme doğrudur?
C: Assembler her assembly satırını makine koduna çevirip nesne dosyası üretir; bağlayıcı nesne dosyalarını kütüphane koduyla birleştirip çalıştırılabilir dosya yapar; yükleyici bu dosyayı ana belleğe yerleştirir, gerekli adresleri ayarlar ve denetimi programın başına verir. Önişlemci yalnızca #include ve #define satırlarını açar; tip denetimini derleyici yapar.
Çoktan Seçmeli · Assembly Dilleri
Soru 8: 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.
Kod Okuma · Assembly Dilleri
Soru 9: Dizginin Adresi
emu8086'da derlenen .COM programı için:
org 100h mov ah, 09h mov dx, offset msg int 21h mov ah, 4Ch int 21h msg db 'Giresun 2026!', 0Dh, 0Ah, '$' uzun equ $ - msg
msghangi bağıl konumdadır?uzunkaçtır?- Ekrana ne yazılır?
- Sondaki
'$'unutulsaydı ne olurdu?
Cevabı göster
| Adres | Bayt | Satır |
|---|---|---|
| 0100h | 2 | mov ah, 09h |
| 0102h | 3 | mov dx, offset msg |
| 0105h | 2 | int 21h |
| 0107h | 2 | mov ah, 4Ch |
| 0109h | 2 | int 21h |
| 010Bh | 16 | msg db … |
- Kod 11 bayt:
msg= 010Bh. - 13 karakter + 0Dh + 0Ah + '$' = 16.
EQUyer kaplamaz. - Giresun 2026! ve satır başı + satır sonu; '$' yazılmaz.
- DOS 09h hizmeti bir '$' görene kadar bellekteki rastgele baytları da ekrana basardı.
Çoktan Seçmeli · Assembly Dilleri
Soru 10: AT&T Sözdizimi
GNU as ile yazılmış AT&T sözdizimindeki subl %ebx, %eax komutunun Intel sözdizimindeki karşılığı hangisidir?
A: AT&T'de sıra kaynak, hedeftir; Intel'de hedef, kaynak. Yazmaçlar % ile yazılır, l soneki 32 bitlik işlem demektir. Bellek işleneni AT&T'de (%ebx) biçiminde olurdu. İşlem değişmez: sonuç hedefe, yani EAX'e yazılır.
Adım Adım Çalıştırma · Assembly Dilleri
Soru 11: DOS ile Karakter Yazma
Program ekrana ne yazar? Her LOOP turundan sonra CX ve DL kaçtır?
CX = 3 tur, DL = 'A' (41h).
1. tur: AH = 02h, INT 21h 'A' yazar. DL = 41h + 2 = 43h ('C'). LOOP: CX = 2 ≠ 0 → atla.
2. tur: 'C' yazılır; DL = 45h ('E'), CX = 1 → atla.
3. tur: 'E' yazılır; DL = 47h ('G'), CX = 0 → atlama yok.
RET: .COM programı DOS'a döner. Ekranda ACE var; son DL ('G') hiç yazılmadı.
org 100h mov cx, 3 mov dl, 'A' yaz: mov ah, 02h int 21h add dl, 2 loop yaz ret
Çoktan Seçmeli · Assembly Dilleri
Soru 12: Sistem Çağrısı
32 bitlik Linux'ta (x86) ekrana yazmak için hizmet numarası nereye konur ve çekirdek nasıl çağrılır?
D: Linux x86 (32 bit): hizmet numarası EAX'te (4 = write, 1 = exit), parametreler EBX, ECX, EDX'te, geçiş int 0x80. Diğerleri de doğrudur ama başka ortamlar içindir: AH = 09h + INT 21h MS-DOS, r7 + svc #0 ARM Linux, RAX = 1 + syscall 64 bitlik Linux.
Hesap Sorusu · Assembly Dilleri
Soru 13: stdcall ve ESP
32 bitlik Windows'ta ESP = 0012FF70h iken üç parametreli bir stdcall fonksiyonu çağrılıyor:
push 1 ; c push 2 ; b push 3 ; a call Fonk ; Fonk(a, b, c)
- Fonksiyona girildiği anda ESP kaçtır? [ESP] ve [ESP+4] neyi tutar?
- Fonksiyon
ret 12ile dönünce ESP kaç olur? - Parametreler neden c, b, a sırasıyla itilir?
Cevabı göster
- Her PUSH ESP'yi 4 azaltır: 3 parametre + dönüş adresi = 16 bayt → ESP = 0012FF60h. [ESP] dönüş adresi, [ESP+4] ilk parametre a = 3.
ret 12dönüş adresini alır (+4) ve 12 bayt parametreyi atar → ESP = 0012FF70h, çağrıdan önceki değer. stdcall'da yığını çağrılan temizler.- Sağdan sola itilince ilk parametre yığının tepesine, dönüş adresinin hemen üstüne gelir; fonksiyon onu her zaman aynı yerde bulur.
Çoktan Seçmeli · Yüksek Seviyeli Diller
Soru 14: Java Nasıl Çalışır?
Java programının çalışma biçimi için hangisi doğrudur?
B: Java hibrittir: javac Main.java platformdan bağımsız .class (bytecode) üretir; java Main ile JVM bu kodu önce yorumlar, sık çalışan kısımları JIT ile makine koduna çevirir. Bu yüzden aynı .class dosyası JVM olan her platformda çalışır. C# da benzer biçimde IL ara koduna derlenir.
Adım Adım Çalıştırma · Yüksek Seviyeli Diller
Soru 15: for ve if, 8086'da
C'deki for (i = 1; i <= 4; i++) if (i % 2 == 0) toplam += i; döngüsünün 8086 karşılığında her turun sonunda CX ve AX kaçtır? Program bittiğinde AX kaçtır?
i = 1, toplam = 0. xor ax, ax AX'i sıfırlar ve ZF = 1 yapar.
i = 1: 1 − 4 ödünç ister (CF = 1) → JA atlamaz. 1 AND 1 ≠ 0 → tek, toplama eklenmez. i = 2.
i = 2: 2 AND 1 = 0 → ZF = 1, JNZ atlamaz → toplam = 0 + 2 = 2. i = 3.
i = 3: tek → atlanır. i = 4.
i = 4: CMP 4, 4 → ZF = 1, CF = 0; JA yalnızca CF = 0 ve ZF = 0 iken atlar → devam. Çift → toplam = 6. i = 5.
CMP 5, 4: CF = 0, ZF = 0 → JA bitti'ye atlar. Sonuç AX = 6 = 2 + 4.
org 100h mov cx, 1 ; i = 1 xor ax, ax ; toplam = 0 dongu: cmp cx, 4 ja bitti ; i > n ise bitir test cl, 1 ; en düşük bit jnz atla ; tekse ekleme add ax, cx atla: inc cx jmp dongu bitti: ret
Çıktı Sorusu · Yüksek Seviyeli Diller
Soru 16: Python'da Aralık
C'deki for (int i = 1; i <= n; i++) döngüsü Python'a aşağıdaki gibi çevrilmiş. Çıktı nedir? C sürümünün çıktısıyla aynı mıdır?
n = 4
for i in range(1, n):
if i % 2 == 0:
print(f"{i} cift")
else:
print(f"{i} tek")Cevabı göster
1 tek 2 cift 3 tek
Hayır. range(1, n) üst sınırı dahil etmez: i = 1, 2, 3. C sürümü "4 cift" satırını da yazar. Doğrusu range(1, n + 1).
Python yorumlanan bir dil olduğundan bu hata derleme sırasında değil, ancak çıktı incelenince fark edilir; sözdizimi olarak program doğrudur.
Kısa Cevap · Yüksek Seviyeli Diller
Soru 17: Derleme Aşamaları
gcc tekcift.c -o tekcift komutu dört aracı arka arkaya çalıştırır. Her aşamanın aracını, çıktı dosyasını ve o aşamada durmak için kullanılan gcc seçeneğini yazın. Program çalıştırılırken devreye giren beşinci bileşen hangisidir?
Cevabı göster
| Aşama | Çıktı | Seçenek |
|---|---|---|
| Önişlemci (#include, #define) | tekcift.i | -E |
| Derleyici (C → assembly) | tekcift.s | -S |
| Assembler (assembly → makine kodu) | tekcift.o | -c |
| Bağlayıcı (+ printf, scanf …) | tekcift(.exe) | — |
Beşinci bileşen yükleyicidir: işletim sistemi programı belleğe yerleştirir ve main'e atlar. Ara assembly'yi Intel sözdizimiyle görmek için gcc -S -masm=intel.