buradan - Hasan Manzak

Transkript

buradan - Hasan Manzak
KARADENİZ TEKNİK ÜNİVERSİTESİ
MÜHENDİSLİK FAKÜLTESİ
BİTİRME ÇALIŞMASI
IBM PC / INTEL x86 MİMARİSİ İÇİN BİR ÖNYÜKLEME PROGRAMI
GELİŞTİRİLMESİ
HASAN MANZAK
164382
DANIŞMAN: YRD. DOÇ. DR. TUĞRUL ÇAVDAR
BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ DONANIM ANABİLİM DALI
BAHAR 2013
ÖNSÖZ
Yakın çevremdeki insanlar, çok uzun bir süredir tamamen baştan yazılmış bir işletim
sistemi geliştirmek isteğimi bilirler. Ülkemizde “Ulusal İşletim Sistemi” adı altında
geliştirilmeye başlanmış ve yola çıkış felsefesinin, geliştirme politikasıyla hiç uyuşmadığı
bir proje olan "PARDUS" projesinin başarısızlığı sonrasında gerçek bir ulusal işletim
sistemi geliştirme isteğimin daha da alevlenmesi sonucu olarak aktif bir şekilde işletim
sistemi geliştirmek yoluna yönlenmiş bulunuyorum.
Bu yolun ilk adımları olan bu proje, PC bilgisayarınıza güç verdiğiniz andan
kullandığınız işletim sisteminin, kontrolü tamamen size devrettiği ana kadar geçen süre
içerisinde yapılması gereken işlerin ilk adımını, Ön Yükleme işlemini konu almaktadır.
Projenin
felsefik
amaçlarının
yanı
sıra
bir
diğer
"çok
önemli"
olarak
nitelendirebileceğim amacı, onlarca, Native Code, Mikroprocessors, PC BIOS ve daha bir
çok bilgisayar mühendisliği temelleri bilgisi-kültürü olmayan, bir nevi C# mühendisleri
yetiştiriyor olmamıza rağmen, "bir işletim sistemini kullanmak" yerine "bir işletim sistemi
geliştirebilmek" yetilerine sahip mühendislerimizin de varlığını ortaya koyabilmektir.
Çalışmalarıma başladığım günden bu yana bana bir hoca olarak değil, bir insan gibi
yaklaşan, kendi çalışma alanı olmamasına rağmen bu proje üzerinde desteğini ve
yönlendirmelerini eksik etmeyen sevgili danışman hocam Yrd. Doç. Dr. Tuğrul
ÇAVDAR'a, geliştirme süreci boyunca fikir alış-verişlerinde bulunduğum ve gerek teknik,
gerek lojistik açılardan ilgi ve desteklerini esirgemeyen alt dönem arkadaşlarım Hasan
Hüseyin ÇAKIR ve Muhammed Sait ÖZÜER 'e, 8 senelik bir lisans öğrencisi olarak her
türlü, her türlü kahrımı çeken, tüm gerginliğime ve stresime rağmen bana sonsuz sabır,
sevgi ve anlayışla davranan, yanağımdan öpücüğü, masamdan kahvemi eksik etmeyen çok
sevdiğim annem Ulviye MANZAK'a ve yoluma ışık tutmuş diğer tüm herkese saygı ve
sevgilerimi iletir, sonsuz teşekkürlerimi sunmayı bir borç bilirim.
Hasan MANZAK
TRABZON 2013
II
İÇİNDEKİLER
ÖNSÖZ ................................................................................................................................. II
İÇİNDEKİLER .................................................................................................................... III
ÖZET ................................................................................................................................... IV
SEMBOLLER VE KISALTMALAR .................................................................................. V
1. GİRİŞ ................................................................................................................................. 1
2. IBM PC / Intel x86 MİKRO MİMARİSİ VE PC ÖN YÜKLEME .................................. 3
2.1. PC x86 MİKRO MİMARİSİ .......................................................................................... 3
2.2. PC ÖN YÜKLEME ADIMLARI ................................................................................... 4
3. GELİŞTİRİLEN ÖN YÜKLEME PROGRAMI ............................................................... 8
3.1. MBR PROGRAMI ......................................................................................................... 8
3.1.1. MBR GİRİŞ VE ÖN HAZIRLIKLAR ........................................................................ 8
3.1.2. MBR BÖLÜM TABLOSU KONTROLLERİ ............................................................ 9
3.1.3. MBR TARAFINDAN VBR'NİN YÜKLENMESİ ..................................................... 9
3.1.4. MBR DURUM MESAJLARI ................................................................................... 10
3.2. VBR PROGRAMI ........................................................................................................ 11
3.2.1. GİRİŞ VE ÖN HAZIRLIKLAR ................................................................................ 11
3.2.2. VBR TARAFINDAN BİR AÇILIŞ MENÜSÜ YÜKLENMESİ ............................. 13
3.2.3. MENÜ KULLANICI ETKİLEŞİMİ - İŞLETİM SİSTEMİ SEÇİLİMİ ................... 15
3.2.4. SEÇİLİ İŞLETİM SİSTEMİNİN YÜKLENMESİNE DEVAM EDİLMESİ........... 17
4. İRDELEME VE SONUÇLAR ........................................................................................ 19
5. GELECEKTE YAPILMASI PLANLANAN ÇALIŞMALAR ....................................... 21
6. KAYNAKLAR ................................................................................................................ 23
III
ÖZET
Bu projede IBM PC (Personal Computer - Kişisel Bilgisayar) / Intel x86 mimarili
bilgisayarlar için bir Ön Yükleme Program Serisi geliştirilmesi amaçlanmıştır. Proje
içerisinde, PC'ye güç verildikten hemen sonra devreye giren BIOS (Basic Input/Output
System) programının, kontrolü birincil ön yükleme programına devretmesinden sonra,
kontrolün, açılış yüklemesine devam edecek ilgili işletim sistemine devredileceği ana
kadar gerçekleştirilmesi gereken işlemler ve CPU (Central Processing Unit - Merkezi
İşlem Birimi, İşlemci)'nun bu aşamadaki çalışma modu olan Real Mode
konuları
irdelenmiştir.
İşlemci, Real Mode altındayken 16-Bit genişliğinde veri uzayı ve 20-Bit genişliğinde
bir adres uzayı mevcuttur. İşlemci tarafından üretilen 20-Bitlik adresler PC içerisindeki
donanımlara direkt erişim sağlatan gerçek adreslerdir ve dolayısıyla yazılan ön yükleme
programlarının bu adres-veri genişliklerine uygun, Real Mode altında çalışabilecek
programlar olması gerekir.
Real Mode altında çalışabilecek bu ön yükleme programlarının, işlemcinin Real Mode
spesifik kaydedicilerini kullanılması ve Assembly dilinde yazılacak bu programları makine
koduna dönüştürecek olan Assembler araçlarının da Real Mode Aware olması gerekir. Bu
amaçla, Intel 8086 CPU Instruction Set Mnemonic'leri ve Intel 8086 işlemcisini emüle
eden emu8086 yazılımı kullanılmıştır. Üretim ortamı testlerini gerçekleştirmek için de
VMWare Workstation yazılımı kullanılmıştır.
Ön yükleme ortamları olarak projede Harddiskler hedef alınmış ve makine koduna
derlenmiş programların bu ön yükleme ortamlarına aktarılabilmesi için gerekli disk erişim
araçları da bu proje dahilinde, Delphi programlama dili ve Windows File System API
(Application Programmer Interface)'ları kullanılarak geliştirilmiştir.
Sonuç olarak, PC'nin açılış sürecini BIOS'tan devralabilen, interaktif olarak kullanıcıya
açılışa devam edilecek işletim sistemini seçme imkanı tanıyabilen ve kontrolü seçili işletim
sisteminin yükleyicisine devredebilen bir ön yükleyici program serisi geliştirmek
amaçlanmış ve bu amaca ulaşılmıştır.
IV
SEMBOLLER VE KISALTMALAR
PC
Personal Computer
BIOS
Basic Input/Output System
CPU
Central Processing Unit
API
Application Programmer Interface
O.S.
Operating System
NTFS
New Technology File System
CISC
Complex Instruction Set Computing
Exx
Extended xx
BP
Base Pointer
IP
Instruction Pointer
CS
Code Segment
SS
Stack Segment
shl
Shift Left Logical
xxh
Hexadecimal number xx
POST
Power-on Self Test
LBA
Logical Block Addressing
CHS
Cylinder-Head-Sector
MBR
Master Boot Record
VBR
Volume Boot Record
MS
Microsoft
V
CRLF
Carriage Return Line Feed
BPB
BIOS Parameter Block
HPC
Head Per Cylinder
SPT
Sector Per Track
ASCII American Standart Code for Information Interchange
FASM Fast Assembler
MASM Microsoft Assembler
VI
1. GİRİŞ
Çağımızda, bilgisayar kullanımı, çok çeşitli alanlara yayılmış ve insanların günlük
ihtiyaçları konusunda çok yaygın bir hal almıştır. Donanımsal olarak en basit bilgisayarın
bir bellek modülü ve bir işlemciden oluştuğu göz önüne alınarak, günlük yaşantıda ihtiyaç
duyulan muazzam ölçüde veri yoğunluğunun oluşmasıyla birlikte (bellek kullanımı) bu
verilerden anlamlı sonuçlar çıkartabilmek adına gene muazzam ölçüde işlem kapasitesine
(işlemci kullanımı) ihtiyaç duyulmaktadır. Cep telefonlarından kullanılan PC'lere, ve bu
cihazların kullanım alanları açısından askeriye uygulamalarından ticari uygulamalara kadar
bilgisayar kavramı artık hemen her yerdedir.
Genel manada bu denli yaygınlaşan bilgisayar ihtiyacının ve kullanımının bir diğer ana
kolu olan PC ihtiyacı ve kullanımı, hem ticari hem de akademik alanlarda PC donanımı ve
yazılımı teknolojilerinin ilgi çekmesini sağlamıştır.
Yazılım teknolojilerinin ana başlıklarından birisi olan "PC İşletim Sistem(ler)i (PC
Operating System - O.S.)" son birkaç on yıldır büyük miktarda gelişime ve araştırmaya
konu olmuştur. Ön yükleyiciler, Çekirdek ve Araçlar şeklinde üç temel ana kısma
ayrılabilecek ve PC'lerin yaygınlaşmasıyla paralel bir şekilde yaygınlaşma profili oluşturan
işletim sistemlerinin en temel ve en önemli görevi-amacı, uygulama yazılımlarının,
donanımsal olarak PC kaynaklarını en etkin şekilde kullanabilmesini ve bu uygulama
yazılımlarının verilerinin birbirinden izolasyonunu sağlamaktır.
Ülkemizde işletim sistemi geliştirmek adına "Ulusal İşletim Sistemi" başlığı ile
"PARDUS" projesi adımı atılmış fakat birkaç yıl sonra bu proje başarısızlığa uğramıştır[1].
PARDUS, geliştirme süreci politikası olarak Linux İşletim Sistemi Çekirdeği üzerine
kurulmuş, diğer araçların ve sistem uygulamalarının yeniden yazıldığı bir işletim
sistemidir. Buradaki problem; örnek olarak dosya sistemi ele alındığında; yeni teknolojiler
geliştirmek ve mevcut teknolojilere destek sağlamak yerine var olan bu sistemlerin
kullanılmış olması ve yapılan çalışmaların uygulama yazılımları geliştirmekten öteye
gitmemiş olmasıdır. Ulusal İşletim Sistemi etiketini taşıyacak olan bir işletim sistemi, başlı
başına tüm işletim sistemi teknolojilerini yeniden geliştirmeli ve implemente etmelidir.
Bu proje, Ulusal İşletim Sistemi etiketini taşıyabilecek yep yeni bir PC işletim
sisteminin geliştirme sürecinin ilk adımı olan Ön Yükleyiciler konusunu ele almıştır.
Başlangıç olarak, mevcut NTFS (New Technology File System) dosya sistemi desteği
2
üzerinden yola çıkılmış olunup bahsi geçen işletim sisteminin geliştirme süreci içerisinde
yeni bir dosya sistemi geliştirilmesinin ardından, o dosya sistemi spesifik detaylar, bu
projenin içine dahil edilecektir. Böylelikle bir taraftan genel geliştirme süreci için bir
başlangıç adımı atılmış, bir taraftan mevcut NTFS teknolojisine destek sağlanmış, diğer bir
taraftan da ana sürecin felsefik olarak amaçları dışına taşılmamış olunacaktır.
2. IBM PC / Intel x86 MİKRO MİMARİSİ VE PC ÖN YÜKLEME
2.1. PC x86 MİKRO MİMARİSİ
x86 ifadesi, Intel'in genel amaçlı CISC (Complex Instruction Set Computing) işlemci
ailesi için kullanılan genel bir terimdir. Bu aile içerisinde 8086, 80186, 80286, 80386,
80468, Pentium ve takip eden işlemciler bulunmaktadır [2]. Günümüzde x86 ifadesi, 32bit'lik işlemcileri temsil etmek için de kullanılır.
8086 işlemcisi, 16-bit'lik kaydedicilere, 20-bit'lik adres uzayına ve 16-bit'lik veri
uzayına sahiptir. Böylece 8086 işlemcisi ile 1-MB büyüklüğünde bir bellek uzayı
adreslenebilir ve 64-KB büyüklüğünde bir veri havuzu üzerinde hesaplamalar yapılabilir.
16-bit'lik kaydedicilerle 20-bit'lik adres hattının sürülmesi iki adet genel amaçlı
kaydedicinin kaydırma+toplama işlemlerine tabi tutulması ile sağlanır.
80386 işlemcisi, Intel'in, özellikle çoklu-görev için optimize edilmiş ve 32-bit'lik
hesaplama temeli üzerine tasarlanmış bir işlemcisidir. 32-bit kaydedicileri sayesinde 4-GB
büyüklüğünde bellek adres uzayı ve gene 4-GB büyüklüğünde bir veri uzayı içinde
hesaplamalar yapabilmektedir. Bu işlemci içerisinde sanal bellek yapısı da desteklenebilir
durumdadır ve işlemcinin adres dönüşümleri, çoklu-görev, koruma ve sayfalı sanal bellek
yetenekleri mevcuttur.
8086 sonrasındaki tüm x86 ailesi işlemciler, geriye yönelik destek sağlamak adına 8086
yeteneklerini ve 8086 çalışma modunu da barındırır durumdadır.
Proje dahilinde kullanılan x86 ailesi genel amaçlı kaydedicileri Tablo 1, Tablo 2 ve
Tablo 3' te gösterilmiştir.
Tablo 1. x86 Genel amaçlı kaydediciler
Bits 31 .. 0
Bits 15 .. 0
Bits 15 .. 8
Bits 7 .. 0
EAX
EBX
ECX
EDX
EBP
ESI
AX
BX
CX
DX
BP
SI
AH
BH
CH
DH
AL
BL
CL
DL
4
Tablo 1'in devamı
EDI
ESP
DI
SP
Tablo 2. x86 Segment kaydedicileri
Bits 15 .. 0
CS (Code Segment)
SS (Stack Segment)
DS (Data Segment)
ES (Data Segment)
FS (Data Segment)
GS (Data Segment)
Tablo 3. x86 Durum ve Emir kaydedicileri
Bits 31 .. 0
Bits 15 .. 0
EFLAGS
EIP
FLAGS
IP
x86 kaydedicileri hakkında yapısal detaylar [2] ve [3] kaynaklarından edinilebilir.
2.2. PC ÖN YÜKLEME ADIMLARI
PC'ye ilk güç verildiği anda işlemcinin emir adresleme ile ilgili kaydedicileri CS ve IP
aşağıdaki varsayılan değerlere yüklenirler:
CS = F000h , IP = FFF0h
5
İşlemci, çalışma modu olarak 8086 işlemcisinin çalıştığı mod olan Real Mode [3,4] altında
olduğundan dolayı üretilen tüm adresler PC anakartı üzerindeki donanımlara direkt erişim
sağlayan gerçek, fiziksel adreslerdir. İcra edilecek ilk emir BIOS programının ilk emridir
ve BIOS fiziksel, donanımsal olarak F0000h adresine haritalanmıştır. PC anakartında
fiziksel olarak haritalanmış donanımların şematiği Şekil 1'de yüzeysel olarak
gösterilmiştir.
Şekil 1. PC donanımları bellek haritası [8]
6
Real Mode içinde icra edilecek bir sonraki emrin erişimi sağlanacak olan bellek, CS'in
4-bit sola kaydırılması ve IP ile toplanması sonucu oluşan veri ile adreslenir [3,4]:
Not: Dikkat edilmesi gerekilen önemli bir nokta, x86 işlemcilerde segment
kaydedicilerinin, assembly programcıları tarafından kullanılamayacak, Protected Mode
[3,13]'a özel, gizli kısımlarının mevcut olduğudur. CS bu işlemcilerde varsayılan olarak
FFFF0000h verisine yüklenir. Real Mode'da adres hesaplaması hususunda bir farklılık
olmamakla birlikte icra edilecek emri işaret edecek kaydedici bu işlemcilerde IP değil,
EIP'dir ve kaydırma-toplama işlemlerinde EIP kullanılır.
Hesaplanan bu adrese Reset Vector adı verilir ve takip eden emir, BIOS programının
giriş adresine sıçrama emridir:
Bu sıçrama öncesi tüm CS içeriği temizleneceğinden CS:IP lineer adresi 000Fh:0000h
olarak yüklenecek ve icra edilecek bir sonraki emir BIOS'un POST (Power-On Self Test)
programının ilk emri olacaktır.
POST işlemi tamamlandıktan sonra BIOS flash belleği içinde Boot Device Priorty
olarak tanımlı açılış yükleyici ortamları sırasına göre, sırayla her bir ortamın LBA(Logical
Block Addressing)_0 Sector ya da Fiziksel 0 (sıfır) Sektör yani MBR (Master Boot Record)
Sector [5]'ü 0000:7C00h adresine yüklenir ve bu verinin son iki byte'ının AA55h verisi
olup olmadığı testi yapılır. AA55h verisi Magic Number ya da Boot Signiture (Açılış
İmzası) olarak isimlendirilir ve yükleme yapılan ortamın Bootable (Yükleme yapabilir)
olduğu anlamını taşır. Veri depolama ortamlarında varsayılan sektör genişliğinin 512-byte
olduğu göz önüne alındığında BIOS, 0000h:7DFEh adresinde aradığı AA55h verisini
bulamadığında bir sonraki açılış ortamının 0 (sıfır) sektörünü belleğe yükler ve Boot
Signiture testini tekrarlar. Her bir ortamın yükleme ve testi sonucunda gerekli imza
bulunamazsa, BIOS, kullanıcıyı açılış yapılacak ortamı sisteme eklemesi hususunda bir
uyarı mesajı ile bilgilendirir ve imzanın taranacağı ortam yerleştirilene kadar sistemi
sonsuz döngü içine sokar. Gerekli imzanın bulunması halinde ise BIOS, JMP 7C00h emri
7
ile kontrolü, o adrese yüklemesi yapılmış MBR programına devreder. Bu noktadan itibaren
ön yükleme kontrolü MBR elindedir.
MBR programının tek görevi, kendi içindeki Partition Table (Bölüm Tablosu)'dan
faydalanarak yüklemesi yapılacak işletim sisteminin bulunduğu disk bölümünü ya da
medya ortamının başlangıç sektörünü hesaplayıp ilgili işletim sistemi için bölümün ya da
ortamın başlangıç sektörü olan Mantıksal 0 (sıfır) Sektör yani VBR (Volume Boot Record)
Sector' ündeki veriyi belleğe yüklemek ve kontrolü VBR programına devretmektir. Zira
MBR verisi 512-byte genişliğindedir ve bu genişlik tüm işletim sistemini yükleyebilmek
için yeterli değildir. VBR genişliği ise bölümün ya da ortamın dosya sistemi özelliklerine
göre birden fazla sektörü içererek toplam olarak değişken genişlikte olabilir. Örnek olarak
NTFS dosya sistemi için izin verilen en fazla VBR uzunluğu 16 sektör - 8192-KB'tır [6],
MS (Microsoft) Windows 7 x86_64 işletim sistemi, bu 16 sektörün 9 adetini [7], MS
Windows XP x86 işletim sistemi ise 7 adetini [7] kullanmaktadır.
Belirtildiği üzere VBR programı değişken uzunlukta olabilir ve birincil görevi işletim
sistemini oluşturan çekirdek dosyalarını açılış ortamından okuyup belleğe yüklemektir.
VBR'ın diğer ve tasarımdaki isteğe bağlı olarak mevcut görevleri, kullanacıya bir açılış
menüsü sunmak ve menü içeriğine bağlı olarak birden çok işletim sisteminin yüklenebilir
olduğu durumlarda interaktifliği sağlayıp kullanıcının istediği işletim sistemini
yükletebilmesini sağlamaktır.
VBR, tüm bu interaktiflik ve seçim sonrasında işletim sisteminin çekirdek dosyalarını
belleğe yükledikten sonra kontrolü çekirdeğe devreder. Bu noktada PC ön yükleme işlemi
tamamlanmış olur ve işletim sisteminin yüklenmesine çekirdek tarafından devam edilir.
3. GELİŞTİRİLEN ÖN YÜKLEME PROGRAMI
3.1. MBR PROGRAMI
3.1.1. MBR GİRİŞ VE ÖN HAZIRLIKLAR
Projede gerçeklenen MBR yapısı klasik MBR yapısının 1-1 eşleniğidir. Klasik MBR,
yapısal olarak 446-byte uzunluğunda bir ön yükleme programı, 64-byte uzunluğunda
bölüm tablosu ve 2-byte uzunluğunda açılış imzası içerir.
Geliştirilen MBR programı, öncelikle işlemci kaydedicilerinin istenilen değerlere
yüklendiğini garanti altına almaktadır. Bu değerler SS ve CS hariç tüm segment
kaydediciler için 0h, SS segment kaydedicisi ve SP kaydedicisi için (SS:SP) serbest
kullanıma açık belleğin [8] üst sınırı olan 7FFFFh değerleridir (SS=7000h, SP=FFFFh). CS
kaydedicisi ancak ve ancak JMP ve RET emirleri ile yüklenebilir.
MBR programında gerçeklenen bir sonraki adım, BIOS tarafından yüklenmiş mevcut
512-byte'lık verinin 0000:7C00h adresinden, serbest kullanıma açık bellekte 0000:1000h
adresine
kopyalanmasıdır.
Bu
kopyalamanın
ardından
programın
icrası
3-byte
genişliğindeki JMP 101Fh emri ile 101Fh adresinde bulunan Bölüm Tablosu Kontrolü' ne
devredilir. İcra edilecek emir 101F adresindedir çünkü JMP emrinin de tümüyle bellekten
okunmasıyla beraber 30-byte'lık program icrası işlenmiş durumdadır. Şekil 2'de örnek bir
ön hazırlık kod bloğu incelenebilir.
Şekil 2. MBR ön hazırlık örneği
9
3.1.2. MBR BÖLÜM TABLOSU KONTROLLERİ
Bölüm tablosu, 16-byte genişliğinde 4 adet bölüm kaydından oluşmaktadır [9]. Bu
kayıtların ilk byte'ı bölümün Aktif olup olmadığını belirtir. Aktif bölümler için bu veri 80h,
diğer durumlar için ise 0h'tir.
Proje MBR programı, bölüm tablosu içindeki kayıtları teker teker inceleyerek tablonun
tutarlılık durumunu kontrol etmekte, kayıtlar içinde aktiflik durumu ilgili byte'ı için 80h ve
0h verilerinden başka bir veri olmamasını, bölüm tablosunda birden fazla aktif bölümün
bulunmamasını ve yüklemeye devam edebilmek için aktif olarak işaretlenmiş bir bölüm
kaydının mevcut olmasını gerektirmektedir. Bu durumların dışında, birden fazla aktif
bölümün bulunması, hiçbir bölümün aktif olarak işaretlenmemiş olması gibi herhangi bir
durumla karşılaşıldığında program, BIOS Video Interrupt [10]'larını kullanarak yükleme
yapmaya devam edilemeyeceğine dair hata ile ilgili bir mesajı ekrana yazdırıp, Şekil 3'te
örneklendirilen kodlarla işlemciyi sonsuz döngüye sokarak sistemi kilitlemektedir.
Şekil 3. Sistemi kilitlemek
3.1.3. MBR TARAFINDAN VBR'NİN YÜKLENMESİ
Bölüm tablosu taranıp aktif bölümün bulunması ardından yapılması gereken iş
yüklemeye devam edilcek bölümün Mantıksal 0 Sektörünün yani VBR kodunun belleğe
yüklenmesi işidir. Bu işi gerçekleştirebilmek için BIOS Disk Interrupt [11]'larının 2h, 41h
ve 42h numaralı fonksiyonlarından faydalanılmıştır.
BIOS Disk Interrupt'ı olan Int 13h programının 41h fonksiyonu, Genişletilmiş BIOS
desteğinin olup olmadığı kontrolünü yapar. Bu destek mevcudiyeti, günümüz yüksek
kapasiteli disklerin sektör adreslemede kullandığı LBA alt-sistemi kullanılabilirliğini
belirler. Bu durumda diskten okuma yapabilmek için, mevcut standart bölüm tablosu
kayıtlarının LBA desteği sınırları dahilinde 2-TB toplam disk kapasitesi sınırlarında olan
10
disk bölümleri içinde istenilen herhangi bir sektör, 42h numaralı Int 13h fonksiyonu
rahatlıkla kullanılabilir. Okuma yapılacak olan sektör VBR sektörü olacağından, bölüm
kaydı içinde, bölümün başlangıç LBA adresi, okuma yapılacak sektör adresi parametresi
olarak 42h fonksiyonunda sorunsuz olarak kullanılabilir.
Genişletilmiş BIOS desteğinin mevcut olmadığı durumlarda ise disk üzerinden okuma
yapabilecek Int 13h fonksiyonu, 2h numaralı fonksiyondur ve bu fonksiyon, disk
sektörlerini adreslemek için CHS (Cylinder-Head-Sector) alt-sistemini kullanır. CHS
adresleme ile teorik olarak 8-GB toplam disk kapasitesi sınırlarında olan disk
bölümlerinden okuma yapılabilir olmasına karşın, CHS sistemi kısıtlamaları ve sistemler
arası uyumsuzluklardan ötürü adreslenebilir toplam kapasite 8-GB'ın altındadır. Bu
durumlara dikkat edilerek yapılacak olan VBR sektörünün okunması, bölüm kaydı içindeki
bölümün başlangıç CHS adresinin 2h fonksiyonuna sektör adresi parametresi olarak
iletilmesi ile gerçekleştirilir.
Her iki durum için de tek bir sektör okuması yapılmış ve okunacak verinin bellek
tampon adresi olarak 0000h:7C00h adresine kaydedilmesi sağlanmıştır. 0000h:7C00h
adresinde bulunan 512-byte genişliğindeki VBR kodunun son iki byte'ında açılış imzası
aranır ve bu imzanın varlığı ile bölüm üzerinde yüklü bir işletim sisteminin olup olmadığı
durumu teyit edilir. İmzanın varlığı ile bölümde yüklü bir işletim sistemi olduğu
garantilendikten sonra program akışı, 0000h:7C00h adresine sıçrama yapılarak VBR
programına devredilmiştir.
3.1.4. MBR DURUM MESAJLARI
Geliştirilmiş olan MBR programında hemen hemen her bir alt işlem için, BIOS Video
Interrupt'ları kullanılarak kullanıcıya bazı bilgilendirme ve durum mesajları iletilmektedir.
Bölüm tablosunun tutarsız olduğu durumda tablonun bozuk olduğuna dair bir hata durum
mesajı, ön yüklemeye devam edilecek aktif bölüm bulunamadığı durumda bu duruma dair
bir hata mesajı ve VBR yüklemesi de dahil olmak üzere hiçbir sorunla karşılaşılmadığı
durumda kontrolün VBR programına devrediliyor olduğuna dair bir bilgi mesajı gibi
mesajlar MBR program kodu içine gömülmüş olup, ilgili durumlarda mesajların başlangıç
adreslerinin bir mesaj yazdırma alt fonksiyonuna parametre olarak iletilmesi ile ekrana
11
yazdırılmıştır. Şekil 4'te örnek durum mesajları ve Tablo 4'te mesaj yazdırma alt
fonksiyonunun parametre yapıları incelenebilir.
Şekil 4. Örnek MBR durum mesajları
Tablo 4. MBR mesajlarını yazdırma alt fonksiyonu parametreleri
Tip
Bellek Adresi
Açıklama
Giriş parametresi
BP + 4h
Giriş parametresi
BP + 5h
Giriş parametresi
Giriş parametresi
BP + 6h
BP + 8h
CarriageReturn+LineFeed (CRLF)
karakterlerini atlama bayrağı
Mesajın gösteriminden sonra sistemi kilitleme
bayrağı
Mesaj segment değeri
Mesaj offset değeri
3.2. VBR PROGRAMI
3.2.1. GİRİŞ VE ÖN HAZIRLIKLAR
MBR ve VBR programları biribirnden bağımsız programlardır ve birbirleri arasında
veri alış-verişi olmamalıdır. Bu durumdan faydalanılarak, örnek olarak MS MBR programı
ile bir başka işletim sisteminin VBR programı yüklemesi ya da tersi şekilde geliştirilen
MBR programı ile MS VBR programı yüklemesi yapılabilir.
MBR programından bağımsız olarak geliştirilen VBR programının yapacak olduğu ilk
iş, MBR programına benzer bir şekilde, işlemci kaydedicilerini istenilen değerlere
yüklemek ve ardından kendisini, serbest kullanılabilir bellekte daha düşük bir adrese
12
kopyalamaktır. Böylece belleğe daha sonra yapılacak olan yüklemeler için fragmantasyon
olmadan daha fazla boş bellek bulunması imkânı sağlanmıştır. Zira MBR programı
tarafından tüm VBR programının yalnızca 1 sektörlük kısmı okunmuştur ve VBR
programının diğer disk sektörlerinde bulunan kısmı, gene VBR programının ilk sektörlük
parçası içindeki bir alt fonksiyon tarafından diskten okunup belleğe yüklenecektir.
Bir bölümün NTFS dosya sistemi ile formatlanması ile bölümün VBR sektörü içine,
VBR programıyla birlikte BIOS Parameter Block (BPB)[7] adı verilen ve bölümün ve
dosya sisteminin spesifikasyonlarını içeren bir veri bloğu yazılır. Bu blok içinde VBR
açısından önemli olan iki adet veriden birincisi bölümün kaçıncı fiziksel sektörden
başladığı (HiddenSectors), ikincisi ise VBR programının tamamının kaç sektör yer
kapladığı (ReservedSectors) verileridir.
VBR içinde, MBR programından bağımsız olması sebebiyle bir disk okuma alt
fonksiyonu yeniden implemente edilmiştir. Bahsedildiği üzere VBR programının
gerçekleştirmesi gereken bir diğer görev, bu alt fonksiyonu kullanarak kendisine ait tüm
programın eksik kısımlarını belleğe yüklemektir. Bu işlemi gerçekleştirebilmek için BPB
içindeki HiddenSectors ve ReservedSectors verilerinden faydalanır. Okuma yapılacak
sektör, HiddenSectors+1 numaralı fiziksel sektörüdür ve okuma yapılacak sektör sayısı
ReservedSectors-1 adettir. Çünkü HiddenSectors verisi, MBR içinden bakıldığında
bölümün başlangıç sektörünü belirtmektedir ve 1 adet sektör MBR tarafından zaten
okunmuştur.
İmplemente edilen disk okuma fonksiyonunun parametre ve kullanılan yerel değişken
yapıları Tablo 5'te gösterilmiştir.
Tablo 5. Disk sektörleri okuma alt fonksiyon parametreleri
Tip
Bellek Adresi
Açıklama
Giriş parametresi
Giriş parametresi
Giriş parametresi
Giriş parametresi
Giriş parametresi
Çıkış parametresi
Çıkış parametresi
BP + 4h
BP + 6h
BP + 8h
BP + Ah
BP + Ch
BP + 10h
BP + 11h
Okuma yapılacak disk numarası
Okunacak sektör sayısı
Hedef bellek offset değeri
Hedef bellek segment değeri
Okuma yapılacak başlangıç LBA numarası
Fonksiyon geri dönüş değeri - Durum kodu
Fonksiyon geri dönüş değeri - Durum bayrağı
13
Tablo 5'in devamı
Yerel değişken
Yerel değişken
Yerel değişken
Yerel değişken
Yerel değişken
Yerel değişken
Yerel değişken
Yerel değişken
Yerel değişken
Yerel değişken
Yerel değişken
Yerel değişken
BP - 2h
BP - 3h
BP - 4h
BP - 5h
BP - 6h
BP - 8h
BP - Ah
BP - Ch
BP - Eh
BP - 10h
BP - 11h
BP - 12h
Geçici durum kodu
Okuma deneme sayısı
Disk alt sistemi reset deneme sayısı
Disk parametreleri alma deneme sayısı
CHS - Toplam silindir sayısı
CHS - Her silindirdeki Head sayısı (HPC)
CHS - Her izdeki sektör sayısı (SPT)
SPT * HPC
CHS okuma yapılacak silindir
CHS okuma yapılacak head
CHS okuma yapılacak sektör
CHS operandlarının hesaplanmışlık bayrağı
3.2.2. VBR TARAFINDAN BİR AÇILIŞ MENÜSÜ YÜKLENMESİ
Tüm VBR programı tamamen belleğe yüklendikten sonra gerçekleştirilen bir sonraki iş
ekrana bir Boot Menu (Açılış Menüsü) yazdırmaktır.
Açılış menüsü içindeki text veriler direkt olarak VBR programı içine yerleştirilmiştir ve
her bir veri sırasıyla adreslenip okunarak direkt olarak BIOS Video Memory (BIOS Vidyo
Bellek) 'e yazdırılmıştır. Ekranda karmaşık bir görüntünün oluşmaması için vidyo belleğe
direkt yazma erişimi yapan ve parametre olarak ekrana yazdırılacak metni, yazılmak
istenilen ekran satır ve sütun numaralarını ve yazdırılacak karakterlerin özniteliklerini
parametre olarak alabilecek bir alt fonksiyon geliştirilmiştir. Ekranı temizlemek, Cursor
görünürlüğünü değiştirmek gibi işlemler için BIOS Video Interrupt'larından da
faydalanılarak, açılış menüsünde bulunacak işletim sistemleri seçenekleri text verileri de
dâhil olmak üzere tüm açılış menüsü text verileri bu alt fonksiyon tarafından vidyo belleğe
yazdırılmaktadır. Bu alt fonksiyonun parametre ve kullanılan yerel değişken yapıları Tablo
6'da, hem emülatör ortamında hem de üretim ortamında ekranda görüntülenen açılış
menüsü örneği de Şekil 5'te ve Şekil 6'da gösterilmiştir.
14
Tablo 6. Vidyo belleğe yazma alt fonksiyon parametreleri
Tip
Bellek Adresi
Açıklama
Giriş parametresi
Giriş parametresi
Giriş parametresi
Giriş parametresi
Giriş parametresi
BP + 4h
BP + 5h
BP + 6h
BP + 8h
BP + Ah
Giriş parametresi
Yerel değişken
Yerel değişken
Yerel değişken
Yerel değişken
BP + Ch
BP - 4h
BP - 5h
BP - 6h
BP - 7h
Mod bayrakları
Öznitelikler
Erişim satır ve sütun değeri
Veri uzunluğu
Veri bellek offset değeri / Karakter ASCII
değeri
Veri bellek segment değeri
Kaynak tipi bayrağı
Öznitelikler yazılacak / yazılmayacak bayrağı
Karakter / Text yazılacak bayrağı
Gerçekte yazılan veri uzunluğu
Şekil 5. Ekranda görüntülenen açılış menüsü - emülatör ortamı
15
Şekil 6. Ekranda görüntülenen açılış menüsü - VMWare ortamı
3.2.3. MENÜ KULLANICI ETKİLEŞİMİ - İŞLETİM SİSTEMİ SEÇİLİMİ
Uygulama yazılımlarında interaktiflik yani kullanıcı etkileşimi önemli konulardan
biridir. Bir program, kullanıcı tarafından yönlendirilme gereği duyabilir. VBR programı da
yüklemeye devam edilecek işletim sisteminin seçilimi konusunda kullanıcı etkileşimi
gerektirmektedir. Bu sebepten ötürü BIOS Keyboard Interrupt [12]'larından faydalanılarak
kullanıcının, seçimi yönlendirmesini ve seçimi onaylamasını sağlayan bir alt fonksiyon
geliştirilmiştir.
Geliştirilen alt fonksiyon, klavye tamponunu sürekli olarak kontrol ederek basılan bir
tuş olup olmadığını kontrol eder. Bir tuşa basıldığı durumu yakalandığında, Klavye Tuş
Tarama Kodları 'nı kullanarak basılan bu tuşun Aşağı ya da Yukarı Yön Tuşları ya da
Enter Tuşu olup olmadığı kontrolü yapılır. Basılan tuşun aşağı veya yukarı yön tuşları
olması durumunda, yukarı ya da aşağı olması durumuna göre seçili işletim sistemi indeksi
16
yeniden hesaplanır ve ekrandaki yeni indekse sahip işletim sistemi ismine, vidyo belleğe
yazma erişimi sağlayan alt fonksiyon aracılığıyla, arkaplan aydınlatma efekti uygulanır.
Böylece kullanıcı yapmış olduğu seçimi görsel olarak da izleyebilmektedir. Şekil 7'de bu
durum örneklendirilmiştir.
Şekil 7. Açılış menüsü içinde gezinti
Basılan tuşun Enter tuşu olması durumunda seçili işletim sistemi indeksi onaylanır ve
yüklemeye devam edecek olan bir başka alt fonksiyon çağrımı yapılır. Bu yeni alt
fonksiyonun görevi kullanıcının yapmış olduğu seçime dayalı olarak ilgili disk
sektöründen açılışa devam edecek olan program kodunu belleğe yüklemek ve genel icraya
o programdan devam edilmesini sağlamaktır.
17
3.2.4. SEÇİLİ İŞLETİM SİSTEMİNİN YÜKLENMESİNE DEVAM EDİLMESİ
Kullanıcı yüklemeye devam etmek istediği işletim sistemi seçimini yaptıktan sonra
VBR programı, programın içine gömülü veri yapısı içinden, seçili indeks verisi aracılığıyla
hedef işletim sisteminin VBR programının bulunduğu disk sektör numarası verisini okur.
Buradaki sektör numarasının LBA_0 sektörünü gösterdiği durum, seçilen işletim
sisteminin, bu projede bahsi geçen geliştirme sürecindeki işletim sistemi olduğu durum
olarak kabul edilmiştir ve yükleme adımları bu işletim sistemi üzerine devam edecektir.
Şu anki mevcut durumda bu işletim sistemi için tasarlanmış-geliştirilmiş mevcut bir
çekirdek bulunmadığından yükleme işlemine devam edilememekte ve şu anki konumdan
itibaren, bazı sistem tablolarının oluşturulması ve Protected Mode'a geçilmesi gibi
tamamlanması gereken işlerin bir listesi ekrana yazdırılarak kullanıcıya belirtilmektedir.
İlgili durum Şekil 8'de gösterilmiştir.
Şekil 8. VBR programının görevini tamamlaması
18
Gömülü veri içinden okunan sektör numarasının LBA_0 sektörünü göstermediği durum,
kullanıcının, disk üzerinde bulunan başka bir işletim sistemini seçtiği anlamını taşır.
Dolayısıyla aktif VBR programı, hedeflenen sektördeki hedef VBR programını
0000h:7C00h adresine yükleyerek kontrolü bu programa devreder. PC'nin açılış
işlemlerine devam etmesinden artık yüklemesi yapılmış bu VBR programı sorumludur.
İlgili durum Şekil 9'da gösterilmiştir.
Şekil 9. Kontrolün hedef diğer işletim sistemi VBR programına devredilmesi
4. İRDELEME VE SONUÇLAR
Proje geliştirme süresince yaşanılan en büyük problem MBR ve VBR sektörlerinin 512byte ile sınırlı kalmak zorunda olmaları problemidir. Her iki program için de 512-byte
içine sığdırılması gereken en önemli bloğun disk okuma işlemlerini gerçekleştirecek alt
fonksiyonlar olduğu görülmüştür. Bunun yanında temel kullanıcı bilgilendirme
mesajlarının da bu sektörler içine yerleştirilmesi gerekliliği, efektif alan kullanımı ve kod
optimizasyonu konularını ön plana çıkartmıştır. Ek olarak proje genelinde karşılaşılan
diğer sınırlamalar ve sağlanması gereken tüm gereksinimler üzerinde yapılan çalışmalar,
Assembly programlama dilinin efektif kullanımı konusunda çok önemli katkılar
sağlamıştır.
Geliştirme ortamı olarak kullanılan MS Windows işletim sisteminin bölüm dosya
sistemini yönetmesi konusunda BPB yapısının ve buna ek olarak bölüm tablosu
değerlerinin sıkça referanslandığı ve bu verilerin sürekli olarak kullanıldığı
gözlemlenmiştir. Bu veri bloklarına tutarsız veriler yerleştirilmesi sonucunda dosya sistemi
üzerinde hatalı işlemlerin yapıldığı ve ilgili disk bölümüne olan erişimlerin tamamen
yitirildiği durumu, gözlemlenen bir başka durumdur. Özellikle hem bölüm tablosu hem de
NTFS BPB içindeki bölümün başlangıç sektörü ve toplam sektör sayısı verilerinin
değiştirilmesi dosya sistemi ve bölümün tamamen yitirilmesine sebep olmuştur.
Ön yükleme programının kodlanması sürecinde segmentli ve indeksli adreslemelerde
segment prefixlerinin kullanımının ihmal edilmemesi gerektiği gözlemlenmiştir. Alt
fonksiyonlarda, fonksiyona stack üzerinden iletilen parametreler ve gene stack alanı
üzerinde tahsisi yapılan yerel değişkenlere SS prefixi ile erişilmesi gerektiği görülmüştür.
Aksi durumda bazı sistemlerde BP ile indekslenen parametre ve yerel değişkenlerin aslında
CS:BP ile indekslendiği, bazı sistemlerde ise DS:BP ile indekslendiği durumu ile
karşılaşılmıştır. Halbuki doğru verilerin bulunduğu konum SS:BP konumudur. Stack
alanının, Real Mode altına 2-byte alignment ile işlev görmesi, stack işlemlerinde dikkat
edilmesi gereken bir başka konudur.
MBR sektörünün ve ilk VBR sektörünün 512-byte genişliğinde olması konusu, bu
sektörlerdeki program verilerinin 512-byte'tan az olduğu durumda padding yapılması
gerekliliğini ortaya çıkartmıştır. Ayrıca her iki sektör için de, son 2-byte'lık verinin
20
BootSigniture olmaması durumunda ön yükleme işlemi devam edememekte olduğu ve
BootSigniture verisinin tam yerinde ve tam formatında olması gerektiği gözlemlenmiştir.
Intel işlemcilerin Little Endian [14,15] çalışmasından dolayı [2,3,14] ön yükleme
programı içinde kullanılan BootSigniture ve yerel sabitler gibi verilerin, endianness
konusuna dikkat edilerek uygun formatta oluşturulması gerekliliği ortaya çıkmıştır.
Endianness konusuna dikkat edilmediği durumlarda yapılan hesaplamaların yanlış sonuçlar
ürettiği görülmüştür.
Hem MBR hem de VBR içindeki mesajların ekrana yazdırılması noktasında,
yazdırılacak metnin nerede sonlanacağının belirlenmesi ihtiyacı üzerine kullanılan text
verilerin Null-terminated String [16] olarak tanımlanmaları gereksinimi oluşmuştur.
Sonuç itibariyle, PC'nin açılış sürecini BIOS'tan devralabilen, interaktif olarak
kullanıcıya açılışa devam edilecek işletim sistemini seçme imkanı tanıyabilen ve kontrolü
seçili işletim sisteminin yükleyicisine devredebilen bir ön yükleyici programı geliştirmek
amacına sorunsuz bir şekilde ulaşılmıştır.
5. GELECEKTE YAPILMASI PLANLANAN ÇALIŞMALAR
Geliştirilen ön yükleme programının mevcut eksikliği, 3.2.4 başlığı altında da bahsi
geçtiği üzere geliştirme süreci içindeki işletim sistemi çekirdeğinin mevcut olmayışından
kaynaklanan çekirdek yüklemesi adımının gerçekleştirilememesidir. Bu eksikliği ortadan
kaldırmak ve işletim sisteminin geliştirilmesine devam etmek konuları hususunda
yapılması planlanan çalışmalar maddeler halinde aşağıda sıralanmıştır:
 FASM, MASM gibi mevcut assembler yazılımlarının bazı varsayılan
