İŞLETİM SİSTEMİ YAZIMINDA SEMBOLİK MAKİNE DİLİ KULLANIMI

advertisement
İŞLETİM SİSTEMİ YAZIMINDA SEMBOLİK MAKİNE DİLİ KULLANIMI
ve NASM DERLEYİCİSİ
Selim Nasır
[V:1]
Özet: İşletim sistemlerinin yazımında yüksek seviyeli programlama dilleri ile yap ılamayacak işlemlerde
sembolik makine dillerinin kullanımı zorunlu hale gelmektedir. Bu makalede işletim sistemi yazımında
sembolik makine dillerinin yeri ve CSD i şletim sisteminin yazımında kullanılan NASM derleyici
sisteminin seçilme gerekçesi anlatılmaktadır.
1. GİRİŞ
Bir bilgisayar sistemi donanım, sistem programları ve uygulama programlarından
oluşmaktadır. Günümüzde artık uygulama programlarının tamamı C, C++ gibi yüksek seviyeli diller
ile yazılmaktadır. İşletim sistemi gibi çok aşağı seviyeli işlemler yapan sistem programlar ında ise yine
olanaklı oldukça yüksek seviyeli diller kullanılır. Ancak özellikle donanım bağımlı ve yüksek seviyeli
diller ile yapılamayacak işlemlerde sembolik makine dillerinin kullan ılması zorunlu hale gelmektedir.
Burada dikkat edilmesi gereken nokta özellikle i şletim sistemi yazımı gibi büyük projelerde yalnızca
gerekli yerlerde sembolik makine dillerinin kullan ılmasıdır. Çünkü,
•
•
•
•
Sembolik makine dilleri donan ım bağımlıdır. Yani elde edilen çalışabilir kodlar diğer donanım
mimarilerine aktar ılamazlar.
Sembolik makine dili programlama hatalar ına oldukça açıktır ve hataların izlenmesi zordur.
Yazılan kodun anlaşılması ve değiştirilmesi yüksek seviyeli dillere göre daha zordur.
Algoritmik tasarımdaki küçük bir değişiklik varolan tüm sembolik makine dili kodunu geçersiz
duruma getirebilir. Bu durumda programcı ya tüm kaynak kodunu yeniden yazmalıdır ya da belli
bir algoritmik tasarıma bağımlı kalmalıdır.
Yukarıda belirtilen nedenlerden dolayı CSD işletim sisteminde de ağırlıklı olarak C
programlama dili kullan ılmış ve yalnızca C programlama dili ile yapılamayacak işlemlerde sembolik
makine diline başvurulmuştur. Tipik olarak aşağıdaki işlemlerde sembolik makine diline gereksinim
duyulmaktadır:
•
•
•
•
Doğrudan yazmaçlara ve giriş/çıkış birimlerine erişilmesi
Donanım bileşenlerinin programlanması
Hız ya da yer optimizasyonu gerektiren kritik kodlar ın yazımı
Boot sektöre yerleştirilecek yükleyici programın yazımı
CSD işletim sisteminde izlenen genel tasar ım mantığı gerekli fonksiyonların sembolik makine
dilinde yazımı ve bu fonksiyonların C modüllerinden çağrılması biçimindedir.
2. TEMEL SEMBOLİK MAKİNE DİLİ DERLEYİCİLERİ
Bir mikroişlemciye ilişkin sembolik makine dili o mikroişlemcinin üreticisi tarafından zaten
belirlenmiştir. Sembolik makine dili üretici ba ğımlı olduğundan C programlama dili gibi standartlaşmış
bir dil değildir ve bu nedenle sembolik makine dili derleyicileri aras ında farklılıklar bulunmaktadır.
80x86 tabanlı mikroişlemciler üzerinde sembolik makine dili ile programlama yapmak üzere kullan ılan
derleyicilerde AT&T sözdizimi ya da Intel sözdizimi temel alınmıştır. Her iki sözdizimi arasındaki
belirgin farklar şunlardır:
1
C ve Sistem Programcıları Derneği – CSD İşletim Sistemi Geliştirme Projesi
•
AT&T ve Intel sözdizimlerinde kaynak ve hedef operandlar ters sırada belirtilirler. Örneğin, Intel
sözdiziminde
add eax, 4
biçimindeki bir komut AT&T sözdiziminde
addl $4, %eax
•
biçiminde belirtilir. AT&T sözdizimindeki ‘kaynak, hedef’ belirtimi önceki Unix sembolik makine
dili derleyicileri ile uyumu sağlamak için korunmuştur.
AT&T sözdiziminde hazır operandlar $ öneki ile başlatılır. Intel sözdiziminde ise hazır operandlar
için önek kullanılmamaktadır. Örneğin, Intel sözdiziminde
push 4
biçimindeki bir komut AT&T sözdiziminde
pushl $4
•
•
biçimindedir.
AT&T sözdiziminde yazmaç operandlar ı % öneki ile başlatılır. Intel sözdiziminde ise yazmaç
operandları için önek kullanılmamaktadır.
AT&T sözdiziminde bellek operandlar ının uzunlukları komut isminin son karakterinden
belirlenebilir. Komutta kullan ılan ‘b’, ‘w’ ve ‘l’ sonekleri sırasıyla byte (8-bit), word (16-bit) ve
long (32-bit) uzunlukta bellek operandlarını belirtirler. Intel sözdiziminde bellek operandlar ının
uzunlukları için byte ptr, word ptr ve dword ptr ifadeleri kullan ılmaktadır.
2.1 GAS (GNU Assembler)
GNU sembolik makine dili derleyicisidir. GAS 32-bit bir Unix derleyicisini desteklemek için
tasarlandığından AT&T sözdizimini kullanmaktad ır. Linux kaynak kodlarında bütünüyle GAS sözdizimi
kullanılmaktadır. Unix/Linux sistemlerinde kullanılan temel C/C++ derleyicisi olan GCC (GNU C
Compiler) derleyici sisteminde satıriçi (inline) sembolik makin e dili yazımı da GAS sistemi ile
yapılmaktadır. Sonuç olarak Linux sistemlerinde doğal sembolik makine dili derleyicisi GAS
derleyicisidir.
2.2 NASM (Netwide Assembler)
NASM pek çok amaç dosya formatını destekleyen bir 80x86 sembolik makine dili derleyicisidir ve Intel
sözdizimini kullanmaktad ır. NASM bazı farklılıkları dışında DOS/Windows sistemlerinde kullanılan
MASM/TASM derleyicileri ile benzer özelliklere sahiptir ancak MASM/TASM derleyicilerinden daha
esnek özellikleri bulunmaktadır.
3. CSD İşletim Sisteminde Sembolik Makine Dili Kodlarının Yazımı
CSD işletim sisteminin ilk sürümü yaln ızca 80x86 tabanlı sistemleri destekleyecek biçimde
yazılacaktır. 80x86 tabanlı sistemlere ilişkin kodlamalar /arch/i386 dizinin altında bulunmaktadır.
İşletim sisteminin sembolik makine diline ili şkin kodlarının yazımında bir tercih noktasına gelinmiş ve
GAS ile NASM derleyicileri arasında bir seçim yapılmıştır. Aşağıdaki nedenler gözönünde
bulundurularak sembolik makine dili kodlar ının NASM derleyicisi yazılmasına karar verilmiştir:
•
•
DOS/Windows ortamlarında sembolik makine dili ile programlama yo ğun olarak MASM/TASM
derleyicileri ile yapılmaktadır. NASM derleyicisinin MASM/TASM derleyicileri ile benzerliği
nedeniyle kullanımı ve kodların sözdizimsel olarak algılanması GAS derleyicisine göre daha
kolaydır.
NASM derleyicisi hem DOS/Windows hem de Linux sistemlerinde kullanılabileceğinden yazılan
kaynak kodların her iki platformda da test işlemlerinin yapılabilmesi olanaklı hale gelmektedir.
2
C ve Sistem Programcıları Derneği – CSD İşletim Sistemi Geliştirme Projesi
•
NASM derleyicisi pek çok amaç dosya formatını desteklemektedir. Örneğin, NASM derleyicisi
çıktı olarak düz çalışabilen dosya (pure binary) üretebilmektedir. Böylece platform ba ğımsız
çalışabilen dosya elde edilebilmektedir.
Kaynaklar
1.
2.
3.
4.
Operating Systems – Design and Implementation (Second Edition), A.S.Tanenbaum,
A.S.Woodhull, Prentice Hall Inc, 1997
80x86 Sembolik Makine Dili, Kaan Aslan, C ve Sistem Programcıları Derneği, 2003
www.gnu.org, The GNU Assembler
www.cryogen/Nasm, The Netwide Assembler : NASM
3
C ve Sistem Programcıları Derneği – CSD İşletim Sistemi Geliştirme Projesi
Download