ÇALIŞTIRILABİLİR DOSYALAR
5.1. COM ve EXE Tipi Dosyalar Arasındaki Farklar
DOS işletim sistemindeki işletilebilir dosyalar COM, EXE ve BAT tipindeki dosyalardır.
BAT tipindeki dosyalar işletim sisteminin komutlarından oluşur.
COM ve EXE tipindeki dosyalar ise makine dili komutları ve veri alanları içerirler.
EXE dosyaların başında EXE DOSYA BALIĞI (EXE File Header) denen bir tablo yer alır. Segment başlangıç değerleri bu tablodan elde edilir.
COM tipi dosyalarda FAR tipi dallanmalar genelde kullanılmazlar çünkü bu dosyalar 64K'dan küçük dosyalardır. 64K'dan küçük alanlarda erişim için ofset adresini değiştirmek yeterlidir.
EXE dosyalarda ise 64K sınırlaması yoktur. Bu dosyalar FAR tipi komutlar da içerirler. FAR tipi komutlarda segment adresi de komut kodu içerisinde yer alır.
EXE dpi dosyalar belleğe yüklendikten sonra FAR tipi komutların düzenlenmeleri gerekir. Bu amaçla Relocation Table denilen bir tablo oluşturulur. EXE dosya başlığında bu tablonun ilk terimine işaret eden bir işaretçi de içerir. Genelde bu tablo EXE dosya başlığının hemen ardında yer alır. DOS, EXE dosyayı belleğe yükledikten sonra dosyayı yüklediği segment adresi değerini, dosya içindeki FAR tipi komutların segment adres alanlarına ekler. Bu işleme Yeniden Konumlandırma (Relocation ) adı verilir.
COM dosyalar belleğe yüklendikten sonra bütün segment kütüklerine Program Segment Prefix'in (PSP) segment adresi yüklenir. Komut işaretçisine (İP) ise 0100H değeri verilir .Yığına iki sekizli uzunluğunda sıfır değeri yazılır. Mümkünse yığın işaretçisine (SP) FFFEH değeri verilir.
EXE dosyalarda ise yığın segmenti (SS) ve yığın işaretçisi (SP) değerleri EXE dosya başlığından okunur,
Yığın işaretçisi dosya üzerindeki belirli bir yere işaret ettirilerek yığın içindeki bilgiler önceden belirlenebilir.
COM ve EXE dosyaların her ikisi de belleğe aynı şekilde yüklenip işletilirler. Bu işlem için DOS'un 21. kesmesinin 4BH fonksiyonu kullanılır. Bu fonksiyon bir dosyanın tipini anlamak için uzantısını kontrol etmez. Dosya belleğe yüklenirken ilk iki sekizlisinin değeri kontrol edilerek dosyanın EXE tipinde mi yoksa COM tipinde mi olduğu anlaşılır.
COM tipinde bir dosya belleğe yüklendiğinde kullanılabilir bütün bellek alanları bu dosyanın kullanımına bırakılır. COM dosya 64K'dan küçük bir alan kaplamasına karşı diğer dosyaları belleğe yükleyerek çalıştırabilir. Ancak bu işlemi gerçekleştirmek için öncelikle kendisine ayrılan bellek miktarını ikinci dosyanın çalışabileceği kadar serbest bir alan bırakacak şekilde azaltması gerekir. EXE dosyalar ise dosya başlıklarında çalışmaları için gerekli minimum ve maksimum bellek miktarı bilgilerini içerirler. Eğer EXE dosyanın çalışması için gerekli minimum bellek miktarından daha az serbest bellek alanı varsa program çalıştırılmaz ve yeterli bellek alanı bulunmadığına ilişkin aşağıdaki mesaj verilir.
Program too big to fit in memory
5.2. EXE Dosya Başlığı
EXE dosya başlığının yapısı aşağıda gösterilmiştir.
| OFSET | TANIM |
| 000H | 4DH SAH. Bu dosyanın EXE tipinde olduğunu gösterir. |
| 002H | Mod 512'ye göre dosya uzunluğu. |
| 004H | 512 sekizlilik sayfalar halinde dosya uzunluğu. |
| 006H | Relocation Table'daki terim sayısı. |
| 008H | 16 sekizlilik bölümler halinde dosya başlığının uzunluğu |
| 00AH | Program yüklendikten sonraki minimum bellek istemi |
| 00CH | Program yüklendikten sonraki bellek istemi |
| 00EH | Yığınının dosyadaki yeri. (SS için gerekli) |
| 010H | Yığın işaretçisi. (SP) |
| 012H | Bir kontrol değeri. |
| 014H | Komut işaretçisi. (İP) |
| 016H | Program kısmının dosya içindeki yeri. |
| 018H | İlk Relocation teriminin yeri. |
| 01AH | Overlay numarası. Ana program için sıfır değerini alır. |
5.3. Program Segment Prefix
Program Segment Prefix, DOS ile çalıştırılmak üzere belleğe yüklenen program arasındaki iletişimi sağlamak üzere ayrılmış bir alandır. 100H sekizli uzunluğundadır ve çalıştırılmak istenen program PSP'nin hemen ardına yüklenir. COM tipi dosyalar belleğe yüklendikten sonra segment kütüklerin hepsi PSP'nin segment adresine eşitlenir. Bu yüzden COM tipi dosyalarda komut işaretçisine (İP) başlangıç değeri olarak 100H değeri verilir.
Aşağıda bir PSP'nin yapısı gösterilmektedir.
| OFSET | TANIM |
| 000H | Int 20H. |
| 002H | Kullanılamayan ilk segment. |
| 004H | Bu alanı DOS kullanır. |
| 005H | DOS Function Dispatcher'ı çağıran bir komut içerir. |
| 00AH | Bitiş Adresi |
| 00EH | Programın kırılması durumunda dallanılacak adres. |
| 012H | Kritik hata durumunda dallanılacak adres. |
| 016H | DOS için ayrılmıştır. |
| 02CH | Çevre değişkenleri için işaretçi |
| 02EH | DOS için ayrılmıştır. |
| 05CH | İlk boş FCB. |
| 06CH | İkinci boş FCB. |
| 080H | DTA alanı. (Komut satırı parametreleri buraya yazılır.) |
| 100H | Program buraya yüklenir. |
5.3.1. PSP'nin detayları
Ofset 000H-001H: PSP'nin ilk iki sekizlisi 'CD 20' olup bu değerler Int 20 komutunun makine dilindeki karşılığıdır. Bu nedenle COM tipindeki dosyalar JMP 00 şeklinde bir komutlarda sona erdirilebilirler.
Ofset 002H-003H: Bu iki sekizlilik alan bir segment değeri içerir. Bu değer kullanıcı programına ait olmayan ilk bellek alanına işaret eder. Bir COM dosyası belleğe yüklendiğinde bütün belleğe sahip olur. EXE tipi dosyalar ise kendi EXE dosya başlıklarında minimum ve maksimum bellek ihtiyaçlarını içerirler. DOS bellek organizasyonunu bu bilgilere bakarak gerçekleştirir.
COM tipi bir dosya için bu değer kullanılabilir bellek miktarını verir. Bu sayıyı 10H ile çarparak belleğin kullanılabilir üst sınırını buluruz.
Ofset 005H-009H: Bu alan DOS fonksiyonlarını çağırmak için kullanılabilecek olan far tipinde bir çağrı komutu içerir. DOS tarafından kullanılır. Bu komut o şekilde düzenlenmiştir ki, 006H-007H alanlarındaki iki sekizli yani komutun dallandığı yerin ofset adresi aynı zamanda COM tipi dosyalarda Code Segment (CS) içindeki boş alan miktarını verir.
Ofset 00AH-00BH: Program bittiğinde dallanılacak olan dönüş adresini içerir. Bir program kendi başına başka bir programı yükleyip çalıştırabilir. Alt program ana programa dönmek için bu adresi kullanır.
Ofset 00EH-011H: CTRL-C tuşlarına basılması durumunda bu adrese dallanılır.
Ofset 012H-015H: Kritik hatalarda dallanılacak adresi içerir.
Ofset 02CH-02DH: Çevresel değişkenlere işaret eden bir segment değeri içerir. Ofset olarak sıfır değeri kullanıldığında işaret edilen bu alan aktif DOS arayüz programının (normal olarak COMMAND.COM) adı ve aranılacağı yer, aktif dizinde bulunmayan programlar için bakılması gereken ek dizinlerin yer aldığı PATH bilgisini içerir.
Ofset 05CH-06BH: FCB1
Ofset 06CH-07FH: FCB2
FCB eski bir dosya kontrol sistemidir. Kayıt tipi dosyalara ulaşmak için kullanılır. FCB ile bir dosyaya herhangi bir kayıt pozisyonunda, herhangi bir uzunlukta kayıt işlemleri yapmak mümkündür.
Ofset 080H-OFFH: Komut satırında program isminden sonra gelen kısım parametre olarak kabul edilir ve buraya kopyalanır.
Bu kısım aynı zamanda disk transfer alanı (DTA) olarak kullanılır. Bu alan diske yazma ve diskten okuma işlemleri sırasında tampon alan olarak kullanılır.