sınırlandırmaları ve gelişmiş debugging özelliklerine sahip emülatörlerin
bulunamıyor olmasından ötürü tüm bu eksiklikleri gidermek adına 2 farklı proje
geliştirilecektir. Bunlardan biri mevcut assemblerların kısıtlamalarını aşmak ve
daha esnek bir geliştirme ortamı sunabilmek adına bir yeni bir x86 assembler
yazılımı, bir diğeri de StackTrace, TraceInto, StepOver ve alışkın olunulan
günümüz debuggerları tarafından sağlanan diğer özelliklerin mümkün olduğunca
desteklenileceği bir x86 emülatörü ortamıdır.
 Öncelikli olarak assembler problemi çözüme ulaştıktan sonra 3.2.4 başlığı altında
bahsedilen Yapılacaklar Listesi konularına yönelinecek ve o işlemler
tamamlanacaktır. O noktada işlemci Protected Mode altında çalışıyor olacağından,
Protected Mod ortamına uygun, kontrolün devredileceği bir işletim sistemi
çekirdeği geliştirilmesi konusuna giriş yapılacaktır.
 Bu projenin VBR konu başlığı altında mevcut dosya sistemi desteğinin NTFS
olduğundan bahsedilmişti. VBR programı içerisinde başka dosya sistemleri
spesifikasyonlarının da desteği sağlanmalıdır. Dolayısıyla VBR programı ve dosya
sistemlerinin BPB perspektifleri gelecekte tekrar ele alınması gereken konulardır.
 Protected Mode altında BIOS interruptları kullanılamayacak olduğundan temel
