🚀 BAŞTAN SONA x86 ASSEMBLY BÖLÜM-7 (FİNAL): Real Mode, BIOS Kesilmeleri ve Bare-Metal MBR Bootloader Yazımı 🏆

Konu Özeti

x86 Assembly eğitim serisinin final bölümünde, işletim sistemi olmadan doğrudan donanım üzerinde çalışan 512 baytlık MBR bootloader yazımı anlatılıyor. Bilgisayarın başlatılma süreci, Real Mode, BIOS video kesilmeleri (int 0x10) ve bootloader kod yapısı detaylandırılıyor. Kodun NASM ile derlenmesi ve QEMU sanal makinesinde çalıştırılması adımları gösteriliyor. Ayrıca tüm serinin kazanımlarını özetleyen bir tablo sunuluyor.

🚀 BAŞTAN SONA x86 ASSEMBLY BÖLÜM-7 (FİNAL): Real Mode, BIOS Kesilmeleri ve Bare-Metal MBR Bootloader Yazımı 🏆

Selamlar dostlar! 👋
x86 Assembly rehber serimizin muhteşem **Final Bölümüne** hoş geldiniz! 🎉

İlk bölümden bu yana CPU mimarisinden başlayarak yazmaçları (Registers), adresleme modlarını, aritmetik ve mantıksal komutları, `CMP` ve `Jcc` ile akış kontrolünü, Yığın (Stack) mimarisini, `CALL` / `RET` ve Stack Frame yapısını, Dizi/String komutlarını (`MOVS`, `STOS`, `REP`), C kütüphane entegrasyonunu (`libc`) ve Inline Assembly kavramlarını eksiksiz öğrendik.

Bu final bölümünde ise hiçbir işletim sistemi (Windows, Linux vb.) olmadan doğrudan çıplak donanım (Bare-Metal) üzerinde çalışan, bilgisayarınız güç tuşuna basıldığında çalışan ilk kod olan **512 Baytlık MBR Bootloader (Ön Yükleyici)** yazacağız! 🚀

---

📌 1. Bilgisayar Başlatılma Mimarisi (Boot Process) ⚙️

1. **Power On:** Bilgisayar açıldığında işlemci varsayılan olarak 16-bit **Real Mode** modunda başlar.
2. **BIOS / UEFI:** Anakarttaki BIOS çipi donanımları test eder (POST) ve ilk önyükleme aygıtının (Disk/USB) **0. sektörünü (LBA 0)** okur.
3. **Magic Signature (`0xAA55`):** BIOS, 512 baytlık sektörün son iki baytında `0xAA55` imzasını görürse bunu geçerli bir **MBR Boot Sector** kabul eder.
4. **Execution:** BIOS, bu 512 baytlık kodu RAM'deki **`0x7C00`** adresine yükler ve kontrolü işlemciye (`EIP/IP = 0x7C00`) devreder.

---

🖥️ 2. Real Mode ve `int 0x10` BIOS Video Kesilmeleri 🎬

16-bit Real Mode içerisinde ekran çıktısı almak için işletim sistemi sürücüleri yerine BIOS'un dahili video kesilmesi olan **`int 0x10`** kullanılır.

• **`AH = 0x0E`:** "Teletype Output" fonksiyonu. `AL` yazmacındaki karakteri imlecin olduğu konuma yazar ve imleci bir kaydırır.

mov ah, 0x0E ; BIOS Teletype karakter yazma fonksiyonu
mov al, 'A' ; Ekrana basılacak karakter
int 0x10 ; BIOS Video Kesilmesi

---

💾 3. 512 Baytlık MBR Bootloader Kod Yapısı (`boot.asm`) 💻

Aşağıdaki kod, BIOS tarafından `0x7C00` adresine yüklenecek olan, ekrana özgün mesajımızı basan ve 512 baytlık boyutu tam dolduran bootloader kodudur:

[ORG 0x7C00] ; BIOS kodu bu bellek adresine yükler
BITS 16 ; İşlemciye 16-bit Real Mode komut kümesini kullanmasını bildiriyoruz