Giriş/Çıkış işlemlerinin gerçekleştirilebileceği servis programlarının yeniden
geliştirilmesi gerekmektedir.
 Tüm bu temel konular tamamlandıktan sonra standart C kütüphanesi fonksiyonları
assembly dili ile tekrar kodlanacak ve geliştirme sürecindeki hedef işletim
sistemine port edilecektir. Porting işlemi tamamlandıktan sonra geliştirme
programlama dili olarak bir sonraki seviyeye yani assembly ortamından C
ortamına geçiş yapılabilir.
22
 C ortamına geçiş tamamlandıktan sonra artık tam anlamıyla işletim sistemi
geliştirme çalışmalarına başlanılabilir. Öncelikli olarak tamamlanması planlanan
konular çekirdek mimarisi kararı ve ardından Memory Manager'ın geliştirilmesidir.
 Object Manager ve Scheduler konuları da süreç içerisinde el atılacak diğer iki
konudur.
Bu noktadan itibaren akla gelebilecek diğer tüm konular, fazlasıyla uygulama spesifik
olacağından burada bahisleri geçmeyecektir.
6. KAYNAKLAR
[1]
PARDUS İşletim Sistemi - Wikipedia,
http://tr.wikipedia.org/wiki/Pardus_%28i%C5%9Fletim_sistemi%29 (Son erişim:
16.05.2013)
[2]
Intel x86, Wikipedia, http://en.wikipedia.org/wiki/X86 (Son erişim: 16.05.2013).
[3]
80386 Programmer's Reference Manual,
http://pdos.csail.mit.edu/6.828/2010/readings/i386/toc.htm (Son erişim:
16.05.2013).
[4]
Real Mode, Wikipedia, http://en.wikipedia.org/wiki/Real_mode (Son erişim:
16.05.2013).
[5]
Master Boot Record, Wikipedia, http://en.wikipedia.org/wiki/Master_boot_record
(Son erişim: 16.05.2013).
[6]
New Technology File System, http://ntfs.com , (Son erişim: 16.05.2013).
[7]
Boot Records Revealed!, http://thestarman.pcministry.com/asm/mbr/index.html
(Son erişim: 16.05.2013).
[8]
Memory Map (x86), http://wiki.osdev.org/Memory_Map_%28x86%29 (Son
erişim: 16.05.2013).
[9]
Partition Table Entries, Wikipedia,
http://en.wikipedia.org/wiki/Master_boot_record#Partition_table_entries (Son
erişim: 16.05.2013).
[10] INT 10H, Wikipedia, http://en.wikipedia.org/wiki/INT_10H (Son erişim:
16.05.2013).
[11] INT 13H, Wikipedia, http://en.wikipedia.org/wiki/INT_13H (Son erişim:
16.05.2013).
[12] BIOS Interrupt Call, Wikipedia, http://en.wikipedia.org/wiki/BIOS_interrupt_call
(Son erişim: 16.05.2013).
24
[13] Protected Mode, Wikipedia, http://en.wikipedia.org/wiki/Protected_mode (Son
erişim: 16.05.2013).
[14] Endianness, Wikipedia, http://en.wikipedia.org/wiki/Endianness (Son erişim:
17.05.2013).
[15] Big and Little Endian,
http://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Data/endian.html (Son
erişim: 17.05.2013).
[16] Null-terminated String, http://programmedlessons.org/AssemblyTutorial/Chapter20/ass20_2.html (Son erişim: 17.05.2013).

Benzer belgeler