start:
; Segment yazmaçlarını güvenli şekilde sıfırlıyoruz
cli ; Kesilmeleri geçici olarak kapat
xor ax, ax
mov ds, ax
mov es, ax
mov ss, ax
mov sp, 0x7C00 ; Yığını (Stack) kodun hemen altına konumlandırıyoruz
sti ; Kesilmeleri tekrar aç

; Ekrana Metin Yazdırma Fonksiyonu
mov si, mesaj_metni

yazdir_dongusu:
lodsb ; [DS:SI] adresinden 1 bayt oku -> AL'ye yükle, SI++ yap
cmp al, 0 ; String sonu ('\0' Null Terminator) kontrolü
je sonsuz_dongu ; Metin bittiyse sonsuz döngüye atla

mov ah, 0x0E ; BIOS Teletype video fonksiyonu
int 0x10 ; Karakteri ekrana bas
jmp yazdir_dongusu

sonsuz_dongu:
cli ; İşlemciyi durdurmak için kesilmeleri kapat
hlt ; Halt: Bir sonraki kesilmeye kadar CPU'yu uykuya al
jmp sonsuz_dongu

; --- Veri Bölümü ---
mesaj_metni db 'BASTAN SONA x86 ASSEMBLY BOOTLOADER CALISTI! 🚀', 0x0D, 0x0A, 0

; --- MBR Doldurma ve Boot Imzasi ---
times 510 - ($ - $$) db 0 ; 512 baytın kalan kısmını 0x00 ile doldur
dw 0xAA55 ; MBR Magic Boot Signature (2 Bayt: 511 ve 512. baytlar)

---

⚙️ 4. Derleme ve QEMU Sanal Makinesinde Çalıştırma 🛠️

Yazdığımız bare-metal kodumuzu NASM ile ikili (raw binary) formata dönüştürüp QEMU ile çalıştıralım:

1. Binary Olarak Derleme:
nasm -f bin boot.asm -o boot.bin

2. Dosya Boyutunu Kontrol Etme (Tam 512 Bayt Olmalıdır!):
ls -l boot.bin

3. QEMU Sanal Makinesinde Çıplak Donanımda Çalıştırma:
qemu-system-x86_64 -drive format=raw,file=boot.bin

---

📊 5. x86 Assembly Eğitim Serisi Genel Kazanım Tablosu 📋

| Bölüm Aralığı | Temel Kazanımlar |
| :--- | :--- |
| **Bölüm 1 - 3** | CPU Mimarisi, Genel Yazmaçlar (`EAX`, `EBX`, `ECX`, `EDX`), `int 0x80`, `MOV`, `XCHG`, Aritmetik (`ADD`, `SUB`), `EFLAGS`, `AND/OR/XOR`, `CMP`, Koşullu Dallanma (`Jcc`) |
| **Bölüm 4 - 5** | Yığın (`ESP`, `EBP`), `PUSH`/`POP`, `CALL`/`RET`, **Stack Frame**, Dizi İndeksleri (`ESI`, `EDI`), `DF`, `MOVSB`, `STOSB`, `REP` Önekleri |
| **Bölüm 6 - 7** | C Kütüphane Entegrasyonu (`libc`, `cdecl`), Inline Assembly, **Real Mode**, BIOS `int 0x10`, **Bare-Metal MBR Bootloader Yazımı**, QEMU Emülasyonu |

---

🎉 TEBRİKLER! x86 ASSEMBLY SERİSİNİ BAŞARIYLA TAMAMLADINIZ! 🎉

7 Bölümlük Baştan Sona x86 Assembly rehber serisini eksiksiz bir şekilde bitirdiniz! 🥳

Artık işletim sistemlerinin arkasındaki büyüyü çözen, donanım seviyesinde RAM ve CPU yazmaçlarını yöneten, bare-metal bootloader yazabilen ve tersine mühendislik / sistem programlama için kaya gibi sağlam bir temele sahip bir geliştiricisin! 💻✨

İşlemciniz soğuk, yazmaçlarınız senkron, kodlarınız hatasız çalışsın! Başarılar! 🚀

🔒 Bu içeriği görmek için giriş yapın

 
Yanıt yazmak için giriş yapmalısınız
Forum özelliklerini kullanmak ve Level 2 üyelik satın almak için hesabınıza giriş yapın.
135,067Konular
3,297,823Mesajlar
326,251Kullanıcılar
novelordSon Üye
Üst Alt